2009-12-30 2 views
7

Tôi mới đến lò xo. tôi muốn thực hiện JtaTransactionManager trong ứng dụng của tôi thay vì HibernateTransactionManager.But tôi nhận được lỗi sau khi tôi viết đoạn mã sau trong xml của tôi.lỗi khi thực hiện giao dịch mùa xuân

<bean id="transactionManager" 
    class="org.springframework.transaction.jta.JtaTransactionManager"/> 

Trên máy chủ bắt đầu lên sau lỗi xảy ra: -

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in ServletContext resource [/WEB-INF/resources/transaction-context.xml]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: No JTA UserTransaction available - specify either 'userTransaction' or 'userTransactionName' or 'transactionManager' or 'transactionManagerName' 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1282) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:510) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:246) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:166) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:243) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:167) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:351) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:689) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:358) 
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:244) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:187) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3827) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4334) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525) 
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920) 
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883) 
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492) 
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138) 
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) 
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:719) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) 
    at org.apache.catalina.core.StandardService.start(StandardService.java:516) 
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:566) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) 
Caused by: java.lang.IllegalStateException: No JTA UserTransaction available - specify either 'userTransaction' or 'userTransactionName' or 'transactionManager' or 'transactionManagerName' 
    at org.springframework.transaction.jta.JtaTransactionManager.checkUserTransactionAndTransactionManager(JtaTransactionManager.java:489) 
    at org.springframework.transaction.jta.JtaTransactionManager.afterPropertiesSet(JtaTransactionManager.java:429) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1310) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1279) 
    ... 35 more 
30 Dec, 2009 6:43:10 PM org.apache.catalina.core.StandardContext listenerStart 
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in ServletContext resource [/WEB-INF/resources/transaction-context.xml]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: No JTA UserTransaction available - specify either 'userTransaction' or 'userTransactionName' or 'transactionManager' or 'transactionManagerName' 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1282) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:510) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:246) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:166) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:243) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:167) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:351) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:689) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:358) 
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:244) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:187) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3827) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4334) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525) 
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920) 
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883) 
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492) 
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138) 
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) 
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:719) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) 
    at org.apache.catalina.core.StandardService.start(StandardService.java:516) 
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:566) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) 
Caused by: java.lang.IllegalStateException: No JTA UserTransaction available - specify either 'userTransaction' or 'userTransactionName' or 'transactionManager' or 'transactionManagerName' 
    at org.springframework.transaction.jta.JtaTransactionManager.checkUserTransactionAndTransactionManager(JtaTransactionManager.java:489) 
    at org.springframework.transaction.jta.JtaTransactionManager.afterPropertiesSet(JtaTransactionManager.java:429) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1310) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1279) 
    ... 35 more 

Trả lời

6

Tomcat không có một built-in JTA thực hiện, và vì vậy mùa xuân sẽ thất bại nếu bạn cố gắng và sử dụng JtaTransactionManager.

Tuy nhiên, bạn có thể sử dụng JOTM, có thể được sử dụng trong Tomcat để cung cấp chức năng như vậy.

Tôi phải hỏi, tuy nhiên - tại sao bạn muốn JTA bắt đầu? Không phải người quản lý giao dịch ngủ đông có đủ không? Nếu bạn thấy mình cần hỗ trợ JTA, thì bạn có thể cân nhắc sử dụng một máy chủ ứng dụng JavaEE đầy đủ (JBoss sẽ là lựa chọn hiển nhiên, vì nó bao gồm Tomcat làm công cụ servlet của nó) và sử dụng thực thi JTA được hỗ trợ đầy đủ đó.

+0

thanx cho answer.But khi sử dụng quản lý giao dịch hbernate tôi không có khả năng tiết kiệm hoặc cập nhật ngoại lệ data.Various occur.My ứng dụng của tôi là thanh chống + mùa xuân + ngủ đông tích hợp. Tôi muốn sử dụng mùa xuân để quản lý tất cả các giao dịch của tôi.ill cố gắng làm những gì bạn khuyên. – abby

+0

Nếu struts + spring + hibernate là thiết lập của bạn, sau đó bạn không cần hoặc muốn JTA, nó sẽ chỉ làm cho mọi thứ phức tạp hơn. Spring 'HibernateTransactionManager' là lựa chọn đúng đắn cho điều đó. – skaffman

+0

@skaffman, bạn có thể vui lòng xem bài đăng của tôi - http://stackoverflow.com/questions/32114750/spring-transaction-by-connecting-to-multiple-databases – user3181365

1

Với tư cách là người đánh xe buồn, Tomcat không có triển khai JTA tích hợp. Vì vậy, để sử dụng JtaTransactionManager trong bối cảnh ứng dụng của bạn, bạn nên lọ đặt của một số thực hiện JTA (ví dụ Bitronix) trong thư mục lib Tomcat và đặt

<Transaction factory="bitronix.tm.BitronixUserTransactionObjectFactory" /> 

Bằng cách đó sau lời tuyên bố trong tập tin context.xml Tomcat Tomcat sẽ tạo và hiển thị UserTransaction được sử dụng để khởi tạo JtaTransactionManager.

0

Tôi có phản hồi cho một trường hợp cụ thể, nếu bạn đang sử dụng Atomikos cho việc triển khai JTA và tôi giải quyết vấn đề bằng cách thêm các dòng này vào context.xml thứ trong thư mục/conf.

<!-- Spring LoadTimeWeaver Support for the Tomcat server. --> 

<Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>