2016-03-23 43 views
-1

java-ee dünyasında yeniyim. Bir java-ee Uygulaması uygulamaya çalışıyorum. Persistence.xml dosyasını yapılandırmak için bir sorun yaşıyorum. Ben varsayılan java h2: mem benim kalıcılık birimim olmasını istiyorum. HierKalıcılık birimi olarak H2-mem'i kullanın.

<?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> 

O yanlış bir şey benim persistence.xml i hatayı alıyorum çünkü: persistence.xml bayan ne

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. 

?

Sağlamamı değiştirdim ve şimdi hazırda bekletme özelliğini kullanıyorum ... Şimdi başka bir siparişten hata alıyorum. Herkes yardımcı olabilir mi?

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 hiçbir şeyi "özlemez". İçermesi gerekenleri okumayı özlüyorsun. Dosyanızın en üstündeki XSD, oraya ne koyabileceğinizi size söyler http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd –

+0

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

+0

ve bunun "soru" da bir şeyle ne ilgisi var? –

cevap

0

resmi şemaya göre, <persistence> eleman persistence-unit elemanları sadece içerebilir. JPA 1.0'dan 2.0'a yükseltme (Java 6 gerektirir) veya 2.1 (Java 7 gerektirir) ile başlamanızı öneririm. persistence.xml 2.1 olarak olurdu bir örnek aşağıdaki gibidir:

<?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> 

Bu konfigürasyon o context.xml olacağını ve özellikleri bu listelenen, uygulamanız Apache Tomcat örneğin gibi diğer bazı yapılandırmasından java:jboss/datasources/ExampleDS veri kaynağını alır varsaymaktadır Örnek gerekli değildir.
EclipseLink kütüphanesini kullanmıyorsanız sağlayıcı farklıdır. Sizin durumunuzda jta-data-source olmak zorunda olabilir.

güncelleme:

Eğer alıyorsanız hata şimdi No identifier specified for entity: de.ostfalia.entity.Customer geliyor. Tüm varlık sınıflarınızın Id sütunlarını doğru şekilde belirttiğinden emin olmanız gerekir. JPA ek açıklamaları kullanıyorsanız, bu @Id ek açıklaması olacaktır. Veritabanına otomatik olarak bu tabloya eklenen kimliği (en yaygın durum) atarsa, bir @GeneratedValue'a da gereksinim duyabilirsiniz. Ayrıca bir mapping.xml dosya aracılığıyla belirleme seçeneği de vardır. Bu eğitimler sabit yolu taahhüt veya geri alınıyor işlem ettik eğer EntityManager em = entityManagerFactory.createEntityManager(); yapmak her zaman, sonunda olursa olsun bunu em.close() gerektiğidir iyi örneklerle öğrendiğim http://www.tutorialspoint.com/jpa/jpa_orm_components.htmhttp://www.javaworld.com/article/2077817/java-se/understanding-jpa-part-1-the-object-oriented-paradigm-of-data-persistence.html

Bir şeyi başlatan alacak Bu da meydana gelebilecek herhangi bir Throwable yakalamanız gerektiği anlamına gelir. Web sunucumuzda, tüm URL'ler için javax.servlet.Filter (sadece webapps için geçerlidir) kullanarak bunu yaparız. Etkinliği olmadan çok uzun bir süre açık bırakırsanız, veritabanı sonunda bağlantıyı bırakır (özellikle H2'de olmayabilir) ve sunucuyu yeniden başlatana kadar iş parçacığı kullanılamaz hale gelir.

+0

Artık "org.eclipse.persistence.jpa.PersistenceProvider" adresini bulamıyor musunuz? – Lycone

+0

Birini kullanıyorsanız, hangi kalıcı kitaplığı kullandığınıza bağlı olarak değişir. Java çalışma zamanı ile standart gelmiyor.Bunu nasıl kurduğunuz, yapı sisteminize bağlıdır. Ben sadece Maven ile nasıl yapıldığını biliyorum ama NetBeans altında gelişen eğer, çoğu durumda grafiksel bunları eklemek için bağımlılık menüsünü kullanabilirsiniz. – coladict

+0

Ayrıca maven kullanıyorum. Ama ben sadece PersistenceProvider Eclipse uygulanmasını özlüyorum o ... Ben kavanozu indirmek ve sonraki ne olduğunu görmek için çalışacağım, internette okudum. – Lycone

İlgili konular