Ошибка:javax.naming.NoInitialContextException: не удалось создать InitialContext с использованием фабрики, указанной в хеш-таблице

У меня ниже JSP.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@page import="java.sql.*"%>
<%@page import="javax.sql.*"%>
<%@page import="java.util.*"%>
<%@page import="javax.naming.*"%>
<%@page import="java.io.*" %>

<html>
<head>
<%!
 class LinkedProperties extends Properties {

  private final LinkedHashSet<Object> keys = new LinkedHashSet<Object>();

  public Enumeration<Object> keys() {
   return Collections.<Object>enumeration(keys);
  }

  public Object put(Object key, Object value) {
   keys.add(key);
   return super.put(key, value);
  }
 }

 public String getData(ResultSet rs, String tableName) throws Exception {
  String ret ="<div class='tname'>"+tableName+"</div>";
  ret+="<table border=1>";
  ret+="<tr>";
  ResultSetMetaData md = rs.getMetaData() ;
  for( int i = 1; i <= md.getColumnCount(); i++ ) {
   if(md.getColumnLabel(i).equals("UPDATE_DATE") || md.getColumnLabel(i).equals("Update Date")) {
    ret = ret + "<th class='upd'>"+ md.getColumnLabel(i) + "</th>";  
   } else if(md.getColumnLabel(i).equals("ASSIGNED_TO") || md.getColumnLabel(i).equals("Assigned To")) {
    ret = ret + "<th class='upd'>"+ md.getColumnLabel(i) + "</th>";  
   } else if(md.getColumnLabel(i).equals("UPDATED_BY") || md.getColumnLabel(i).equals("Updated By")) {
    ret = ret + "<th class='upd'>"+ md.getColumnLabel(i) + "</th>";  
   } else {
           ret = ret + "<th>"+ md.getColumnLabel(i) + "</th>";  
         } 
        } 
        ret+="</tr>";
  int cnt = 0;
  while( rs.next() )
        {
   cnt++;
   ret+="<tr>";
   for( int i = 1; i <= md.getColumnCount(); i++ )
   {
    if(rs.getString(i) == null) {
     ret = ret + "<td>&nbsp;</td>";  
    } else {
     ret = ret + "<td>"+ rs.getString(i) + "</td>";  
    }
   }
   ret+="</tr>";
         }  
  if(cnt == 0) return "";
        ret+="</table><BR/>";
        return ret;
 }
%>
<%!
 public String execute(Connection conn, String str, String tableType)  throws Exception {
  Statement stmt = null;
  ResultSet rset = null;
  try {
   stmt = conn.createStatement();
   rset = stmt.executeQuery(str);
   return getData(rset, tableType);
  } catch (Exception exp) {
   throw exp;
  } finally {
   try { rset.close(); } catch (Exception ignore) {}
   try { stmt.close(); } catch (Exception ignore) {}
  }
 }
%>
 
<%
String key, val;
String sql = "";
String ret = "";
Connection conn = null;
try {
 
 String typ = "role";//request.getParameter("t");
 if(typ==null) throw new Exception("Type is blank");
 if(!typ.equals("role") && !typ.equals("produit")) {
  throw new Exception("Invalid Type");
 }
 
 InputStream stream = application.getResourceAsStream("/tasksdisplay.properties");
 LinkedProperties props = new LinkedProperties();
 props.load(stream);

 LinkedHashMap<String, String> mapSQL = new LinkedHashMap<String, String>();
 
 String dbname = "mdmtrg01-CMX_ORS";//request.getParameter("d");
 if(dbname == null) {
  dbname = "mdmtrg01-CMX_ORS";
 }
 
 String dbJNDIName = "java:jdbc/siperian-mdmtrg01-cmx_ors-ds";//System.getProperty(dbname);
 if(dbJNDIName == null) {
  throw new Exception("Invalid database name. Must set dbname in JBoss startup");
 }
 
 Hashtable env = new Hashtable(); 
env.put(Context.INITIAL_CONTEXT_FACTORY,
     "com.ibm.websphere.naming.WsnInitialContextFactory");
env.put(Context.PROVIDER_URL, "iiop://mdma302p.corpads.local:30305");
Context initialContext = new InitialContext(env); 
 
 Context aContext = new InitialContext(env);
 DataSource aDataSource = (DataSource)aContext.lookup("java:jdbc/siperian-mdmtrg01-cmx_ors-ds");
 //DataSource aDataSource = (DataSource)aContext.lookup(dbJNDIName);
 conn = (Connection)(aDataSource.getConnection());

 for (Map.Entry<String,String> entry : mapSQL.entrySet()) {
  key = entry.getKey();
  sql = entry.getValue();
  ret = execute(conn, sql, key);
  %>
   <%=ret%> 
  <%
 }
%>

<%
} catch (Exception exp) {
 exp.printStackTrace();
 String err = exp.toString();
 err += "<BR/>sql##E:"+sql;
%>
 Error:<%=err%>
<% 
} finally {
 try { conn.close(); } catch (Exception ignore) {}
}
%>

<style>
.tname {
 color: red;
 font-size: 16px;
 font-weight:bold;
}

table{
 font-family: Verdana;
    font-size: 12px;
    font-weight: normal;
    text-align: center; 
}

table th {
 color: #225F8E;
}

table td {
 background-color: #DBFCF5;
}

a {
 color: blue;
}

.upd {
 background-color: yellow;
}

</style>

</head>
</html>
Я получаю следующую ошибку: Ошибка:javax.naming.NoInitialContextException: не удалось создать InitialContext с использованием фабрики, указанной в хеш-таблице {java.naming.provider.url=iiop://localhost:2809, java.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory} [Исключением корня является java.lang.NullPointerException]

Я использую JDK1.7. После добавления 2 JARS я получаю ниже ошибку Ошибка:javax.naming.ConfigurationException: не был установлен метод доступа к пространству имен для java: пространство имен. Возможная причина заключается в том, что пользователь указывает имя java: URL в вызове метода контекста JNDI, но не работает в среде клиента или сервера J2EE.

Запуск сервера предварительного просмотра на порту 8080

Модули: customTabFromKb_1 (/customTabFromKb_1) прокси (/ proxy)

NMSV0307E: Имя java: URL использовалось, но Naming не был настроен для обработки имен java: URL. Вероятной причиной является ошибка пользователя, пытающегося указать имя java: URL в среде, отличной от J2EE-клиента или сервера. Бросок ConfigurationException. javax.naming.ConfigurationException: метод доступа к пространству имен для пространства имен java: не был установлен. Возможная причина заключается в том, что пользователь указывает имя java: URL в вызове метода контекста JNDI, но не работает в среде клиента или сервера J2EE. в com.ibm.ws.naming.java.javaURLContextFactory.isNameSpaceAccessable(javaURLContextFactory.java:109) в com.ibm.ws.naming.urlbase.UrlContextFactory.getObjectInstance(UrlContextFactory.jan.Nava.java:).getURLContext(NamingManager.java:660) по адресу javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:422) по адресу javax.naming.InitialContext.lookup(InitialContext.java:436) в org.jsp_service.jp. Test_jsp.java:162) в org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) в javax.servlet.http.HttpServlet.service(HttpServlet.java:820) в org.aplet.jper.JspServletWrapper.service(JspServletWrapper.java:332) в org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314) в org.apache.jasper.servlet.JspServlet.er64Servservice) javax.servlet.http.HttpServlet.service(HttpServlet.java:820) в org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) в org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390) в org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) в org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) в или.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) в org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) в org.mortbay.jetty.handler.HandlerList.handleList.java:49) в org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) в org.mortbay.jetty.Server.handle(Server.java:326) в org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) по адресу org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:924) по адресу org.mortbay.jetty.HttpParser.parseNext(HttpPetty.jb) at..HttpParser.parseAvailable(HttpParser.java:212) в org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) в org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.j) org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) NMSV0307E: Использовалось имя java: URL, но Naming не была настроена для обработки имен java: URL. Вероятной причиной является ошибка пользователя, пытающегося указать имя java: URL в среде, отличной от J2EE-клиента или сервера. Бросок ConfigurationException. javax.naming.ConfigurationException: метод доступа к пространству имен для пространства имен java: не был установлен. Возможная причина заключается в том, что пользователь указывает имя java: URL в вызове метода контекста JNDI, но не работает в среде клиента или сервера J2EE. в com.ibm.ws.naming.java.javaURLContextFactory.isNameSpaceAccessable(javaURLContextFactory.java:109) в com.ibm.ws.naming.urlbase.UrlContextFactory.getObjectInstance(UrlContextFactory.jan.Nava.java:).getURLContext(NamingManager.java:660) по адресу javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:422) по адресу javax.naming.InitialContext.lookup(InitialContext.java:436) в org.jsp_service.jp. Test_jsp.java:162) в org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) в javax.servlet.http.HttpServlet.service(HttpServlet.java:820) в org.aplet.jper.JspServletWrapper.service(JspServletWrapper.java:332) в org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314) в org.apache.jasper.servlet.JspServlet.er64Servservice) javax.servlet.http.HttpServlet.service(HttpServlet.java:820) в org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) в org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390) в org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) в org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) в или.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) в org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) в org.mortbay.jetty.handler.HandlerList.handleList.java:49) в org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) в org.mortbay.jetty.Server.handle(Server.java:326) в org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) по адресу org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:924) по адресу org.mortbay.jetty.HttpParser.parseNext(HttpPetty.jb) at..HttpParser.parseAvailable(HttpParser.java:212) в org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) в org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.j) org.mor tbay.thread.QueuedThreadPool $ PoolThread.run (QueuedThreadPool.java:582)

Пожалуйста, помогите мне в этом отношении!

1 ответ

Ваш код не читается и не поддерживается, а также. Использование скриптлетов (<%..%>) в JSP крайне не рекомендуется. Вместо этого следует использовать JSTL(стандартную библиотеку тегов Java), которая является новым соглашением для оценки и представления бизнеса. объекты после обработки бизнес-логики. Сказав это, вы никогда не должны хранить бизнес-логику в JSP.JSP служат только для представления клиента. Вам, вероятно, следует принять шаблон проектирования MVC(Model View Controller), чтобы удалить зависимость между бизнес-логикой и презентация.

Более подробную информацию можно найти здесь

Тем не менее, если исходить из исходной проблемы, я думаю, что класс, содержащий jar (com.ibm.websphere.naming.WsnInitialContextFactory), не находится в пути к классам вашего проекта. Вам может понадобиться добавить клиентский jar в classpath.

Другие вопросы по тегам