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;
@Override
public 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");//为本机IP
namingMain.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.NamingContextFactory
java.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();
}