2016-03-23 4 views
-1

私はjava-eeの世界では新しいです。私はjava-eeアプリケーションを実装しようとします。私はpersistence.xmlを設定するのにいくつか問題があります。私は、デフォルトのjava h2:memを永続ユニットにします。ハイアーは私のpersistence.xml持続性の単位としてH2-memを使用

<?xml version="1.0" encoding="UTF-8"?> 
<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_1_0.xsd" 
    version="1.0"> 

    <persistence-unit name="customerDatabase"> 
     <description>My Customer-DB</description> 
    </persistence-unit> 
    <datasource jndi-name="java:jboss/datasources/ExampleDS" 
     pool-name="ExampleDS" enabled="true" use-java-context="true"> 
     <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url> 
     <driver>h2</driver> 
     <security> 
      <user-name>sa</user-name> 
      <password>sa</password> 
     </security> 
    </datasource> 
    <drivers> 
     <driver name="h2" module="com.h2database.h2"> 
      <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> 
     </driver> 
    </drivers> 
</persistence> 

である私は、エラーを取得していますので、それはそれで間違って何か:

cvc-complex-type.2.4.a: Invalid content was found starting with element 'datasource'. One of '{"http://java.sun.com/xml/ns/persistence":persistence-unit}' 
is expected. 

persistence.xmlのミスを何?

私はプロバイダを変更しました。私は現在、休止状態を使用しています...今は他の注文からエラーが発生しています。誰でも助けることができますか?

11:21:46,092 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 59) MSC000001: Failed to start service jboss.persistenceunit."javaee7-master.war#customerDatabase": org.jboss.msc.service.StartException in service jboss.persistenceunit."javaee7-master.war#customerDatabase": javax.persistence.PersistenceException: [PersistenceUnit: customerDatabase] Unable to build Hibernate SessionFactory 
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:172) 
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:117) 
    at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:665) 
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:182) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
    at org.jboss.threads.JBossThread.run(JBossThread.java:320) 
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: customerDatabase] Unable to build Hibernate SessionFactory 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1249) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.access$600(EntityManagerFactoryBuilderImpl.java:120) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:860) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850) 
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:425) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:849) 
    at org.jboss.as.jpa.hibernate4.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44) 
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:154) 
    ... 7 more 
Caused by: org.hibernate.AnnotationException: No identifier specified for entity: de.ostfalia.entity.Customer 
    at org.hibernate.cfg.InheritanceState.determineDefaultAccessType(InheritanceState.java:277) 
    at org.hibernate.cfg.InheritanceState.getElementsToProcess(InheritanceState.java:224) 
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:775) 
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3845) 
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3799) 
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1412) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1846) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:857) 
    ... 12 more 

11:21:46,098 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("deploy") failed - address: ([("deployment" => "javaee7-master.war")]) - failure description: {"WFLYCTL0080: Failed services" => {"jboss.persistenceunit.\"javaee7-master.war#customerDatabase\"" => "org.jboss.msc.service.StartException in service jboss.persistenceunit.\"javaee7-master.war#customerDatabase\": javax.persistence.PersistenceException: [PersistenceUnit: customerDatabase] Unable to build Hibernate SessionFactory 
    Caused by: javax.persistence.PersistenceException: [PersistenceUnit: customerDatabase] Unable to build Hibernate SessionFactory 
    Caused by: org.hibernate.AnnotationException: No identifier specified for entity: de.ostfalia.entity.Customer"}} 
11:21:46,197 INFO [org.jboss.as.server] (ServerService Thread Pool -- 34) WFLYSRV0010: Deployed "postgresql-9.4-1203.jdbc42.jar" (runtime-name : "postgresql-9.4-1203.jdbc42.jar") 
11:21:46,198 INFO [org.jboss.as.server] (ServerService Thread Pool -- 34) WFLYSRV0010: Deployed "javaee7-master.war" (runtime-name : "javaee7-master.war") 
11:21:46,200 INFO [org.jboss.as.controller] (Controller Boot Thread) WFLYCTL0183: Service status report 
WFLYCTL0186: Services which failed to start:  service jboss.persistenceunit."javaee7-master.war#customerDatabase": org.jboss.msc.service.StartException in service jboss.persistenceunit."javaee7-master.war#customerDatabase": javax.persistence.PersistenceException: [PersistenceUnit: customerDatabase] Unable to build Hibernate SessionFactory 
+0

persistence.xmlは何も「ミス」しません。あなたはそれが含まれていると思われるものを読んでいない。あなたのファイルの先頭にあるXSDは、あなたがそこに置くことができるものを教えてくれます。http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd –

+0

原因:javax.persistence.PersistenceException:WFLYJPA0057:PersistenceProvider ' \t org.eclipse.persistence.jpa.PersistenceProvider – Lycone

+0

そしてそれは "質問"の中の何と関係がありますか? –

答えて

0

公式スキーマによると、<persistence>要素はpersistence-unit要素を含めることができます。 JPA 1.0から2.0(Java 6が必要)または2.1(Java 7が必要)からアップグレードすることをお勧めします。例えば次のようにpersistence.xml 2.1は、次のようになります。

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> 
    <persistence-unit name="customerDatabase" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
    <non-jta-data-source>java:jboss/datasources/ExampleDS</non-jta-data-source> 
    <exclude-unlisted-classes>false</exclude-unlisted-classes> 
    <properties> 
     <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/> 
     <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"/> 
     <property name="javax.persistence.jdbc.user" value="sa"/> 
     <property name="javax.persistence.jdbc.password" value="sa"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

この構成では、Apache Tomcatの中に例えば、それはcontext.xmlになり、これに記載されているプロパティのと同じようにアプリケーションが、他のいくつかの設定からjava:jboss/datasources/ExampleDSデータソースを取得する前提例は必要ではありません。
EclipseLinkライブラリを使用していない場合は、プロバイダが異なります。
non-jta-data-sourceの場合は、jta-data-sourceにする必要があります。

更新:

あなたが今取得しているエラーがNo identifier specified for entity: de.ostfalia.entity.Customerから来ています。すべてのエンティティクラスにID列が正しく指定されていることを確認する必要があります。 JPAアノテーションを使用している場合は、@Idアノテーションになります。データベースが自動的にそのテーブルの挿入時にIDを割り当てる場合は、@GeneratedValueが必要です(最も一般的なケース)。 mapping.xmlファイルで指定するオプションもあります。これらのチュートリアルは、私はハードな方法を学んだことの一つは、どんなにあなたがコミットしたりした場合、ロールバックトランザクション、あなたが最後にあなたがそれem.close()必要EntityManager em = entityManagerFactory.createEntityManager();を行うたびに、ということである

http://www.javaworld.com/article/2077817/java-se/understanding-jpa-part-1-the-object-oriented-paradigm-of-data-persistence.html http://www.tutorialspoint.com/jpa/jpa_orm_components.htm良い例を使い始めるだろうこれは、発生する可能性のある Throwableもキャッチする必要があることを意味します。私たちwebappでは、すべてのURLに対して javax.servlet.Filter(webappのみに適用)を使用してこれを行います。アクティビティのない状態で長時間開いたままにすると、データベースは最終的に接続を破棄します(これはH2で特に発生しない可能性があります)。サーバーを再起動するまでスレッドは使用できなくなります。

+0

これで「org.eclipse.persistence.jpa.PersistenceProvider」が見つかりません。どこに設定しますか? – Lycone

+0

あなたが使っているパーシスタンスライブラリに依存します。 Javaランタイムは標準ではありません。設定方法は、ビルドシステムによって異なります。私はそれがMavenでどのように行われたのか分かっていますが、Netbeansの下で開発している場合、ほとんどの場合、依存関係メニューを使ってグラフィカルに追加することができます。 – coladict

+0

私はmavenも使用しています。しかし、私はインターネット上で、PersistenceProviderのEclipse実装を見逃しているだけです...私はjarをダウンロードして次に何を参照しようとします。 – Lycone

関連する問題