3

Play 2.2 プロジェクトを Hibernate JPA と PostgreSQL データベースで動作させようとしています。Play 2.1.1 で以前に実行したところ、完全に機能しました。次のエラーが表示されます。

play.api.UnexpectedException: Unexpected exception[NoClassDefFoundError: org/w3c/dom/ElementTraversal]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(ApplicationProvider.scala:152) ~[play_2.10.jar:2.2.0]

これがどこから来たのか私にはわかりません。私の build.sbt は次のようになります。

libraryDependencies ++= Seq(
  javaJdbc,
  cache,
  javaJpa,
  "org.apache.directory.api" % "apache-ldap-api" % "1.0.0-M14",
  "postgresql" % "postgresql" % "9.1-901-1.jdbc4",
  "org.hibernate" % "hibernate-core" % "4.2.3.Final",
  "org.hibernate" % "hibernate-entitymanager" % "4.2.3.Final"
)    

そして、私のpersistence.xmlは次のようになります:

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">

<persistence-unit name="defaultPersistenceUnit"
    transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <non-jta-data-source>DefaultDS</non-jta-data-source>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
        <property name="hibernate.hbm2ddl.auto" value="update" />
    </properties>
</persistence-unit>

まだコードを書いていません。設定しただけです。

4

2 に答える 2

6

あなたはコードを書いていないと言ったので、新しい Play を作成する方法を紹介することにしました。JPA と Postgresql を使用した 2.2 アプリケーション。同じようにして違いを確認できます。

最初に、次のコマンドで新しい Play アプリケーションを作成しました。

play new testApp

次に、testApp/conf/META-INF ディレクトリに persistence.xml ファイルを作成し、コンテンツを入力します。

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
         version="2.0">

<persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <non-jta-data-source>DefaultDS</non-jta-data-source>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
        <!--<property name="hibernate.show_sql" value="true"/>-->
        <property name="hibernate.hbm2ddl.auto" value="update"/>
        <property name="hibernate.format_sql" value="true"/>
    </properties>
</persistence-unit>

testApp/conf/application.conf に追加:

jpa.default=defaultPersistenceUnit
db.default.driver=org.postgresql.Driver
db.default.url="postgres://postgres:postgres@localhost/test"

# You can expose this datasource via JNDI if needed (Useful for JPA)
db.default.jndiName=DefaultDS

サンプル モデル クラスも作成しました。

@Entity
@SequenceGenerator(name = "Token_generator", sequenceName = "test_sequence", allocationSize = 1, initialValue = 1)
public class Test {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "Token_generator")
    public Long id;

    public String name;
}

次のコマンドでプレイアプリを開始しました:

play ~run

その後、http://localhost:9000/ アドレスの下に動作中の Web サイトが表示されました。また、postgres テスト データベースで新しいテーブル テストを確認することもできました。

于 2013-10-27T12:19:04.737 に答える
2

わかりました、自分でそれを理解しました。確かに、2 つのバージョンの xml-apis の問題でした。1 つは Play 自体から、もう 1 つは Apache Directory API からのものです。build.sbt のアーティファクトを次のように変更しましたが、現在は機能しています。

  "org.apache.directory.api" % "api-all" % "1.0.0-M14"
于 2013-11-05T08:29:19.917 に答える