java - 从远程应用程序查找 WebLogic 12c EJB3 bean 时出现问题
问题描述
我是
- 使用 Java 7
- 使用 WebLogic Server 版本:12.1.3.0.0 (12c)
- 将一组 EJB3 bean 作为部署的 EAR 文件的一部分
- 只是在我的 bean 上使用 @Stateless 注释
- 能够在 JNDI 视图中看到 bean(例如 java:global.ifactory.ifactory-ejb-4.0.0.BomServiceBean!com.icumed.ifactory3.service.BomServiceRemote)
- 运行试图访问这些 EJB 的命令行应用程序
- 我正在使用 wlthint3client.jar
- 已禁用 IIOP
但是,当我有“java:global”(我得到 NameNotFoundException:remaining name...)时,我无法访问 bean,没有它我只会走得更远。它在查找时仍然失败,但有以下异常:
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
at weblogic.rmi.internal.StubInfo.getEnvQueriedJNDITimeout(StubInfo.java:256)
...
at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:426)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
我错过了什么或有什么问题?
解决方案
问题出在 wlthint3client.jar (StubInfo.java) 的代码中。如果您在 jndi.properties 文件中指定以下两个属性,则它们不会正确地从 String 转换为 Long。
Long o = (Long)props.get("weblogic.jndi.responseReadTimeout");
if (o == null) {
o = (Long)props.get("weblogic.rmi.clientTimeout");
}
如果需要设置这些属性,则必须在代码中创建一个 Hashtable 并将其传递给 InitialContext。
Hashtable<String, Object> env = new Hashtable<String, Object>();
env.put("weblogic.jndi.responseReadTimeout", 15000L);
env.put("weblogic.rmi.clientTimeout", 15000L);
推荐阅读
- typescript - 如何根据值过滤记录键?
- reactjs - 有没有办法检查用户在 React 中所做的任何状态更改?
- python - 如何正确包装使用 qt 和 shiboken2 的 c++ 库?
- jquery - 表单未提交,单击提交按钮时没有任何反应
- node.js - 如何配置 babelify 将 javascript 文件转换为兼容 IE 11
- python - 从图像坐标反向投影到世界坐标(相对于地图)?
- c# - 如何使用 InOut 参数作为 RefCursor 调用 Postgres V11 存储过程(非函数)?使用 Npgsql v4.0.8
- mongodb - 聚合mongodb中具有多个条件的addToSet
- sql - PL/SQL: ORA-00920: 无效的关系运算符
- python - 如何在 RetrieveUpdateDestroyAPIView 中更改序列化数据的值