2013-02-09 28 views
0

我在我的應用程序中將播放框架更新爲版本2.1,並且它不起作用。Circumflex orm不適用於Play 2.1

下面是一個簡單的控制器:

package controllers 

import play.api._ 
import play.api.mvc._ 
import models.Country 
import ru.circumflex.orm._ 

object Application extends Controller { 

    def index = Action { 

     val co = Country AS "co" 
     val q = SELECT (co.*) FROM (co) 

     val countries: Seq[Country] = q.list() 

     Ok(views.html.index(countries)) 
    } 

} 

這裏是一個國家的模式:

package models 

import ru.circumflex.orm.{TextField, Table, Record} 
import java.util.regex.Pattern 

class Country extends Record[String, Country] { 
    def PRIMARY_KEY = code 
    def relation = Country 

    def this(code: String, name: String) = { 
    this() 
    this.code := code 
    this.name := name 
    } 

    val code: TextField[Country] = "code".VARCHAR(2).NOT_NULL 
    val name = "name".TEXT.NOT_NULL 

    def cities = inverseMany(City.country) 

    override def toString = name.getOrElse("unknow") 
} 

object Country extends Country with Table[String, Country] { 
    val codeKey = UNIQUE(code) 
    val codeChk = CONSTRAINT("code_chk").CHECK("code IN ('ch', 'us', 'uk', 'fr', 'es', 'it', 'pt', 'by')") 
    val idx = "country_code_idx".INDEX("LOWER(code)").USING("btree").UNIQUE 

    validation.notNull(_.code) 
      .notEmpty(_.code) 
      .pattern(_.code, Pattern.compile("(?i:[a-z]{2})")) 
} 

當打開頁面時,我收到了如下錯誤:

[error] application -                    

! @6d9l5j0i0 - Internal server error, for (GET) [/] ->           

play.api.Application$$anon$1: Execution exception[[RuntimeException: java.lang.ExceptionInInitial 
izerError]]                      
     at play.api.Application$class.handleError(Application.scala:289) ~[play_2.10.jar:2.1.0] 
     at play.api.DefaultApplication.handleError(Application.scala:383) [play_2.10.jar:2.1.0] 
     at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$12$$anonfun$apply$24.apply(
PlayDefaultUpstreamHandler.scala:314) [play_2.10.jar:2.1.0]          
     at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$12$$anonfun$apply$24.apply(
PlayDefaultUpstreamHandler.scala:312) [play_2.10.jar:2.1.0]          
     at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play 
_2.10.jar:2.1.0]                     
     at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play 
_2.10.jar:2.1.0]                     
java.lang.RuntimeException: java.lang.ExceptionInInitializerError         
     at play.api.mvc.ActionBuilder$$anon$1.apply(Action.scala:222) ~[play_2.10.jar:2.1.0]  
     at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$ 
6.apply(Action.scala:109) ~[play_2.10.jar:2.1.0]             
     at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$ 
6.apply(Action.scala:109) ~[play_2.10.jar:2.1.0]             
     at play.utils.Threads$.withContextClassLoader(Threads.scala:18) ~[play_2.10.jar:2.1.0] 
     at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5.apply(Action.sc 
ala:108) ~[play_2.10.jar:2.1.0]                 
     at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5.apply(Action.sc 
ala:106) ~[play_2.10.jar:2.1.0]                 
Caused by: java.lang.ExceptionInInitializerError: null           
     at controllers.Application$$anonfun$index$1.apply(Application.scala:18) ~[na:na]   
     at controllers.Application$$anonfun$index$1.apply(Application.scala:11) ~[na:na]   
     at play.api.mvc.ActionBuilder$$anonfun$apply$11.apply(Action.scala:254) ~[play_2.10.jar:2 
.1.0]                        
     at play.api.mvc.ActionBuilder$$anonfun$apply$11.apply(Action.scala:254) ~[play_2.10.jar:2 
.1.0]                        
     at play.api.mvc.ActionBuilder$$anon$1.apply(Action.scala:217) ~[play_2.10.jar:2.1.0]  
     at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$ 
6.apply(Action.scala:109) ~[play_2.10.jar:2.1.0]             
Caused by: java.lang.ClassNotFoundException: models.Country          
     at java.net.URLClassLoader$1.run(Unknown Source) ~[na:1.7.0_09]       
     at java.net.URLClassLoader$1.run(Unknown Source) ~[na:1.7.0_09]       
     at java.security.AccessController.doPrivileged(Native Method) ~[na:1.7.0_09]    
     at java.net.URLClassLoader.findClass(Unknown Source) ~[na:1.7.0_09]      
     at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.7.0_09]       
     at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.7.0_09]       

燦有人幫我解決這個問題嗎?

+0

這個異常表明models.Country沒有被編譯或者不在類路徑中。 – pedrofurla 2013-02-09 22:33:32

+0

Play 2.1從2.9.x遷移到Scala 2.10。您是否使用了針對2.10編譯的音樂庫? – 2013-02-11 19:06:14

回答

0

我固定使用這些信息是:reference

首先採取回旋的最後一個版本從GitHub:

git clone git://github.com/inca/circumflex.git 

繼文件ORM/src目錄/主/斯卡拉/關係的建議,改線.scala

線55:

val _recordClass: Class[R] = Class.forName(

val _recordClass: Class[R] = this.getClass().getClassLoader().loadClass(

現在我們可以編譯它,萬一安裝在Play採用2.1應用

cd circumflex 
mvn clean install 

你只需要一個模塊:

cd circumflex 
mvn clean install -pl <circumflex-orm> -am 

現在編輯您的project/Build.scala文件添加依賴和本地代表

val appDependencies = Seq( 
    "pro.savant.circumflex" % "circumflex-orm" % "3.1-SNAPSHOT" 
) 

    val main = play.Project(appName, appVersion, appDependencies).settings(defaultScalaSettings:_*).settings(
    resolvers += "Local Maven Repository" at "file:"+Path.userHome.absolutePath+"/.m2/repository" 
) 
+0

謝謝,它的工作。 – Sergey 2013-07-15 08:05:08

0

Circumflex 2.x似乎不是針對scala 2.10(這是2.1版本所需要的)構建的。

在2.10中構建的circumflex 3.0,但它的當前只在快照。 你可以在這裏得到快照:

https://oss.sonatype.org/content/repositories/snapshots/

注意包的名稱從ru.circumflex改爲pro.savant.circumflex,所以你可能需要重構你的import語句。

+0

它沒有幫助=(我得到相同的錯誤 但是最有趣的是所有的測試都通過了成功 – Sergey 2013-03-23 12:53:12