jndi一般是由容器提供,或是启动第三方服务jar包启动。
由于我在使用jetty作为内嵌服务器快速开发时需要使用jndi提供datasource来连接数据库,于是就研究了下,自己简单实现提供一个jndi服务
使用以下代码就行了。想要使用jndi就启动init方法
class MyContextBuild implements InitialContextFactoryBuilder {
private static HashMap<String, Object> map = new HashMap<String, Object>();
public static void init() {
try {
NamingManager.setInitialContextFactoryBuilder(new MyContextBuild());
} catch (NamingException e) {
e.printStackTrace();
}
}
public InitialContextFactory createInitialContextFactory(Hashtable<?, ?> environment) throws NamingException {
return new MyContextFactory();
}
public class MyContextFactory implements InitialContextFactory {
public Context getInitialContext(Hashtable<?, ?> environment) throws NamingException {
return new MyContext();
}
}
public class MyContext extends InitialContext {
public MyContext() throws NamingException {
super();
}
@Override
public void unbind(String name) throws NamingException {
map.remove(name);
}
@Override
public Object lookup(String name) throws NamingException {
return map.get(name);
}
@Override
public void bind(String name, Object obj) throws NamingException {
map.put(name, obj);
}
}
}
在启动jetty时顺便启动一下自己的jndi,搞定
public static void main(String[] args) throws Exception {
MyContextBuild.init();
Context context = new InitialContext();
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setDatabaseName(DATASOURCE_DATABASE);
dataSource.setPortNumber(DATASOURCE_PORT);
dataSource.setUser(DATASOURCE_USERNAME);
dataSource.setPassword(DATASOURCE_PASSWORD);
dataSource.setEncoding(DATASOURCE_ENCODEING);
String dataSourcePath = null;
for (String url : DATASOURCE_URL) {
try {
dataSource.setServerName(url);
dataSource.setConnectTimeout(500);
dataSource.getConnection().close();
dataSourcePath = url;
break;
} catch (Exception e) {
}
}
context.bind(JNDI_NAME, dataSource);
Server server = new Server(port);
WebAppContext webContext = new WebAppContext(contenxtFileName, contextPath);
webContext.setClassLoader(Thread.currentThread().getContextClassLoader());
server.setHandler(webContext);
server.setStopAtShutdown(true);
server.start();
server.join();
}
分享到:
相关推荐
NULL 博文链接:https://seraph115.iteye.com/blog/436300
jetty 嵌入式开发源码
使用嵌入式servlet容器Jetty开发web应用的例程
jetty快速入门与嵌入使用,简单、易懂,轻松学习!
Spring整合Jetty服务器开发web应用的例程,通过Spring启动Jetty服务器’
嵌入式jetty服务器开发的所有用到的jar包 包括基础jetty使用的和编译使用的ant的jar全都全了 一次性导入再也不用为找jetty依赖jar包而麻烦了
用jetty8.0写的websocket实现的简单聊天程序,供大家一起共同分享学习。
很好的教程,jetty开发是当前来说最快速的,修改代码不用重启服务,非常不错。maven也是非常高效的管理工程的优秀工具。
jetty嵌入Web编程多种实现方式案例
jar包版本9.4.8.v20171121,包含jetty-server-9.4.8.v20171121.jar,jetty-servlet-9.4.8.v20171121.jar,...jetty-annotations-9.4.8.v20171121.jarjetty-deploy-9.4.8.v20171121.jar,jetty-jndi-9.4.8.v20171121.jar
这个wiki提供jetty的入门教程、基础配置、功能特性、优化、安全、JavaEE、监控、常见问题、故障排除帮助等等。它包含教程、使用手册、视频、特征描述、参考资料以及常见问题。 Jetty文档 ---------------- 入门...
jetty-9.0开发包
Android端i-jetty服务器开发(五)[收集].pdf
jetty嵌入式服务器开发所必须的jar包,本人使用jetty版本为6.1.3,jar包总数为9个,来自jetty:commons-el-1.0.jar,jasper-compiler-5.5.15,jasper-compiler-jdt-5.5.15.jar,jasper-runtime-5.5.15.jar,jetty-...
使用jetty实现websocket功能,jetty已经集成了websocket的标准方法。
开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。 Jetty 可以作为嵌入式服务器使用,Jetty的运行速度较快,而且是轻量级的,可以在Java中可以从test ...
jetty 服务器,解压放到任意文件夹,配置路劲即可,。
jetty 服务器使用
NULL 博文链接:https://vista-rui.iteye.com/blog/1386427
开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。 Jetty 可以作为嵌入式服务器使用,Jetty的运行速度较快,而且是轻量级的,可以在Java中可以从...