【发布时间】:2018-10-30 16:23:51
【问题描述】:
我正在尝试将 ear 文件部署到 Weblogic 12 服务器。 ear 文件包含一个 HttpServlet。在部署期间,HttpServlet 正在尝试初始化并失败并出现以下错误:
目标状态:在集群上部署失败 javax.naming.NameNotFoundException:尝试查找时 “jdbc。”没有找到子上下文'jdbc'。解决 '' 在 weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:1180)
我在weblogic服务器上测试了数据源连接,成功了。
数据源是在一个正在访问的属性文件中定义的,因为数据源名称是正确的。网络服务器 URL 也是正确的。
这是 init() 方法:
public void init(ServletConfig config) throws ServletException
{
super.init(config);
Context jndiContext = null;
Hashtable ht = new Hashtable();
try
{
PropertyManager.getInstance(PROPS_FILE);
PropertyManager.getInstance();
ht.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL, PropertyManager.getProperty("WL_WEBSERVER_URL"));
jndiContext = new InitialContext(ht);
ds = (javax.sql.DataSource) jndiContext.lookup(PropertyManager.getProperty("SEC_DATASOURCE"));
}
}
我不明白为什么它不能识别jdbc 的子上下文。
我尝试删除jdbc。但错误是没有 jdbc 的 NameNotFoundException。
更新
我尝试将数据源名称更改为java:jdbc/scantDS。我收到了不同的 NameNotFoundException:
".javax.naming.NameNotFoundException: 虽然 试图在 /app/webapp/Load/421643657 中查找 /jdbc/scantDS。 剩余名称 '/jdbc/scantDS' 在 weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:1180)
【问题讨论】:
-
首先,如果 servlet 与数据源位于同一服务器中,您应该通过这种方式获取初始上下文: Context jndiContext= new InitialContext();这就是你所需要的。无需使用哈希表。接下来,检查您的数据源是否已部署在您的服务器中。使用管理控制台,进入服务器配置页面并单击“查看 JNDI 树”并检查您的数据源是否在树中。
标签: java datasource jndi weblogic12c