我正在使用WebSphere 8的可嵌入EJB容器,使用JUnit4为我的EJB编写一些单元测试。我在MyEclipse中有一个简单的java项目,我引用了EJB项目。 EJB项目使用Hibernate 3.5进行持久化,hibernate.cfg.xml中的数据源JNDI是jdbc / connectionname。当它在标准WebSphere 8上运行时,我已经通过Web控制台设置了数据源,并且一切正常。在可嵌入容器中,数据源在embeddable.properties中设置:
再次命名为jdbc / connectionname以及其他数据源信息(用户名,密码等)和 豆。#TestProjectName#ClassNameForTests.ResourceRef.BindingName.jdbc / connectionName中= JDBC / connectionName中
我的embeddable.properties如下:
DataSource.ds1.name=jdbc/connectionname
DataSource.ds1.className=com.ibm.db2.jcc.DB2Driver
DataSource.ds1.createDatabase=create
DataSource.ds1.databaseName=DBNAME
DataSource.ds1.user=dbusername
DataSource.ds1.password=dbpassword
DataSource.ds1.transactional=true
DataSource.ds1.createDatabase=create
可嵌入容器成功启动,并且可以通过JNDI成功找到EJB,但是在进行方法调用时,我收到错误:
ERROR org.hibernate.connection.DatasourceConnectionProvider.configure:78 - Could not find datasource: jdbc/connectionname
javax.naming.NameNotFoundException: Name jdbc not found in context "serverlocal:CELLROOT/SERVERROOT".
at com.ibm.ws.naming.ipbase.NameSpace.getParentCtxInternal(NameSpace.java:1969)
at com.ibm.ws.naming.ipbase.NameSpace.retrieveBinding(NameSpace.java:1376)
at com.ibm.ws.naming.ipbase.NameSpace.lookupInternal(NameSpace.java:1219)
at com.ibm.ws.naming.ipbase.NameSpace.lookup(NameSpace.java:1141)
at com.ibm.ws.naming.urlbase.UrlContextImpl.lookupExt(UrlContextImpl.java:1436)
at com.ibm.ws.naming.urlbase.UrlContextImpl.lookup(UrlContextImpl.java:1314)
at javax.naming.InitialContext.lookup(InitialContext.java:436)
at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:75)
任何建议都将受到赞赏。
答案 0 :(得分:0)
是否通过可嵌入属性配置了jdbc/connectionname
数据源?请参阅Embeddable EJB container configuration properties信息中心主题。您的属性应如下所示:
DataSource.ds1.name=jdbc/connectionname
DataSource.ds1.className=org.apache.derby.jdbc.EmbeddedXADataSource
DataSource.ds1.createDatabase=create
DataSource.ds1.databaseName=jtest1
如果您已经拥有此功能,是否可以显示您正在使用的属性?请注意,Hibernate没有使用您的资源引用,因此在这种情况下ResourceRef.BindingName无效。