2016-03-23 5 views
-1

Я новичок в мире java-ee. Я пытаюсь реализовать приложение java-ee. У меня возникли проблемы с настройкой persistence.xml. Я хочу, чтобы java h2: mem был моей единицей сохранения. Hier мой 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> 

Эта конфигурация предполагает приложение получает источник java:jboss/datasources/ExampleDS данных с какой-либо другой конфигурации, как, например, в Apache Tomcat, это было бы в context.xml и свойства, перечисленные в этом пример не понадобится.
Поставщик отличается, если вы не используете библиотеку EclipseLink.
Также non-jta-data-source может быть jta-data-source в вашем случае.

обновление:

Ошибка вы получаете теперь приходит от No identifier specified for entity: de.ostfalia.entity.Customer. Вы должны убедиться, что все классы сущностей правильно заданы столбцами идентификаторов. Если вы используете аннотации JPA, это будет аннотация @Id. Вам также может понадобиться @GeneratedValue, если база данных автоматически назначает идентификатор для вставки для этой таблицы (наиболее распространенный случай). Существует также возможность указать их через файл mapping.xml. Эти уроки помогут вам начать с хорошими примерами 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

Одна вещь, которую я узнал трудный путь, что каждый раз, когда вы делаете EntityManager em = entityManagerFactory.createEntityManager(); вы должны em.close() его в конце концов, не важно, если вы зафиксировали или откат транзакции , что означает, что вы также должны поймать любые Throwable s, которые могут возникнуть. В нашем webapp мы делаем это с помощью javax.servlet.Filter (применимо только к webapps) для всех URL-адресов. Если вы оставите его открытым слишком долго без активности, база данных в конечном итоге отключит соединение (что может не произойти в H2 в частности), и поток станет непригодным до перезапуска сервера.

+0

Теперь он не находит «org.eclipse.persistence.jpa.PersistenceProvider», где я его настраиваю? – Lycone

+0

Зависит от того, какую библиотеку персистенции вы используете, если вы используете ее вообще. Он не соответствует стандарту Java runtime.Как вы его настраиваете, зависит от вашей системы сборки. Я знаю только, как это делается с Maven, но если вы работаете в Netbeans, в большинстве случаев вы можете использовать меню зависимостей, чтобы добавить их графически. – coladict

+0

Я также использую maven. Но я читаю в Интернете, что я просто пропустил реализацию Eclipse PersistenceProvider ... Я постараюсь загрузить банку и посмотреть, что дальше. – Lycone

 Смежные вопросы

  • Нет связанных вопросов^_^