Jndi &引用;java:comp/env/jdbc/MY“SQL”DS;或;我的“SQL”和“DS”;或者从Java中引用数据源还有什么?

Jndi &引用;java:comp/env/jdbc/MY“SQL”DS;或;我的“SQL”和“DS”;或者从Java中引用数据源还有什么?,jndi,Jndi,“java:comp/env/jdbc/MY_SQL_DS”不起作用。我得到一个命名异常:NameNotFoundException。这两种方法都不能单独使用“MY\u SQL\u DS”。请再次执行名称异常 我为一个名为“MY_MailSession”的邮件会话创建了另一个JNDI,并引用它,如(javax.Mail.Session)ctx.lookup(“MY_MailSession”),它可以工作 那么引用JDBC数据源的约定是什么呢?我用以下方法解决了它: 希望这能帮助以后有同样问题的其

“java:comp/env/jdbc/MY_SQL_DS”不起作用。我得到一个命名异常:NameNotFoundException。这两种方法都不能单独使用“MY\u SQL\u DS”。请再次执行名称异常

我为一个名为“MY_MailSession”的邮件会话创建了另一个JNDI,并引用它,如(javax.Mail.Session)ctx.lookup(“MY_MailSession”),它可以工作


那么引用JDBC数据源的约定是什么呢?

我用以下方法解决了它: 希望这能帮助以后有同样问题的其他人

protected Connection getConnection() {
            try {
                if (connection == null || connection.isClosed()) {
                    if (dataSource == null) {
                        // impliziter Initial Context von WebLogic ApplicationServer Environment
                        java.util.Hashtable environment = new java.util.Hashtable();
                        environment.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
                        Context wlsic = new InitialContext(environment);
                        showJndiContext( wlsic, "", "");

                        // logischer JNDI Rootcontext der Serverkomponente, kann mehrfach verwendet werden
                        Context ctx = (Context) wlsic.lookup("java:comp/env"); 
                        showJndiContext( ctx, "", "");

                        // weiter mit Resourcenpfad
                        dataSource = (DataSource) ctx.lookup("MY_SQL_DS");
                    }
                    connection = dataSource.getConnection();
                }
            }
            catch (NamingException ne) {
                ne.printStackTrace();
                log.error(ne);
            }
            catch (SQLException sqlEx) {
                sqlEx.printStackTrace();
                log.error(sqlEx.getMessage());
            }
            return connection;
        }

        public static void showJndiContext(Context ctx, String name, String space) {
            if (null == name)
                name = "";
            if (null == space)
                space = "";

            try {
                NamingEnumeration en = ctx.list(name);
                while (en.hasMoreElements()) {
                    String delim = (null != name && 0 < name.length()) ? "/" : "";
                    NameClassPair nc = (NameClassPair) en.next();
                    System.out.println(space + name + delim + nc);
                    if (40 > space.length())
                        showJndiContext(ctx, nc.getName(), "    " + space);
                }
            }
            catch (javax.naming.NamingException ex) {
                //System.out.println( ex );
            }
        }
受保护的连接getConnection(){
试一试{
if(connection==null | | connection.isClosed()){
如果(数据源==null){
//impliziter WebLogic应用程序服务器环境的初始上下文
java.util.Hashtable环境=新的java.util.Hashtable();
put(Context.INITIAL\u Context\u工厂,“weblogic.jndi.WLInitialContextFactory”);
Context wlsic=新的初始上下文(环境);
showJndiContext(wlsic,“,”);
//logischer JNDI根上下文服务器Komponente,kann mehrfach verwendet werden
Context ctx=(Context)wlsic.lookup(“java:comp/env”);
showJndiContext(ctx,“,”);
//威特麻省理工学院资源中心
dataSource=(dataSource)ctx.lookup(“MY_SQL_DS”);
}
connection=dataSource.getConnection();
}
}
捕获(纳明异常){
ne.printStackTrace();
日志错误(ne);
}
捕获(SQLException sqlEx){
sqlEx.printStackTrace();
log.error(sqlEx.getMessage());
}
回路连接;
}
公共静态void showJndiContext(上下文ctx、字符串名称、字符串空间){
if(null==名称)
name=“”;
if(null==空格)
空格=”;
试一试{
NamingEn=ctx.list(名称);
while(en.hasMoreElements()){
字符串delim=(null!=name&&0space.length())
showJndiContext(ctx,nc.getName(),“”+空格);
}
}
catch(javax.naming.NamingException ex){
//系统输出打印项次(ex);
}
}