2010-12-28 8 views
0

JBoss 4.2.2サーバでSpring 3を使用してJPAを設定する際の問題に直面しています。Jboss 4.2.2サーバでSpring 3でJPAを設定する際の問題

以下のpersistence.xmlファイルをご覧ください。

<?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="TestPU"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <jta-data-source>java:/TestDS</jta-data-source> 
    <properties> 
    <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/> 
    <property name="hibernate.show_sql" value="true"/> 
    </properties> 
</persistence-unit> 
</persistence> 

マイスプリングbeans.xmlのは

<bean id="MyAdvise" class=".......Aspect"> 
    <property name="persister"> 
     <bean id="dbPersister" class="..............DataBasePersister"> 
     </bean> 
     </property> 
</bean> 

    <bean id="localContainerEntityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="jpaVendorAdapter"> 
    <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
    <property name="showSql" value="true"/> 
    <property name="database" value="ORACLE"/> 
    </bean> 
    </property> 

    <property name="jpaProperties"> 
    <props> 
    <prop key="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.JBossTransactionManagerLookup</prop> 
    </props> 
    </property> 
</bean> 

<bean id="myTxManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="localContainerEntityManagerFactory"/> 
</bean> 


<tx:annotation-driven transaction-manager="myTxManager" /> 

マイ存続Beanは以下の通りである以下の通りです。

public class DataBasePersister implements IPersister { 

private static Logger log = Logger.getLogger(DataBasePersister.class); 

// The Entity Manager 
@PersistenceContext 
protected EntityManager entityManager; 

@Transactional(readOnly = false) 
public void persist(Object data) { 
    log.info("IN persist() call. Is the data can castable to MethodStats -->:"+(data instanceof MethodStats)); 
    log.info("Entity Manager instance -->:"+(entityManager)); 
    ---------------------- 
    ---------------------- 
    ---------------------- 
} 

} 

存続豆

org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is java.lang.IllegalStateException: JTA EntityManager cannot access a transactions 
at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:382) 
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371) 
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:585) 
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166) 
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) 
at $Proxy147.getTransaction(Unknown Source) 
at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:335) 
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:105) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) 
at $Proxy141.persist(Unknown Source) 
at com.adp.sbs.aop.aspectj.SBSMethodStatsCollectorAspect.doAround(SBSMethodStatsCollectorAspect.java:63) 
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:585) 
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621) 
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610) 
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161) 
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621) 
at com.adp.sbs.aop.test.TestMethodLevelAnnotationStats$$EnhancerByCGLIB$$efbc78a8.MethodWithOneParamsAndReturnTypeAsString(<generated>) 
at com.adp.sbs.aop.test.SimpleTestServlet.testMethodAnnotations(SimpleTestServlet.java:46) 
at com.adp.sbs.aop.test.SimpleTestServlet.doPost(SimpleTestServlet.java:40) 
at com.adp.sbs.aop.test.SimpleTestServlet.doGet(SimpleTestServlet.java:33) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179) 
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) 
at java.lang.Thread.run(Thread.java:595) 
Caused by: java.lang.IllegalStateException: JTA EntityManager cannot access a transactions 
at org.hibernate.ejb.AbstractEntityManagerImpl.getTransaction(AbstractEntityManagerImpl.java:316) 
at org.springframework.orm.jpa.DefaultJpaDialect.beginTransaction(DefaultJpaDialect.java:70) 
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.beginTransaction(HibernateJpaDialect.java:57) 
at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:332) 

を作成する春のコンテナは、あなたが誰かどのようにこの問題を解決するために私を提案してくださいすることができたとき、私は次の例外を取得しています。

+0

これは、JBoss 4.2の技術であるHibernateを使用しているのですか、またはアプリケーションで別のHibernate JARをパッケージ化していますか? – skaffman

+0

Jboss 4.2.2に付属しているHibernateを使用しています。 – KVMKReddy

答えて

1

アプリケーションサーバーとJTAトランザクションによって構成されたJPAプロバイダを使用する場合は、LocalContainerEntityManagerFactoryBeanを手動で構成する代わりにJNDIから取得し、JpaTransactionManagerではなくJtaTransactionManagerを使用する必要があります。

13.5.1.2 Obtaining an EntityManagerFactory from JNDIおよびアプリケーションサーバーのドキュメントを参照してください。

+0

まず、私の問題を解決してくれたことに感謝します。今度は、jndiからEntityManagerFactoryを取得するように設定を変更し、JpaTransactionの代わりにJtaTransactionを使用しました。しかし、私のサービスファイルでは、毎回EntityMangerを作成する必要があります。エンティティマネージャではなく、自分のサービスにEntityManagerManagerFactoryだけを注入できるからです。 – KVMKReddy

+0

@KVMKReddy: '@PervistenceContext'を有効にするには、おそらく' 'を追加する必要があります。 – axtavt

関連する問題