嵌入式德比以 J2C 错误开始
embedded derby starts with J2C error
我将数据源创建为
@DataSourceDefinition
(
name="java:app/env/myDataSource",
className="org.apache.derby.jdbc.EmbeddedXADataSource40",
databaseName="myDB",
properties=
{
// Vendor properties for Derby Embedded JDBC driver:
"createDatabase=create",
"connectionAttributes=upgrade=true",
// Custom properties for WebSphere Application Server:
"connectionTimeout=60",
"dataStoreHelperClass=com.ibm.websphere.rsadapter.DerbyDataStoreHelper",
"validateNewConnection=true",
"validateNewConnectionRetryCount=5"
},
serverName=""
)
然后我把它放到启动代码里
@Startup
@Singleton
public class StartUp {
@Resource(lookup = "java:app/env/myDataSource")
private javax.sql.DataSource dataSource;
...
当 websphere 服务器启动时,出现以下错误以及更多
[12/12/16 15:05:28:136 EST] 0000003b J2CXAResource W J2CA0061W:
Error creating XA Connection and Resource java.lang.Exception:
Parameter xaResInfo lacks an RA wrapper and an RA wrapper could not be
resolved using RA key. at
com.ibm.ejs.j2c.J2CXAResourceFactory.run(J2CXAResourceFactory.java:264)
at
com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:118)
at
com.ibm.ejs.j2c.J2CXAResourceFactory.getXAResource(J2CXAResourceFactory.java:199)
at
com.ibm.ws.Transaction.JTA.XARecoveryData.getXARminst(XARecoveryData.java:492)
at
com.ibm.ws.Transaction.JTA.XARecoveryData.recover(XARecoveryData.java:658)
at
com.ibm.tx.jta.impl.PartnerLogTable.recover(PartnerLogTable.java:432)
at
com.ibm.tx.jta.impl.RecoveryManager.resync(RecoveryManager.java:1543)
at
com.ibm.tx.jta.impl.RecoveryManager.performResync(RecoveryManager.java:2276)
at
com.ibm.ws.tx.jta.RecoveryManager.performResync(RecoveryManager.java:119)
at com.ibm.tx.jta.impl.RecoveryManager.run(RecoveryManager.java:2229)
at java.lang.Thread.run(Thread.java:798)
有什么想法吗?我认为嵌入式德比不需要 J2C。
正如 aguibert 所说,服务器正在尝试执行 XA 恢复,但失败了。这是一个 link,其中包含有关从失败恢复中恢复的信息:
In cases where the logged transaction is of no concern, you can simply stop the application server, navigate to the tranlog and partnerlog directories and delete the contents (log1 & log2) of both directories, then restart the app server.
For reference, unless changed by your configuration, the default directories are typically located in the paths:
C:WebSphere\AppServer\profiles\AppSrv01\tranlog\MyNode01Cell\MyNode02\server1\transaction\partnerlog\
C:WebSphere\AppServer\profiles\AppSrv01\tranlog\MyNode01Cell\MyNode02\server1\transaction\tranlog\
我将数据源创建为
@DataSourceDefinition
(
name="java:app/env/myDataSource",
className="org.apache.derby.jdbc.EmbeddedXADataSource40",
databaseName="myDB",
properties=
{
// Vendor properties for Derby Embedded JDBC driver:
"createDatabase=create",
"connectionAttributes=upgrade=true",
// Custom properties for WebSphere Application Server:
"connectionTimeout=60",
"dataStoreHelperClass=com.ibm.websphere.rsadapter.DerbyDataStoreHelper",
"validateNewConnection=true",
"validateNewConnectionRetryCount=5"
},
serverName=""
)
然后我把它放到启动代码里
@Startup
@Singleton
public class StartUp {
@Resource(lookup = "java:app/env/myDataSource")
private javax.sql.DataSource dataSource;
...
当 websphere 服务器启动时,出现以下错误以及更多
[12/12/16 15:05:28:136 EST] 0000003b J2CXAResource W J2CA0061W: Error creating XA Connection and Resource java.lang.Exception: Parameter xaResInfo lacks an RA wrapper and an RA wrapper could not be resolved using RA key. at com.ibm.ejs.j2c.J2CXAResourceFactory.run(J2CXAResourceFactory.java:264) at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:118) at com.ibm.ejs.j2c.J2CXAResourceFactory.getXAResource(J2CXAResourceFactory.java:199) at com.ibm.ws.Transaction.JTA.XARecoveryData.getXARminst(XARecoveryData.java:492) at com.ibm.ws.Transaction.JTA.XARecoveryData.recover(XARecoveryData.java:658) at com.ibm.tx.jta.impl.PartnerLogTable.recover(PartnerLogTable.java:432) at com.ibm.tx.jta.impl.RecoveryManager.resync(RecoveryManager.java:1543) at com.ibm.tx.jta.impl.RecoveryManager.performResync(RecoveryManager.java:2276) at com.ibm.ws.tx.jta.RecoveryManager.performResync(RecoveryManager.java:119) at com.ibm.tx.jta.impl.RecoveryManager.run(RecoveryManager.java:2229) at java.lang.Thread.run(Thread.java:798)
有什么想法吗?我认为嵌入式德比不需要 J2C。
正如 aguibert 所说,服务器正在尝试执行 XA 恢复,但失败了。这是一个 link,其中包含有关从失败恢复中恢复的信息:
In cases where the logged transaction is of no concern, you can simply stop the application server, navigate to the tranlog and partnerlog directories and delete the contents (log1 & log2) of both directories, then restart the app server.
For reference, unless changed by your configuration, the default directories are typically located in the paths:
C:WebSphere\AppServer\profiles\AppSrv01\tranlog\MyNode01Cell\MyNode02\server1\transaction\partnerlog\
C:WebSphere\AppServer\profiles\AppSrv01\tranlog\MyNode01Cell\MyNode02\server1\transaction\tranlog\