Java 嵌入式derby从J2C错误开始

Java 嵌入式derby从J2C错误开始,java,websphere,derby,Java,Websphere,Derby,我创建一个数据源作为 @DataSourceDefinition ( name="java:app/env/myDataSource", className="org.apache.derby.jdbc.EmbeddedXADataSource40", databaseName="myDB", properties= { // Vendor properties for Derby Embedded JDBC driver: "createDataba

我创建一个数据源作为

    @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;
...
当websphereserver启动时,我得到了以下错误以及更多信息

[12/12/16 15:05:28:136东部时间]000000 3B J2CXAResource W J2CA0061W: 创建XA连接和资源java.lang.Exception时出错: 参数xaResInfo缺少RA包装,并且无法创建RA包装 使用RA密钥解决。在 J2CXAResourceFactory$1.run(J2CXAResourceFactory.java:264) 在 com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:118) 在 com.ibm.ejs.j2c.J2CXAResourceFactory.getXAResource(J2CXAResourceFactory.java:199) 在 com.ibm.ws.Transaction.JTA.XARecoveryData.getxarmist(XARecoveryData.java:492) 在 com.ibm.ws.Transaction.JTA.XARecoveryData.recover(XARecoveryData.java:658) 在 com.ibm.tx.jta.impl.PartnerLogTable.recover(PartnerLogTable.java:432) 在 com.ibm.tx.jta.impl.RecoveryManager.resync(RecoveryManager.java:1543) 在 com.ibm.tx.jta.impl.RecoveryManager.performResync(RecoveryManager.java:2276) 在 com.ibm.ws.tx.jta.RecoveryManager.performResync(RecoveryManager.java:119) 位于com.ibm.tx.jta.impl.RecoveryManager.run(RecoveryManager.java:2229) 运行(Thread.java:798)


有什么想法吗?我认为嵌入式derby不需要J2C。

正如aguibert所说,服务器正在尝试执行XA恢复,但失败了。以下是有关从失败恢复中恢复的信息的链接:

如果记录的事务不重要,您只需停止应用程序服务器,导航到tranlog和partnerlog目录并删除两个目录的内容(log1和log2),然后重新启动应用程序服务器

作为参考,除非根据您的配置进行更改,否则默认目录通常位于以下路径中:

C:WebSphere\AppServer\profiles\AppSrv01\tranlog\MyNode01Cell\MyNode02\server1\transaction\partnerlog\

C:WebSphere\AppServer\profiles\AppSrv01\tranlog\MyNode01Cell\MyNode02\server1\transaction\tranlog\


正如aguibert所说,服务器正在尝试执行XA恢复,但失败了。以下是有关从失败恢复中恢复的信息的链接:

如果记录的事务不重要,您只需停止应用程序服务器,导航到tranlog和partnerlog目录并删除两个目录的内容(log1和log2),然后重新启动应用程序服务器

作为参考,除非根据您的配置进行更改,否则默认目录通常位于以下路径中:

C:WebSphere\AppServer\profiles\AppSrv01\tranlog\MyNode01Cell\MyNode02\server1\transaction\partnerlog\

C:WebSphere\AppServer\profiles\AppSrv01\tranlog\MyNode01Cell\MyNode02\server1\transaction\tranlog\


这是传统还是自由?我在Liberty上试用了这个精确的设置,效果很好。您想要XA功能吗?如果没有,您可以简单地降级到非XA数据源,例如:
className=“org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource40”
@aguibert这是传统的。它应该像以前那样工作。但突然间,当我今天启动服务器时,它给出了错误。我想知道发生了什么事?是的,我需要xa。我不确定到底发生了什么,但服务器正在尝试执行xa恢复,但失败了。您正在运行的版本是什么?我发现了您看到的确切错误消息,但它似乎是在was 7.0(大约2011年)中修复的。我的版本是WebSphere Platform 8.5.5.10。这是WebSphere traditional还是Liberty?我在Liberty上试用了这个精确的设置,效果很好。您想要XA功能吗?如果没有,您可以简单地降级到非XA数据源,例如:
className=“org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource40”
@aguibert这是传统的。它应该像以前那样工作。但突然间,当我今天启动服务器时,它给出了错误。我想知道发生了什么事?是的,我需要xa。我不确定到底发生了什么,但服务器正在尝试执行xa恢复,但失败了。您正在运行的版本是什么?我发现了您看到的确切错误消息,但它似乎是在was 7.0(大约2011年)中修复的。我的版本是WebSphere Platform 8.5.5.10,您确定了它。这可能是因为我没有提前正确关闭eclipse。那肯定会成功的。我以前丢失过工作区,因为我没有正确关闭eclipse。你搞定了。这可能是因为我没有提前正确关闭eclipse。那肯定会成功的。我以前丢失过工作区,因为我没有正确关闭eclipse。