我正在使用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绑定?
答案 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)。