Использование JTA с Spring + hibernate JPA + Glassfish 3.1 Транзакция не фиксируется - PullRequest
2 голосов
/ 06 марта 2012

Я боролся с этими проблемами, и я искал весь интернет, но безрезультатно. Я надеюсь, что вы, парень, можете мне помочь Я использовал Glassfish 3.1 с гибернацией JPA и весной 3. Я настроил источник данных и пул в Glassfish для таргетинга MYSQL пожалуйста, найдите мои конфигурации

Web.xml, я настроил постоянные единицы.

  <persistence-unit-ref>
    <description>Persistence Unit for PlyPlus</description>
    <persistence-unit-ref-name>
    persistence/zeneJPA
    </persistence-unit-ref-name>
    <persistence-unit-name>
    ZeneJPA
    </persistence-unit-name>
    </persistence-unit-ref>

Приложение-контекст

  <context:component-scan base-package="com.binarydna.store" />
    <bean        class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor">
     <property name="persistenceUnits">
     <map>
     <entry key="ZeneJPA" value="persistence/zeneJPA">
     </entry>
     </map>
     </property>
     </bean>
        <!-- 
     <bean id="entityManagerFactory"   class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
     <property name="persistenceUnitName" value="ZeneJPA"/>
     </bean>
     -->
     <!-- We want to use Spring's declarative @Transaction management -->
     <tx:annotation-driven />
     <jee:jndi-lookup id="entityManagerFactory"    jndi-name="persistence/zeneJPA" /> 
     <tx:jta-transaction-manager />

persistence.xml

  <persistence-unit name="ZeneJPA" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>jdbc/zeneDS</jta-data-source>
    <properties>
    <property name="hibernate.transaction.manager_lookup_class"    value="org.hibernate.transaction.SunONETransactionManagerLookup"/>
    <property name="hibernate.show_sql" value="true"/>
    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
    <property name="hibernate.hbm2ddl.auto" value="update"/>
    <property name="hibernate.generate_statistics" value="true"/>
    <property name="hibernate.archive.autodetection" value="class,hbm"/>
    <property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.JTATransactionFactory"/>

метод / класс, который сохраняет объект

@Repository("AdminDAO")
@Transactional
public class AdminDAOImpl implements AdminDAO {

    @PersistenceContext
    private EntityManager em;


    public void setEntityManager(EntityManager em) {
        this.em = em;
    }

@Override
    public boolean saveCustomer(Customer customer) {
         boolean saved = false;
            try {
                if (customer.getId() == null) {
                    this.em.persist(customer);
                }
                else {
                    this.em.merge(customer);
                }
                saved = true;
            }
            catch (Exception p) {
                saved = false;
                return saved;
            }
            return saved;
    }
}

Пожалуйста, помогите мне здесь, что я делаю не так? Эта конфигурация генерирует таблицы, но просто не фиксирует транзакцию. Когда я перехожу через дегаггер, он на самом деле вызывает сохранение, но не фиксирует транзакцию. Пожалуйста, какова подходящая конфигурация, чтобы заставить весеннюю транзакцию работать со Glassfish? Спасибо, я ценю всю помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...