JNDI服务--jnp
Java 应用程序与Java应用程序通信一般采用JNDI方式。
本文将jboss中的jndi服务单独抽取出来,放到自己的应用程序中中,方便不同的java程序互相远程调用。用户不用单独写Socket进行通信(自己管理消息应答--网络包的丢失),更具有实时性,确保消息准确可靠的传输,更方便快捷开发Java应用程序。
?
jnpserver 路径为:
https://repository.jboss.org/nexus/service/local/repositories/releases/content/org/jboss/naming/jnpserver/5.0.5.Final/jnpserver-5.0.5.Final.jar
其依赖两个jar: ? ? jboss-logging-spi-2.0.5.GA.jar ? ? ??jboss-common-core-2.2.10.GA.jar
?
一、
在自己的代码中使用jndi ,首先要启动这个服务,
?
新建一个线程专门启动服务
?
?
private NamingBeanImpl namingBean;private Main namingMain;@Overridepublic void run() {if (namingBean == null) {namingBean = new NamingBeanImpl();try {namingBean.start();namingMain = new Main("org.jnp.server");namingMain.setNamingInfo(namingBean);namingMain.setPort(1099);//namingMain.setBindAddress("192.168.8.34");//为本机IPnamingMain.start();} catch (Exception e) {throw new RuntimeException("启动JNDI服务失败!",e.getCause());}}}
?注意需要增加配置文件jndi.properties,否则提示需要环境变量设置。
?
# DO NOT EDIT THIS FILE UNLESS YOU KNOW WHAT YOU ARE DOING#java.naming.factory.initial=org.jnp.interfaces.NamingContextFactoryjava.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
二、?
使用时 和同使用JBOSS中的jndi相同,简单实例如下:
?
?
Hashtable<String, String> c = new Hashtable<String, String>();c.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");c.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");c.put("java.naming.provider.url", "jnp://192.168.8.34:1099");try {ctx = new InitialContext(c);ctx.bind("test", new String("test"));//绑定一个接口String s = (String) ctx.lookup("test");//查找一个接口System.out.println(s);//输出结果} catch (NamingException e) {e.printStackTrace();}?
?