2012-02-21 3 views
1

Я только начал использовать bitronix для jta в моей настройке spring/hibernate, и все работает отлично под H2 и Postgres, но не работает под Oracle.Oracle XAException - XA Recovery Failed

Я следил за другими сообщениями о предоставлении привилегий, но проблема по-прежнему сохраняется. Любые идеи о том, как исправить это?

Я поставил эти 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, Hibernate 3.3.2.GA, Hibernate диалекта: org.hibernate.dialect.Oracle10gDialect, XA Datasource класс: oracle.jdbc.xa.client.OracleXADataSource, JDBC Класс драйвера: oracle.jdbc.OracleDriver (Также попробовал это с oracle.jdbc.driver.OracleDriver) – Marco

ответ

1

я вижу две причины этой проблемы:

1) Oracle изменила набор привилегий недавно

2) Вы должным образом не дали привилегии пользователю conne ction pool настроен.

Если проблема (1), вы должны предоставить точной версии драйвера DB и JDBC, который вы используете, то мы можем увидеть, что должно быть сделано, чтобы сделать эту комбинацию РАБОТЕ

Если это (2), вы должны дважды проверить свои права пользователя. Самый простой и безопасный способ сделать это - подключиться к БД с помощью клиента JDBC (например, Squirrel SQL) и проверить, что вы можете выбрать один из трех просмотров, упомянутых выше, а также попытаться проверить, можно ли выполнить одну из dbms_system хранимые процедуры.

1

Я не уверен, как проблема была первоначально решена.

Однако, я также получал ту же ошибку и, используя дополнительный ниже запрос, проблема была решена.

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

Reference