有没有人知道Scala/Lift的OAuth 2.0提供程序(服务器端)实现?我看到Scala 2.0客户端,但没有提供商.
我使用的是SBT 0.7.7.当我对Lift项目进行更改并通过以下方式重新编译时:
jetty-stopcompilejetty-run我收到以下错误:
执行sbt时出错:java.lang.OutOfMemoryError:PermGen space
我在/opt/local/bin/sbt-0.7中定义了以下内容:
# Is the location of the SBT launcher JAR file.
LAUNCHJAR="/opt/local/share/sbt-0.7/sbt-launch-0.7.7.jar"
# Ensure enough heap space is created for SBT.
if [ -z "$JAVA_OPTS" ]; then
JAVA_OPTS="-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:MaxPermSize=256m -Xmx512M -Xss2M"
fi
# Assume java is already in the shell path.
exec java $JAVA_OPTS -jar "$LAUNCHJAR" "$@"
Run Code Online (Sandbox Code Playgroud) 在Lift Web Framework中,简单构建工具(SBT)的依赖项在LiftProject.scala中指定.该文件包含以下代码:
override def libraryDependencies = Set(
"net.liftweb" %% "lift-webkit" % liftVersion % "compile->default",
"net.liftweb" %% "lift-mapper" % liftVersion % "compile->default",
"org.mortbay.jetty" % "jetty" % "6.1.22" % "test->default",
"junit" % "junit" % "4.5" % "test->default",
"org.scala-tools.testing" %% "specs" % "1.6.6" % "test->default",
"org.scala-lang" % "scala-compiler" % "2.8.1" % "test->default",
"org.apache.tomcat" % "tomcat-juli" % "7.0.0" % "test->default",
"com.h2database" % "h2" % "1.2.138"
) ++ super.libraryDependencies
Run Code Online (Sandbox Code Playgroud)
%和%%运算符在这里做什么?如果我将此代码粘贴到scala解释器中,则会出错,并且没有为String或RichString定义%或%%.这里发生了什么?
我过去几个月一直在使用Grails,我非常喜欢它,特别是GORM.但是,我对Scala的Lift感兴趣.因此,我想知道您对哪种Web应用程序更适合这两个框架中的哪一个或者仅仅是品味问题,使用哪种框架?
最后,您认为哪些框架将来会更多使用?我觉得Grails远未达到临界质量而且仍然非常模糊(在过去的几个月里,我有机会与中型公司和IT初创公司合作,主要使用JVM堆栈,只有一个人知道并且使用Grails)我甚至不确定它是否可以成为Java世界的"RoR"(事实上,即使其他框架具有正增长率,过去几个月也会出现增长下降).而且我喜欢Groovy,这很容易学习,但我注意到它对于某些任务来说有多慢.
另一方面,Scala似乎更受欢迎(Tiobe Index),Twitter现在使用它的事实使它在博客圈中的存在更多,有很多爱好者和仇恨者嗡嗡作响.它以快速和可扩展而闻名.然而,对于许多开发人员而言,这种语言似乎有点难以理解和学习(所以它可能永远不会获得主流地位).Lift鲜为人知,我已经阅读了一些报告,它更适合小型应用程序(少于20个域类).
通过看看Groovy-Grails现在主导的书籍数量,但许多出版商都有Scala书籍,所以我认为这种优势不会持续很长时间.
最后,我们遇到的问题是,这两种语言和框架的IDE支持都很差(它在白天变得越来越好,但远远超出了Java商店所期望的效率).
我不想发动火焰战争,但我会非常有兴趣听取其他用户的意见.
最近基于Scala的Web框架社区已经有了很多变化.来自Rails,Rake,ActiveRecord和迁移 - 这是一个很好的Scala框架来构建生产站点?
如果它提供了更好的可维护代码,那么性能的一小部分是可以接受的.如果内置协作功能也会很好 - 例如数据库迁移等.
我开始阅读Lift框架源代码,我发现有很多方法使用名称定义methodName_?,是否有一个_?具有一些特殊含义的约定?
def empty_? : Boolean = {}
Run Code Online (Sandbox Code Playgroud) PartialFunction简而言之,在Scala中,a 是另外定义isDefinedAt方法的函数.
使用一系列case语句很容易定义部分函数.一个简单的例子是,例如:
scala> val pf: PartialFunction[Int, Unit] = {
| case 42 => ()
| }
pf: PartialFunction[Int,Unit] = <function1>
scala> pf.isDefinedAt(42)
res0: Boolean = true
scala> pf.isDefinedAt(0)
res1: Boolean = false
Run Code Online (Sandbox Code Playgroud)
isDefinedAt从case定义部分函数的s 列表中自动生成.
Lift框架在许多地方使用部分功能,例如定义一个请求是应该由Lift的引擎处理还是直接从磁盘上的文件提供服务.有时候,我发现自己想要编写一个case匹配所有输入参数的语句,然后才决定是否要返回一个值.这意味着cases 的初始序列不再足以确定我的函数是否定义在给定值
例如,在Lift中,我想添加一个规则,直接提供所有html和htm文件,并且应该处理带有"lift"扩展名的文件.做这样的事情会很容易:
LiftRules.liftRequest.prepend {
case Req(path, extension, tpe) => extension match {
case "html" | "htm" => false
case "lift" => true
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,在这种情况下,编译器认为我的部分函数是在任何地方定义的,因为第一个case总是匹配.嵌套match可能与所有传入请求不匹配.而且,请求是不匹配的,MatchError …
我想知道是否有办法在Liftweb中使用Mapper进行一些复杂的SQL查询.
实际上,我想要做的是使用它们通过1对多关系链接的事实从数据库Employe和Departments执行Join查询.另一个例子也是受欢迎的.
提前致谢.
以下是一些更多细节:假设我有2个表:
Employee : birthday, department ID, salary
Department : department ID, budget, address
Run Code Online (Sandbox Code Playgroud)
现在我想获得一个对象Employee(用Mapper创建)的列表,它有一个salary > 10$和一个department budget < 100$.
当然,我的原始代码比这复杂得多,但我的目标是能够Employee在其自己的表或链接表中具有与标准对应的映射对象列表(即).