测试时,如果不想启动服务器,但是需要使用上下文环境,
private static void initJndi(){
try {System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.naming.java.javaURLContextFactory"); //需要naming-java包
System.setProperty(Context.URL_PKG_PREFIXES, "org.apache.naming");//需要naming-common包
InitialContext ic = new InitialContext();
ic.createSubcontext("java:");
ic.createSubcontext("java:comp");
ic.createSubcontext("java:comp/env");
ic.createSubcontext("java:comp/env/jdbc");
MysqlConnectionPoolDataSource ds = new MysqlConnectionPoolDataSource();
ds.setURL("jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8");
ds.setUser("root");
ds.setPassword("pass");
ic.bind("java:comp/env/jdbc/mysql", ds);
Object obj=ic.lookup("java:comp/env/jdbc/mysql");/ /obj就是保存到ic中的ds
System.out.println("ss");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
<!-- https://mvnrepository.com/artifact/tomcat/naming-common -->
<!-- <dependency>
<groupId>tomcat</groupId>
<artifactId>naming-common</artifactId>
<version>5.0.28</version>
<scope>test</scope>
</dependency> -->
<!-- https://mvnrepository.com/artifact/tomcat/naming-java -->
<!-- <dependency>
<groupId>tomcat</groupId>
<artifactId>naming-java</artifactId>
<version>5.0.28</version>
</dependency>
-->
问题:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/naming/ContextBindings
类加载器环境不同,放在pom.xml中时加载不到运行时环境中。
解决方案:把naming-common的jar包从pom.xml中删除,放入lib文件夹下,add build path。