在安装客户端之后,就开始安装jboss,并且部署ejb颗粒。这个过程还是比较简单的,因为jboss解压就ok。之后用《Spring管理JNDI来调用EJB对象》博客中说的命令来启动JBOSS,之后在上面命令后面添加&完成jboss的后台启动,后台启动主要是不影响终端对linux的其他操作。

         之后就开始写一个tomcat项目来调用jboss中部署的ejb。问题就开始出现了。

         首先出现的是jar包问题,因为需要导入jboss的client的jar。我的操作是将所有的jar都考到tomcat的lib下,由于tomcat的web项目需要struts2和spring2.5的jar,开始报java.lang.ClassNotFoundException:org.hibernate.collection.PersistentSet异常,这个异常在《Spring管理JNDI来调用EJB对象》博客中提及到,没有解决,因为我知道这是jar包的问题,所以在这里肯定会出现,就在这时候在考试着手解决。

         刚开始以为是tomcat、struts2、spring2.5、jboss的client中的jar冲突,所以我就做了第一个测试就是把web项目部署到客户端的jboss中调用远端的EJB,发现报了一个org.jboss.remoting.CannotConnectException:Can not get connection to server. Problem establishing socket connection forInvokerLocator [socket://127.0.0.1:3873/]异常,通过上网查询得到了一个答案是要修改JBOSS_HOME/server/default/deploy/ejb3.deployer/META-INF/jboss-services.xml 文件中的${jboss.bind.address}:3873 为linux_home_ip:3873,大概这样改的原因是ejb底层之间调用的时候通过socket进行通信的时候是要用到3873端口,而我们在开启jboss的时候bind的地址为0.0.0.0,所以这样socket进行通信的时候是找不到这个端口的,所以需要把这个address改linux_home_ip地址,这样就能够找到这个端口进行通信了。但是在jboss中没有找到那个路径,发现网上的答案是jboss4版本的,而我用的是jboss5,这样我就在jboss5中搜索找3873,找到它在\jboss-5.1.0.GA\server\default\deploy\ejb3-connectors-jboss-beans.xml中,更改之后再次用jboss来调用就成功了。

        所以,证明还是jar包的问题,也证明了不是jar包冲突问题是少了jar,但是这个jar肯定是在jboss的各种lib中。这样将问题定位的范围确定了,所以解决起来就轻松多了。

        首先解压了一下jboss中的jbossall-client.jar里面有个readme.txt文件,里面列举出了客户端调用jboss所需要的jar包,我把这些jar放到tomcat中,之后再次用tomcat运行,之后报了一个关于安全的异常,说明我的jar包中少了一个jboss-ejb3-security-client.jar包,导入之后再运行又开始报hibernateSet异常,所以确定是缺少了关于hibernate的jar。

        之后到jboss的目录中搜索hiber*,出现了很多关于hibernate的jar,其中有一个hibernate-core.jar。

         

        导入之后,运行顺利成功。

 

Logo

更多推荐