2016-03-23 8 views
-1

Ich bin neu in der Welt der Java-ee. Ich versuche eine Java-ee App zu implementieren. Ich habe Probleme, die Datei persistence.xml zu konfigurieren. Ich möchte das Standard-Java h2: mem als Persistenz-Einheit haben. Hier ist mein persistence.xmlVerwenden H2-Mem als Persistenz-Einheit

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

Es ist etwas falsch mit ihm, weil ich den Fehler bin immer:

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. 

was bedeutet der persistence.xml verpassen?

Ich habe meinen Provider geändert und ich verwende jetzt Hibernate ... Jetzt bekomme ich Fehler von einer anderen Bestellung. Kann jemand helfen?

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 "vermisst" nichts. Sie vermissen es zu lesen, was es enthalten soll. Diese XSD an der Spitze Ihrer Datei sagt Ihnen, was Sie dort setzen können http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd –

+0

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

+0

und was hat das mit irgendetwas in der "Frage" zu tun? –

Antwort

0

Nach dem offiziellen Schema, das <persistence> Element kann nur enthalten persistence-unit Elemente. Ich würde vorschlagen, dass Sie mit dem Upgrade von JPA 1.0 auf 2.0 (erfordert Java 6) oder 2.1 (erfordert Java 7) beginnen. Ein Beispiel persistence.xml 2.1 wären wie folgt:

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

Diese Konfiguration setzt die Anwendung die java:jboss/datasources/ExampleDS Datenquelle aus einer anderen Konfiguration wird, wie zum Beispiel in Apache Tomcat, es in den context.xml sein würde und die Eigenschaften in dieser aufgeführt Beispiel wäre nicht notwendig.
Der Anbieter unterscheidet sich, wenn Sie die EclipseLink-Bibliothek nicht verwenden.
Auch non-jta-data-source muss in Ihrem Fall möglicherweise sein.

Update:

Der Fehler, den Sie jetzt kommt von No identifier specified for entity: de.ostfalia.entity.Customer bekommen sind. Sie müssen sicherstellen, dass alle Ihre Entitätsklassen ordnungsgemäß ID-Spalten angegeben haben. Wenn Sie JPA-Anmerkungen verwenden, wäre dies die @Id Annotation. Möglicherweise benötigen Sie auch eine @GeneratedValue, wenn die Datenbank beim Einfügen automatisch die ID für diese Tabelle zuweist (der häufigste Fall). Es gibt auch die Möglichkeit, sie über eine mapping.xml Datei zu spezifizieren. Diese Tutorials werden Sie mit guten Beispielen begann 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

Eine Sache, die ich auf die harte Tour gelernt, dass jedes Mal, wenn EntityManager em = entityManagerFactory.createEntityManager(); tun Sie es am Ende em.close() muss, egal ob Sie ein Commit oder Rollback der Transaktion haben , das heißt, Sie müssen auch alle Throwable s, die auftreten können, abfangen. In unserer Webapp machen wir dies unter Verwendung eines javax.servlet.Filter (gilt nur für Webapps) für alle URLs. Wenn Sie es zu lange ohne Aktivität offen lassen, wird die Verbindung schließlich von der Datenbank getrennt (was in H2 möglicherweise nicht passieren kann) und der Thread wird unbrauchbar, bis Sie den Server neu starten.

+0

Jetzt findet es nicht den "org.eclipse.persistence.jpa.PersistenceProvider" Wo stelle ich es auf? – Lycone

+0

Hängt davon ab, welche Persistenzbibliothek Sie verwenden, wenn Sie überhaupt eine verwenden. Es ist nicht standardmäßig mit Java-Laufzeitumgebung.Wie Sie es einrichten, hängt von Ihrem Build-System ab. Ich weiß nur, wie es mit Maven gemacht wird, aber wenn Sie unter Netbeans entwickeln, können Sie in den meisten Fällen das Abhängigkeitsmenü verwenden, um sie grafisch hinzuzufügen. – coladict

+0

Ich benutze auch Maven. Aber ich lese im Internet, dass ich gerade die Eclipse-Implementierung von PersistenceProvider vermisse ... Ich werde versuchen, das Glas herunterzuladen und zu sehen, was als nächstes kommt. – Lycone

Verwandte Themen