2012-02-21 277 views
1

我刚开始在我的spring/hibernate安装程序中为jta使用bitronix,在H2和Postgres下一切正常,但在Oracle下失败。Oracle XAException - XA恢复失败

我关注了其他在线帖子关于授予权限,但问题仍然存在。 任何想法如何解决这个问题?

我设置这些Permisions:

GRANT SELECT ON sys.dba_pending_transactions TO user; 
GRANT SELECT ON sys.pending_trans$ TO user; 
GRANT SELECT ON sys.dba_2pc_pending TO user; 
GRANT EXECUTE ON sys.dbms_system TO user: 

,还是把这个错误

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in class path resource [spring/liquibaseContext.xml]: Invocation of init method failed; nested exception is org.hibernate.JDBCException: Error updating database 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) 
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:282) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:204) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 
    at com.xxxx.spring.config.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:19) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3934) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4429) 
    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:526) 
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:630) 
    at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:556) 
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:491) 
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1206) 
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:314) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) 
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:722) 
    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:583) 
    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:597) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) 
Caused by: org.hibernate.JDBCException: Error updating database 
    at com.xxx.db.liquibase.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:288) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) 
    ... 37 more 
Caused by: java.sql.SQLException: unable to get a connection from pool of a PoolingDataSource containing an XAPool of resource xaDataSource with 5 connection(s) (5 still available) -failed- 
    at bitronix.tm.resource.jdbc.PoolingDataSource.getConnection(PoolingDataSource.java:252) 
    at com.xxxx.db.liquibase.SpringLiquibase.afterPropertiesSet(SpringLiquibase.java:280) 
    ... 39 more 
Caused by: bitronix.tm.internal.BitronixRuntimeException: incremental recovery failed when trying to acquire a connection from failed resource 'xaDataSource' 
    at bitronix.tm.resource.common.XAPool.getConnectionHandle(XAPool.java:109) 
    at bitronix.tm.resource.common.XAPool.getConnectionHandle(XAPool.java:97) 
    at bitronix.tm.resource.jdbc.PoolingDataSource.getConnection(PoolingDataSource.java:248) 
    ... 40 more 
Caused by: bitronix.tm.recovery.RecoveryException: failed recovering resource xaDataSource 
    at bitronix.tm.recovery.IncrementalRecoverer.recover(IncrementalRecoverer.java:104) 
    at bitronix.tm.resource.common.XAPool.getConnectionHandle(XAPool.java:106) 
    ... 42 more 
Caused by: javax.transaction.xa.XAException 
    at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java:709) 
    at bitronix.tm.recovery.RecoveryHelper.recover(RecoveryHelper.java:103) 
    at bitronix.tm.recovery.RecoveryHelper.recover(RecoveryHelper.java:61) 
    at bitronix.tm.recovery.IncrementalRecoverer.recover(IncrementalRecoverer.java:64) 
    ... 43 more 
+0

我使用以下设置了这样的问题:Oracle11gR1数据库,bitronix 2.1.2,休眠3.3.2.GA,休眠方言:org.hibernate.dialect.Oracle10gDialect,XA DataSource类: oracle.jdbc.xa.client.OracleXADataSource,JDBC驱动程序类:oracle.jdbc.OracleDriver (也试用了oracle.jdbc.driver.OracleDriver) – Marco 2012-05-16 02:40:20

回答

1

我可以看到两个原因针对此问题:

1)甲骨文最近改变了在一组特权

2)您没有正确授予给用户权限连接ction池配置有。

如果问题是:(1),你应该提供确切版本你使用那么我们就可以看到需要做的事情,使这个组合工作

如果它是什么DB和JDBC驱动程序(2),你应该仔细检查你的用户的权限。最简单和最安全的方法是使用JDBC客户端(如Squirrel SQL)连接到数据库,并检查是否可以从上面提到的3个视图中进行选择,并尝试检查是否可以执行dbms_system之一存储过程。

1

我不确定问题最初是如何解决的。

但是,我也遇到同样的错误,并使用下面的附加查询问题已解决。

grant execute on dbms_xa to <user>; --(If using Oracle 10.2.0.4 or higher JDBC driver) 

Reference