2010-10-28 5 views
5

Я использую OpenEJB 3.1.3, встроенный в Tomcat 5.5.26, и я использую hibernate 3.6 в качестве поставщика JPA.OpenEJB с Tomcat и Hibernate и JPA

Вот мой persistence.xml:

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

    <persistence-unit name="manager1" transaction-type="JTA"> 

    <!-- provider is optional if you work with only 1 JPA provider --> 
    <!-- 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    --> 

    <jta-data-source>java:/DefaultDS</jta-data-source> 

<!-- 
    <properties> 
     <property name="hibernate.ejb.cfgfile" value="/hibernate.cfg.xml" /> 
    </properties> 
--> 

    </persistence-unit> 

</persistence> 

Вот мой код:

@Stateless 
public class MapSearchManager implements MapSearchLocal, MapSearchRemote { 
    @PersistenceContext 
    private EntityManager em; 
... 
    @TransactionAttribute(TransactionAttributeType.REQUIRED) 
    public int queryDataSelectionNumRecords(MapSearchParamBean paramBean) { 
     Criteria c = createCriteria(paramBean); 
     c.setProjection(Projections.rowCount()); 

     List l = c.list(); 
... 
    } 
... 
} 

Когда я бегу кота с OpenEJB и мое приложение военных архивов в нем, развертывание не удалось с стека исключений трассировки:

2010-10-27 18:13:35,374 - ERROR - Unable to deploy collapsed ear in war /wma: Exception: Creating application failed: C:\apache-tomcat-5.5.26\webapps\wma: javax/persistence/spi/ProviderUtil 
org.apache.openejb.OpenEJBException: Creating application failed: C:\apache-tomcat-5.5.26\webapps\wma: javax/persistence/spi/ProviderUtil 
     at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:666) 
     at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:449) 
     at org.apache.openejb.tomcat.catalina.TomcatWebAppBuilder.start(TomcatWebAppBuilder.java:249) 
     at org.apache.openejb.tomcat.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:58) 
     at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120) 
     at org.apache.catalina.core.StandardContext.start(StandardContext.java:4148) 
     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760) 
     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740) 
     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544) 
     at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:926) 
     at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:889) 
     at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492) 
     at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149) 
     at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311) 
     at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120) 
     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022) 
     at org.apache.catalina.core.StandardHost.start(StandardHost.java:736) 
     at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014) 
     at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) 
     at org.apache.catalina.core.StandardService.start(StandardService.java:448) 
     at org.apache.catalina.core.StandardServer.start(StandardServer.java:700) 
     at org.apache.catalina.startup.Catalina.start(Catalina.java:552) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295) 
     at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433) 
Caused by: java.lang.NoClassDefFoundError: javax/persistence/spi/ProviderUtil 
     at java.lang.Class.getDeclaredConstructors0(Native Method) 
     at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) 
     at java.lang.Class.getConstructor0(Class.java:2699) 
     at java.lang.Class.newInstance0(Class.java:326) 
     at java.lang.Class.newInstance(Class.java:308) 
     at org.apache.openejb.assembler.classic.PersistenceBuilder.createEntityManagerFactory(PersistenceBuilder.java:179) 
     at org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:489) 
     ... 27 more 

После поиска, я нашел класс javax/persistence/spi/ProviderUtil является частью Явь спецификация EE 6/JPA 2.0, которая не поддерживается OpenEJB. Но я не думаю, что в своем приложении я использую JPA 2.0. Я специально упоминаю в persistence.xml 1.0. Я знаю, что hibernate 3.6 поддерживает JPA 2.0. Я не знаю, является ли hibernate's Criteria API частью JPA 2.0, но это не должно вызывать проблемы, потому что я специально упомянул 1.0 в файле persistence.xml.

Благодарим за помощь.

С уважением

Will

ответ

4

После поиска, я нашел класс javax/сохранение/СПИ/ProviderUtil является частью Java EE 6/JPA 2.0 спецификации

Это правильно.

, который не поддерживается OpenEJB.

Пока еще нет. Это отслеживается OPENEJB-1236.

Но я не думаю, что в моем приложении я использовать JPA 2,0

ли вы использовать функции JPA 2.0 или нет, некоторые изменения в различных интерфейсов требуют явной поддержки от контейнеров.

Я конкретно упоминаю в persistence.xml 1.0.

Это не имеет никакого отношения, контейнер все еще пытается загрузить реализацию JPA 2.0.

Я не знаю, если критерии API Hibernate является частью JPA 2,0

JPA 2.0 имеет новый Criteria API, но библиотеки Hibernate Критерии API является частью ... Hibernate. Из того, что я вижу, вы используете Hibernate API, и поэтому я предлагаю использовать его реализацию JPA 1.0 - то есть Hibernate EntityManager 3.4.0.GA и ее зависимости, которые предоставляют этот API. В любом случае вам не потребуется JPA 2.0.


Существует не так много информации в сети о Hibernate-JPA версий соответствующих. Итак, вы имеете в виду, что проекты Hibernate EntityManager и Annotations являются реализациями спецификации JPA 1.0, а проект Hibernate Core содержит основной спящий режим (не JPA impl) и JPA 2.0 impl?

Hibernate EntityManager - это проект, обеспечивающий реализацию JPA.

  • Hibernate EntityManager 3.4.0.GA является JPA 1.0 реализация
  • Hiberante EnittyManager 3.5+ является реализация JPA 2.0

Он опирается на Hibernate Ядро (и некоторые другие библиотеки). Для того, чтобы использовать Hibernate EntityManager 3.4.0.GA, вам необходимо следующее:

 
org.hibernate:hibernate-entitymanager:jar:3.4.0.GA:compile 
+- org.hibernate:ejb3-persistence:jar:1.0.2.GA:compile 
+- org.hibernate:hibernate-commons-annotations:jar:3.1.0.GA:compile 
+- org.hibernate:hibernate-annotations:jar:3.4.0.GA:compile 
+- org.hibernate:hibernate-core:jar:3.3.0.SP1:compile 
| +- antlr:antlr:jar:2.7.6:compile 
| \- commons-collections:commons-collections:jar:3.1:compile 
+- org.slf4j:slf4j-api:jar:1.5.10:compile 
+- dom4j:dom4j:jar:1.6.1:compile 
| \- xml-apis:xml-apis:jar:1.0.b2:compile 
+- javax.transaction:jta:jar:1.1:compile 
\- javassist:javassist:jar:3.4.GA:compile 

Я использую Maven, так что я просто должен объявить зависимость от спящего-EntityManager, но если вы этого не сделаете, получите bundle from SourceForge.

+0

Спасибо Pascal. В сети нет информации о совместимости версий hibernate-jpa. Итак, вы имеете в виду, что проекты Hibernate EntityManager и Annotations являются реализациями спецификации JPA 1.0, а проект Hibernate Core содержит основной спящий режим (не JPA impl) и JPA 2.0 impl? Еще раз спасибо. –

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