昨天晚上给网络专业上《Java EE应用开发基础》的实验,实验结束后,有同学问了几个问题,整理一下,分享:
1、JBoss 4.2.3GA发布出来的应用不能被其他机器访问
以前还真没发现这个问题,百度了一下,才知道JBoss4.2以上版本存在仅限本机访问的问题,解决办法也很简单,启动时加个参数就可以了,如果直接启动JBoss,可以新建一个bat文件(startup.bat,呵呵,受tomcat的影响),文件内容:
run.bat -b 0.0.0.0
如果你是在eclipse中启动tomcat,需要指定启动参数:
这样其他机器就能访问该JBoss的服务了,包括JNDI,呵呵。
究其原因,JBoss绑定了${jboss.bind.address}这个参数,这个参数默认是127.0.0.1,所以出现了上面的问题。
2、访问多个JNDI服务器的问题
有学生问,试验中JNDI的参数是写在jndi.properties中的,只能指定一个JNDI服务器,如何才能指定多个JNDI的服务器呢?
这个问题我还真没考虑过,以前都是把所有的JNDI都注册到一个JNDI服务器上,还真没考虑过多个JNDI服务器的问题。
以前的处理方式(多个分布的服务器把JNDI都注册到一个JNDI服务器上,以JBoss为例):
假设我们使用server-1上的JNDI,那么server-1上的JBoss中的JNDI配置成localhost即可,也就是说server-1的${JBOSS_HOME}/server/default/conf/下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
而server-2不使用本机的JNDI服务,而是使用server-1的JNDI,所以server-2的
${JBOSS_HOME}/server/default/conf/下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
java.naming.provider.url=server-1/:1099
这样在客户端的jndi.properties中JNDI的url配置成server-1的地址就可以了。
至于学生问的问题,也不是没有解决办法,只是JNDI的配置信息需要在Properties中载入了:
Properties props = new Properties();
props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
props.setProperty("java.naming.provider.url","server-1:1099");
InitialContext ctx1 = new InitialContext(props);
ctx1.lookup.... //server-1上的ejb,
props = new Properties();
props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
props.setProperty("java.naming.provider.url","server-2:1099");
InitialContext ctx2 = new InitialContext(props);
ctx2.lookup... //server-2上的ejb,
当然,也可以把两个服务的properties放到XML或者properties文件中,从自己定义的文件中读取相应参数也是可以的。