我正在使用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)。