我正在使用ejb3unithttp://ejb3unit.sourceforge.net/Session-Bean.html对ejb3项目进行测试。我所有的服务都渴望@persistencecontext(unitname=bla)。我设置了ejb3unit.properties,如下所示:

ejb3unit_jndi.1.isSessionBean=true
ejb3unit_jndi.1.jndiName=ejb/MyServiceBean
ejb3unit_jndi.1.className=com.company.project.MyServiceBean

所有的东西都和内存数据库一起工作。
因此,现在我还想使用@persistencecontext(unitname=notxdatasource)测试另一个servicebean,该servicebean用于在datasources.xml中定义的:
<datasources>
   <local-tx-datasource>
    ...
   </local-tx-datasource>
   <no-tx-datasource>
     <jndi-name>noTxDatasource</jndi-name>
     <connection-url>...</connection-url>
     <driver-class>oracle.jdbc.OracleDriver</driver-class>
     <user-name>bla</user-name>
     <password>bla</password>
   </no-tx-datasource>
 </datasources>

我该如何告诉ejb3unit让它工作:
Object object = InitialContext.doLookup("java:/noTxDatasource");
if (object instanceof DataSource) {
  return ((DataSource) object).getConnection();
} else {
  return null;
}

当前,它无法说:javax.namingexception:在jndi树当前绑定中找不到名称(notxdatasource):(ejb/myservicebean=com.company.project.myservicebean)
如何将此no-tx数据源添加到jndi绑定?

最佳答案

我讨厌回答自己的问题,但我有一个简单的想法:

public void setUp() throws Exception {
  OracleDataSource ds = new OracleDataSource();
  ds.setServerName("localhost");
  ds.setPortName(1521);
  ds.setDatabaseName("database"); // SID
  ds.setUser("user");
  ds.setPassword("pass");

  InitialContext ic = new InitialContext();
  ic.add("noTxDatasource", ds);
}

这还允许您进行以下查找:
Object object = InitialContext.doLookup("java:/noTxDatasource");

交付数据源(在本例中是Oracle)。

10-07 16:07