Spring管理JNDI来调用EJB

        最近还是在做平台项目,遇到了很多问题,接下来会用几篇博客来分享一下这些问题和解决方法。

        首先要说的就是通过Spring管理JNDI来调用EJB。

        在开始之初,由于没有看重功能实现,所以就在web端中简单的配置了一下Spring管理JNDI 来调用EJB的配置,而且还会调用成功了。

       具体的配置如下:

<bean name="addFunctionAction"
       class="com.tgb.collegeplatform.function.addfunction.action.AddFunctionAction"
       scope="prototype">
       <property name="commonAddBean" ref="commonAddBean"></property>
    </bean>
    <bean id="commonAddBean" class="org.springframework.jndi.JndiObjectFactoryBean">
       <property name="jndiName" value="common_AddBean/remote"></property>
    </bean>


        能够从上面的配置看出来,首先Action实例化的时候要注入一个CommonAddBean对象,而CommonAddBean对象是通过JndiObjectFactoryBean对象通过JNDI查找Common_AddBean/remote来找到的ejb对象。

        这样会调通是因为这个EJB对象是在本地,而JNDI调用的时候是需要有property的,如果没有配置property的话,也就是默认在的在localhost上来查找。所以会调用成功。

        随后,由于开发战友反映JBoss开发重启问题太影响开发效率,所以我就开始做demo,将后台的公共的EJB对象部署到另一台机器上,而这样减轻JBoss启动时候的负载量,或者可以Web端直接用Tomcat开发。

        所以写Demo的时候就发现我这里的配置文件是有问题,因为仅仅能够调用localhost的,所以需要多加配置。经过学习并且修改,配置为下面的:

<!-- Spring管理Struts2的Action -->
    <bean name="modifyRoleAction"
       class="com.tgb.collegeplatform.role.modifyrole.action.ModifyRoleAction"
       scope="prototype">
       <property name="commonTreeModelQueryBean" ref="commonTreeModelQueryBean"></property>
       <property name="commonQueryBean" ref="commonQueryBean"></property>
       <property name="commonModifyBean" ref="commonModifyBean"></property>
    </bean>
    <bean id="commonTreeModelQueryBean" class="org.springframework.jndi.JndiObjectFactoryBean">
       <property name="jndiName" value="common_TreeModelQueryBean/remote"></property>
       <property name="jndiEnvironment">
           <props>
              <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>
              <prop key="java.naming.factory.url.pkgs">org.jboss.naming:org.jnp.interfaces</prop>
              <!-- <propkey="java.naming.factory.url.pkg">org.jboss.naming</prop>-->
              <prop key="java.naming.provider.url">192.168.24.40:1099</prop>
           </props>
       </property>
    </bean>


        之后就要验证这个配置的正确性,需要启动Web来测试。

        启动之后,就遇到了另外一个问题:javax.naming.CommunicationException Root exceptionis java.rmi.UnknownHostException: Unknown host,分析这个问题,首先应该考虑到的是这个问题一定是出现在服务器,也就是192.168.24.40的机器。

        上网搜索了一下问题的解决方法,网上说是JBosss服务器启动时,指定了-b 0.0.0.0 导致出现这个问题。解决方法为run -b 0.0.0.0 -Djava.rmi.server.hostname=你的Ip地址 -Dremoting.bind_by_host=false

         之后在在40机器上启动jboss之后添加了上面的参数,之后再调用的时候上面的问题就不出现了。但是又报了另外一个错误,错误很低级了,是没有将pageModel和TreeModel序列号的问题。这个也是以前没有发现的,因为这个jar以前在localhost调用的时候不会出现问题,但是移到远端就出现问题了,这个很好理解。解决方法就是在这两个类上实现序列号接口。在之后又报了另外一个错误,是没有发现org.hibernate.collection.PersistentSet类的异常,因为我使用的Tomcat调用的,所以断定是lib包的问题,就没有再解决(因为我知道在后面还会出现这个问题,到时候一并解决),开始着手部署linux系统把底层的JBoss服务器搭建起来。

        这样就算解决了Spring管理JNDI 调用EJB的问题。

        其实往往问题的出现是连锁的,需要的是能够从问题中找到问题源头,如何解决问题的本领。还有就是对问题要有预见性,要知道哪里是存在隐患的,要越早的发现问题并且将问题解决掉是非常重要的。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值