EJB3Unit测试no-tx-datasource

时间:2010-02-15 13:22:47

标签: database unit-testing ejb-3.0

我正在使用ejb3unit http://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,它用于我的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-datasource添加到jndi绑定?

1 个答案:

答案 0 :(得分:2)

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

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)。