我有一个包含许多在 WebSphere 7 中运行的 JAX-WS Web 服务的包,我在其中配置了一个 DB2 数据库的数据源,包括别名下的 JAAS 身份验证。
现在,我只想测试我的 DAO 的逻辑,当然,我有一个实体管理器。因此,我创建了一个应用程序客户端项目,部分由本教程http://www.ibm.com/developerworks/rational/library/08/0219_jadhav/指导,其中我有:
一个 application-client.xml
<?xml version="1.0" encoding="UTF-8"?> <application-client version="5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application-client_5.xsd" metadata-complete="false"> <display-name>ServiciosAcademicoTests</display-name> <resource-ref> <res-ref-name>ServiciosAcademicoTests</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Application</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref>
一个 ibm-application-client-bnd.xml
<?xml version="1.0" encoding="UTF-8"?> <application-client-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-application-client-bnd_1_0.xsd" version="1.0"> <resource-ref name="ServiciosAcademicoTests" binding-name="java:comp/env/jdbc/MyDB"> </resource-ref> </application-client-bnd>
当我运行测试时,它返回以下错误“不支持 Null userid ”。:
<openjpa-1.2.1- (...) fatal general error> org.apache.openjpa.persistence.PersistenceException: **Null userid is not supported.** ERRORCODE=-4461
我尝试在 ibm-application-client-bnd.xml 中指定和身份验证,但我仍然收到相同的错误:
<?xml version="1.0" encoding="UTF-8"?>
<application-client-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-application-client-bnd_1_0.xsd"
version="1.0">
<resource-ref name="ServiciosAcademicoTests" binding-name="java:comp/env/jdbc/MyDB">
<authentication-alias name="dmfloresNode01/XXX "/>
</resource-ref>
以防万一,我的单元测试是这样的:
public class CursosTest extends TestCase {
ICursoDAO cursoDAO; // From another project
Integer idAlumno = 123456;
String usuarioPortal = "xxx";
public void testCursosLlevados() throws Exception {
cursoDAO = new CursoDAO();
List<CursoLlevadoVO> lstCursos = cursoDAO
.obtenerCursosLlevadosPorAlumno(idAlumno, usuarioPortal);
if (lstCursos != null) {
for (CursoLlevadoVO cursoLlevadoVO : lstCursos) {
System.out.println(cursoLlevadoVO.getNombre());
}
}
assertNotNull(lstCursos);
}
}
我检测到创建实体管理器时发生了问题:
entityManagerFactory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
entityManager = entityManagerFactory.createEntityManager(); // <-- here
请问你能帮帮我吗 ?两天寻找解决方案:(。
更新:
我认为我的应用程序客户端甚至没有查询数据源,因为我将 jdbc/MyDB 更改为 jdbc/XXX 并且问题是相同的(http://www-01.ibm.com/support/docview. wss?uid=swg21596108,我没有收到“无法查找命名的数据源”消息,但这可能是一个原因)。我还尝试在 Websphere 的管理控制台中停用对数据源的身份验证,但我得到了相同的结果。
这是我在 webservices 项目上的 persistence.xml 文件(运行良好,问题是我的应用程序客户端使用 DAO 类只是为了测试目的,而不是为了测试 web 服务以防万一):
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="ServiciosAcademico">
<jta-data-source>jdbc/MyDB</jta-data-source>
<class>...</class>
<properties>
<property name="openjpa.jdbc.Schema" value="XXX"/>
</properties>
</persistence-unit>
. 这是我在 websphere 上的数据源,它在一定范围内:
第 3 天:
可能,当我删除数据源的别名时,我会收到相同的消息,因此应用程序客户端可以连接到数据源,但这没有使用任何授权方法。
谢谢你的帮助。我是 WebSphere 的新手。