jms - 从 WAS 迁移到 Liberty 时出现 JNDI 上下文初始化错误
问题描述
类WsnInitialContextFactory
未找到异常。Liberty 不支持这个类,那么我该如何删除jndi.properties
默认设置。此属性文件包含InitialContext
.
特性:
INITIAL_CONTEXT_FACTORY = "com.ibm.websphere.naming.WsnInitialContextFactory"
CC_PROVIDER_URL = "iiop://localhost.svr.us.xxxxxxx.net:41516"
InitialContext 查找:
try {
Hashtable params = new Hashtable();
params.put(Context.INITIAL_CONTEXT_FACTORY, ADProperties.WS_INITIAL_CONTEXT_FACTORY);
params.put(Context.PROVIDER_URL, ADProperties.AD_PROVIDER_URL);
Context ctx = new InitialContext(params);
try {
ds = (DataSource) ctx.lookup("java:comp/env/" + jndiName);
} catch (Exception ex) {
LogUtil.debugException("DBConnectionManager", "Exception in init: Resource reference DataSource lookup Error.", "init()", ex, "");
try {
ds = (DataSource) ctx.lookup("jdbc/" + jndiName);
} catch (Exception exp) {
LogUtil.debugException("DBConnectionManager", "Exception in init: Datasource lookup Error.", "init()", exp, "");
}
}
例外:
[INFO] [err] java.lang.NoClassDefFoundError: Could not initialize class com.ibm.websphere.naming.WsnInitialContextFactory
[INFO] [err] at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
[INFO] [err] at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
[INFO] [err] at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
[INFO] [err] at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
[INFO] [err] at com.ibm.ws.jndi.internal.WASInitialContextFactoryBuilder.createInitialContextFactory(WASInitialContextFactoryBuilder.java:57)
[INFO] [err] at [internal classes]
[INFO] [err] at java.naming/javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:730)
[INFO] [err] at java.naming/javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:305)
[INFO] [err] at java.naming/javax.naming.InitialContext.init(InitialContext.java:236)
[INFO] [err] at java.naming/javax.naming.InitialContext.<init>(InitialContext.java:184)
解决方案
Liberty 不支持 WsnInitialContextFactory 类。您可以这样做(它也可以在传统的 WebSphere 中工作):
try {
Context ctx = new InitialContext(new Hashtable());
try {
ds = (DataSource) ctx.lookup("java:comp/env/" + jndiName);
} catch (Exception ex) {
LogUtil.debugException("DBConnectionManager", "Exception in init: Resource reference DataSource lookup Error.", "init()", ex, "");
try {
ds = (DataSource) ctx.lookup("jdbc/" + jndiName);
} catch (Exception exp) {
LogUtil.debugException("DBConnectionManager", "Exception in init: Datasource lookup Error.", "init()", exp, "");
}
}
推荐阅读
- c - C 结构没有将正确的参数传递给 pthread_create
- java - 为什么我的多维数组初始化不起作用?
- javascript - AnyChart 中的自定义 Y 轴
- rust - 自动派生 Arc 的特征实现
- javascript - 规则应该返回一个字符串或布尔值,而不是接收到“对象”
- excel - 一旦另一个单元格说是,我如何复制相邻单元格中的数据?
- kubernetes - 永久卷存储始终处于丢失阶段
- c++ - 为什么 OpenLDAP 认为我的代码没有绑定到服务器?
- c++ - Visual Studio 安装程序项目未检测到依赖项
- python - 如何使用python和bs4读取和覆盖文件夹中的所有*.txt文件?