2013-06-28 2 views
1

Я сделал небольшой тестовый проект с использованием Java EE 7 и Hibernate 4.2.2 и Glassfish 4.Есть ли способ использовать Hibernate 4.2.2 с Java EE 7 и Glassfish 4?

Вот мой pom.xml (веб)

<dependencies>   
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-web-api</artifactId> 
     <version>7.0</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>br.com.myproject</groupId> 
     <artifactId>escola-ejb</artifactId> 
     <version>1.0</version> 
    </dependency> 
</dependencies> 

EJB

<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-api</artifactId> 
    <version>7.0</version> 
    <scope>provided</scope> 
</dependency> 
<!--Hibernate-->  
<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-core</artifactId> 
    <version>4.2.2.Final</version> 
    <scope>compile</scope> 
</dependency> 

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>4.2.2.Final</version> 
     <scope>compile</scope> 
</dependency> 

У него есть только одно лицо, называемое Студент. И некоторые crud страницы со списком, создавать и редактировать. я могу скомпилировать и развернуть, но когда я пытаюсь открыть страницу списка списка (все страницы, где порожденные NetBeans 7.3.1 с возможностью генерации страницы JSF из моделей сущностей), я получил сообщение об ошибке:

A system exception occurred during an invocation on EJB StudentFacade, method: public java.util.List br.com.myproject.ejb.facade.AbstractFacade.findRange(int[]). 
at com.sun.ejb.containers.EJBContainerTransactionManager.processSystemException(EJBContainerTransactionManager.java:748) 
    at com.sun.ejb.containers.EJBContainerTransactionManager.completeNewTx(EJBContainerTransactionManager.java:698) 
    at com.sun.ejb.containers.EJBContainerTransactionManager.postInvokeTx(EJBContainerTransactionManager.java:503) 
    at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4475) 
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2009) 
    at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1979) 
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:220) 
    at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88) 

(...)

Если я изменю ссылку persistence.xml на Eclipse, она отлично работает. Но я откатываюсь в спячку. Я получил эту ошибку.

Я много искал Google, но я не могу найти какую-либо информацию, поскольку Java EE 7 - это новая технология.

+0

Может ли кто-нибудь создать тег JEE7? –

+0

В качестве альтернативы кто-нибудь знает, как работать с JTS и eclipselink? –

ответ

2

Hibernate 4.2.2 совместим с JPA 2.0. Glassfish 4 и EE 7 поставляется с JPA 2.1. Для этого вам нужен Hibernate 4.3.0.Beta1 или новее.

Он может работать с более ранними версиями Hibernate, но вы, скорее всего, столкнетесь с проблемами. Я бы порекомендовал подождать, пока они не выпустят 4.3 окончательную версию Hibernate.

+0

Я пробовал с 4.3.0.Beta5 и без успеха. Я смог развернуть, но я не смог получить данные из базы данных. –

+1

Если бы тот же вопрос спросил мою бывшую помощь преподавателя Java. Он сказал мне Hibernate 4.3.0.Beta5 не имеет всех реализаций, необходимых для создания полностью работающего приложения, поэтому мне пришлось перейти на последнюю версию EclipseLink, чтобы продолжить использование GlassFish 4 и JEE7. Сделано и обнаружено, что EclipseLink намного быстрее, чем Hibernate, плюс эталонная реализация. – rsb2097

+1

Теперь есть Hibernate 4.3.1 Final. Но он уже не пробовал. – rsb2097

1

Просто добавление Hibernate в качестве зависимости от вашего приложения не будет работать. Вам либо нужно добавить JAR-серверы Hibernate на путь класса сервера GlassFish (в этом случае Hibernate будет доступен как поставщик JPA для всех приложений), либо вы свяжете JAR-серверы Hibernate в каталоге lib EAR (в этом случае только это приложение будет используйте Hibernate). См. Этот блог на примере более позднего случая: http://javafromthetrenches.wordpress.com/2011/01/15/using-hibernate-jpa-with-glassfish/

Вам не нужно ничего делать, чтобы использовать JTA и источник данных EclipseLink (или Hibernate). Компоненты сеанса автоматически транзакционны, поэтому добавьте экземпляр менеджера сущностей в свой сеансовый компонент и используйте его из бизнес-методов.

Я также должен указать, что вам нужно будет добавить ресурсы JDBC в GlassFish, если вы не используете базу данных Java DB по умолчанию.

+0

Это не главное. –

+0

Напротив, это точно. Вы должны убедиться, что ваше приложение и GlassFish настроены правильно, если вы хотите использовать альтернативный уровень JPA. Я говорю это, потому что вы заявляете, что EclipseLink работает, но Hibernate этого не делает. Если вы заглянете в файл server.log GlassFish, вы, вероятно, увидите основную причину исключения, которое вызывается, когда StudentFacade вызывается в представлении «Список». –

+0

, как заявлено многими другими пользователями, проблема здесь в том, что версия для спящего режима несовместима. –