Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с Hibernate as JPA provider in weblogiс10 
V
    Опции темы
alexadr
Дата 31.7.2008, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 25.9.2006

Репутация: нет
Всего: 4



Все добрый день.

Пытаюсь прикрутить гибернейт в качестве JPA провайдера для EJB30 под weblogic10. И у меня при этом возникают проблемы с транзакциями. Я пытаюсь добится того чтобы гибернейтовский EntityManager использовал уже имеющуюся транзакцию, но этого у меня не получается. Попытаюсь более подробно пояснить кодом.

Есть тестовый модуль, состоящий из:
- одного Entity бина(мапит талицу из двух полей)
- одного Session бина. У данного бина два метода. В одном методе происходит создание нового Entity бина, а в вторым методом проверяю, добавлась ли запись в БД. Соответственно у сесионного бина - @TransactionAttribute(TransactionAttributeType.REQUIRED). Т.е. по идее при дергании метода бина, - транзакция уже есть.
Итак сам код:

Entity Bean:
Код

package test.entity; 

import javax.persistence.Entity; 
import javax.persistence.Table; 
import javax.persistence.Id; 
import javax.persistence.Column; 

@Entity 
@Table(name = "TEST_ENTITY") 
public class EntityTest { 

    @Id 
    @Column(name = "ID") 
    private Integer id; 

    @Column(name = "NAME") 
    private String name; 


    public Integer getId() { 
        return id; 
    } 

    public void setId(Integer id) { 
        this.id = id; 
    } 

    public String getName() { 
        return name; 
    } 

    public void setName(String name) { 
        this.name = name; 
    } 

    public boolean equals(Object o) { 
        if (this == o) return true; 
        if (o == null || getClass() != o.getClass()) return false; 

        final EntityTest review = (EntityTest) o; 

        return id.equals(review.id); 
    } 

    public int hashCode() { 
        return id; 
    } 

} 


Session Bean:
Код

package test.second; 

import test.entity.EntityTest; 

import javax.ejb.Stateless; 
import javax.ejb.TransactionAttribute; 
import javax.ejb.TransactionAttributeType; 
import javax.persistence.PersistenceContext; 
import javax.persistence.EntityManager; 
import java.util.List; 

@Stateless(name = "SessFacadEJB", mappedName = "second") 
@TransactionAttribute(TransactionAttributeType.REQUIRED) 
public class SessFacadBean implements SessFacad{ 

    @PersistenceContext(unitName = "pointBaseDemoUnit_For_Second") 
    EntityManager em; 

    public SessFacadBean() { 
    } 

    @TransactionAttribute(TransactionAttributeType.REQUIRED) 
    public void testEntity() { 
        List result = em.createQuery("select x from EntityTest x").getResultList(); 
        int i = 1; 
        for (Object o : result) { 
            EntityTest et = (EntityTest) o; 
            System.out.println("id[" + et.getId() + "] name[" + et.getName() + "]"); 
            i++; 
        } 

        EntityTest newEt = new EntityTest(); 
        newEt.setId(i); 
        newEt.setName("Test_Name_" + i); 
        em.persist(newEt); 

        System.out.println("Entity with id: " + i + "added"); 
    } 

    public int checkAdding() { 
        Integer result = (Integer) em.createQuery("select max (x.id ) from EntityTest x").getSingleResult(); 
        System.out.println("Max id: " + result); 
        return result; 
    } 
} 


И persistence.xml: 
Код

<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="pointBaseDemoUnit_For_Second" transaction-type="JTA"> 
        <provider>org.hibernate.ejb.HibernatePersistence</provider> 
        <jta-data-source>demo.pointbase.datasource</jta-data-source> 
        <class>test.entity.EntityTest</class> 
        <properties> 
            <property name="hibernate.dialect" value="org.hibernate.dialect.PointbaseDialect"/> 
            <property name="show_sql" value="true"/> 
            <property name="hibernate.transaction.manager_lookup_class"    value="org.hibernate.transaction.WeblogicTransactionManagerLookup"/> 
            <property name="hibernate.transaction.factory_class"           value="org.hibernate.transaction.CMTTransactionFactory"/> 
            <property name="hibernate.query.factory_class" value="org.hibernate.hql.classic.ClassicQueryTranslatorFactory"/> 
        </properties> 
    </persistence-unit> 
</persistence> 


В общем я дергаю метод testEntity(). После этого проверяю методом checkAdding(), добавилась ли запись в таблицу. Но увы, запись при использовании гибернейт-провайдера не добавляется.
Как только я использую default провайдер для weblogic10(Open JPA Provider):
Код

<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="pointBaseDemoUnit_For_Seconf" transaction-type="JTA"> 
        <jta-data-source>demo.pointbase.datasource</jta-data-source> 
    </persistence-unit> 
</persistence> 

То у меня тут же все начинает корректно работать.

Честно говоря я зашел тут в тупик, т.к. вроде проверил все возможные варианты, заставить работать гибернейтовский провайдер у меня так и не получилось.
У меня есть подозрение, что возможно я как то не так добавил гибернейтовский библиотеки или добавли но не все. В общем добали я их так:
В папку lib, которая находится в корневой дирректории weblogic домена я положил все либы для гибернейта(weblogic говорит что он их от туда подгружает при старте сервера). В общем список либов такой:
antlr-2.7.6.jar
asm-attrs.jar
asm.jar
cglib-2.1.3.jar
commons-logging-1.0.4.jar
dom4j-1.6.1.jar
hibernate-annotations.jar (3.3.1.GA)
hibernate-commons-annotations.jar (3.0.0.GA)
hibernate-entitymanager.jar (3.3.2.GA)
hibernate3.jar (3.2.6.ga)
javassist.jar

Я проверил по Compatibility Matrix на сайте гибернейта(http://hibernate.org/6.html), вроде все нормально.

В общем вот такая вот проблема...
PM MAIL   Вверх
Kangaroo
Дата 31.7.2008, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 14
Всего: 104



Цитата(alexadr @  31.7.2008,  12:06 Найти цитируемый пост)
В общем я дергаю метод testEntity(). После этого проверяю методом checkAdding(), добавилась ли запись в таблицу. Но увы, запись при использовании гибернейт-провайдера не добавляется.

А в логах что-нибудь интересное есть?


--------------------
Lost....
PM MAIL MSN   Вверх
alexadr
Дата 1.8.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 25.9.2006

Репутация: нет
Всего: 4



Да, вот честно говоря логи я еще не прикручивал, решил для тестового примера ограничится System.out-ми. В консоли  при этом ничего интересного. Попробую прикрутить логи.
PM MAIL   Вверх
alexadr
Дата 1.8.2008, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 25.9.2006

Репутация: нет
Всего: 4



2 Kangaroo 
Эх, было бы 100 постов, добавил бы плюсик, а пока просто спасибо. Совет был прямо в точку.
Логи гибернейта сказали:
Код

2008.08.01-13:17:05,947 WARN  AbstractEntityManagerImpl : Cannot join transaction: do not override hibernate.transaction.factory_class


Поэтому просто поправил persistence.xml на:
Код

<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="pointBaseDemoUnit_For_Second" transaction-type="JTA"> 
        <provider>org.hibernate.ejb.HibernatePersistence</provider> 
        <jta-data-source>demo.pointbase.datasource</jta-data-source> 
        <class>test.entity.EntityTest</class> 
        <properties> 
            <property name="hibernate.dialect" value="org.hibernate.dialect.PointbaseDialect"/> 
            <property name="show_sql" value="true"/> 
            <property name="hibernate.transaction.manager_lookup_class"    value="org.hibernate.transaction.WeblogicTransactionManagerLookup"/> 
            <property name="hibernate.query.factory_class" value="org.hibernate.hql.classic.ClassicQueryTranslatorFactory"/> 
        </properties> 
    </persistence-unit> 
</persistence> 


и все тут же заработало.
PM MAIL   Вверх
Kangaroo
Дата 1.8.2008, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 14
Всего: 104



Цитата(alexadr @  1.8.2008,  13:44 Найти цитируемый пост)
пока просто спасибо. Совет был прямо в точку.

Не за что  smile 
Пометь только тему решенной (справа сверху).


--------------------
Lost....
PM MAIL MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0620 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.