CSDN博客

img zlsunnan

恶斗EJB(三)

发表于2004/10/11 11:52:00  1672人阅读

分类: J2EE

一切都结束了吗?别急,刚到再接再厉的好时候,难道你不觉得有了IP,再有个端口就更好了吗?遗憾的是,文档没有给我们答案。
以前面的结果为契机,我们继续向前。
端口常与IP齐舞,那我们就从“org.omg.CORBA.ORBInitialHost”出发。既然它能起作用,显然代码里应该有这个字符串,搜!
不出所料,在它身边,“org.omg.CORBA.ORBInitialPort”出现了。
在代码中再加一段:
    System.setProperty("org.omg.CORBA.ORBInitialPort", "1050");
如果测试的话,使用1050和没使用几乎没什么区别,因为它是缺省端口。改一下容易,但也要同时改了server的端口,才能验证我们的想法。
有了前面的探索,找到server的配置简单许多。最终我将目标锁定在config/orb.properties上。一个port和一个host。改动port,重新启动server,从打印出来的信息,我确信自己的改动是成功的。
client,跑!OK!

port我们已经知道了用途,但那个host呢?难道启动还能绑到别人的IP不成。强烈的好奇心让我暂时偏移了原来的轨道,改动IP,没什么,它依然能够启动,关了吧!
发现问题了!
关掉的不是这台机器的server,而是由host指定的那台机器上的server,原来它是干这个的。

回到原来的路上。
这里已经有了IP和端口,在Context.PROVIDER_URL中指定的URL也涉及到IP和端口,意义何在呢?
删了它,试一下。代码居然仍然运行良好。

再来看一下HelloWorldAppClient.jar,把它加入classpath之后,我们几乎忘了它的存在。
在J2EE Tutorial中,HelloWorldClient也被打到了这个JAR文件中,我们自己编写就是一个client,那么这个client有作用是什么呢?事实证明,它是标准的托,没用,删了它对大局无碍。
现在看看HelloWorldAppClient.jar,只有与EJB紧密关联的类,清净不少啊!

还有什么问题呢?
还记得我们在开始的时候,将引用名称改成了JNDI名称吧!
我想把它改回来。
同样以异常起步,寻着调用逆流而上,一步一步解决出现的问题。
对比直接用runclient运行,很容易就可以找到二者的差异,大踏步向前。
runclient其实只是一个批处理文件,其中我最核心的一句简化一下就是下面这个样子:
%JAVA_COMMAND% com.sun.enterprise.appclient.Main %*
%JAVA_COMMAND%就相当于我们常用的java命令,那实际上这一句就是运行com.sun.enterprise.appclient.Main。
同直接运行相比,二者之间的差别肯定是runclient在前期设置了一些东西,才使得代码最终可以运行良好,所以,直接调用就需要自己完成这一些设置的工作。

当我在代码中加入一些新的代码后,我决定放弃。
并非问题无法解决,而是从差别中查找出来的一些设置方法同J2EE RI中的一些类紧密关联在一起。如果说前面设置属性的方式是我可以接受的,那么这里就完全破坏代码中的那种美感。这样,即便最终可以完成,那也已经失去应有的意义。

想来,我最初“调用远程EJB”的目的已经达到了,而在我将来的代码会运行在应用服务器上,这些设置工作应用服务器可以替我很好的完成,我也就不必理会了。

最后,我要告诫一下对有兴趣尝试一下的朋友,前面所有的代码都是在J2EE RI上完成的,具体的应用服务器之间还是有差别的。
好了,一场恶斗就此结束。

阅读全文
0 0

相关文章推荐

img
取 消
img