JBoss5中Local与Remote不能同时存在的问题

在JBoss3服务器上,Ejb服务器可同时成功配置Local与Remote访问方式,部署后服务端也能够正常运行,不会报错。也就是说,在JBoss3服务器上,不存在这方面的问题。

而在JBoss5服务器上,当我配置第一个Ejb项目时,我同时采用了Local与Remote两种注解访问方式,部署后就会报错:


Caused by: java.lang.RuntimeException: @Remote and @Local may not both be specified on the same interface "interface com.lzq.ejb.UserManager" for EJB "UserManagerBean" per EJB3 Spec 4.6.6, Bullet 5.4 [EJBTHREE-751]
    at org.jboss.ejb3.proxy.factory.ProxyFactoryHelper.getLocalAndBusinessLocalInterfaces(ProxyFactoryHelper.java:233)
    at org.jboss.ejb3.proxy.factory.ProxyFactoryHelper.getLocalBusinessInterfaces(ProxyFactoryHelper.java:550)
    at org.jboss.ejb3.session.SessionContainer.resolveBusinessInterfaces(SessionContainer.java:192)
    at org.jboss.ejb3.EJBContainer.instantiated(EJBContainer.java:1564)
    at org.jboss.ejb3.session.SessionContainer.instantiated(SessionContainer.java:182)
    at org.jboss.ejb3.Ejb3Deployment.deployElement(Ejb3Deployment.java:726)
    ... 33 more


通过上面的错误信息,我们大概可以知道:Remote与Local两种方式不能同时指定到同一个接口上。

开始的时候,我并没有理解这句话是什么意思(lz关于Ejb纯属初学,高手莫笑),然后我就进行测试,将Local注释掉后继续运行,单采用Remote一种注解方式运行果不其然,一定成功。

由于我对这种方式的不理解,为什么远程访问与本次访问方式不能同时对服务器进行配置呢? 然后就求助“gg”找原因。大家的说法基本就一下三种:


1、Remote与Local不能在有一个Interface的情况下同时存在(大多数网友的意见);

2、在JBoss5中,Remote与Local注解不能同时存在(一小部分意见);

3、Remote与Local能够同时使用,但是需要配置各自的value属性,且一个接口只能用一种注解标注(个人试验)。


通过这三种意见,估计你早已经知道怎么回事儿了。我们可以下结论:在JBoss5中,Remote与Local是可以同时存在的。但是条件就是在多接口的情况下使用,且一个接口只能使用一种方式进行注解。


但是我们不能够就说前两种意见是完全错误的,因为他们确实有他们成立的条件。第一种意见:Remote注解与Local注解不能再有一个Interface的情况下同时存在。据我猜测,持这种观点的童鞋应该是尝试了在只有一个接口的情况。由于每个接口只能对应一种注解方式,所以只有一个接口的情况无法配置。但是他没有尝试多个接口的情况;

第二种意见:在JBoss5中,Remote与Local注解不能同时存在。我想得出这种论断之人,就更加武断了。应该说全完是靠自己的猜测得出的结论。


大家也看出来了,这是一个小问题,小的不值一提。但是往往越是小的问题,却能反映出来更多的东西。这个小bug深深的敲响了我的警钟:只有通过不断深入总结与思考写出来的东西,它出现错误的可能性才会越小!能够发现你深入总结的东西的错误,那个人无论在知识的纵向深度还是横向广度,一定比你总结的还要深入还好多!


所以说:我们通常凭借的,简单解决眼前问题的论断,忽悠忽悠真菜鸟还行,一遇到懂行人就露馅儿,自己解释的理由都能把自己逗笑,自己说着说着都能把自己说脸红(有切身体会的不用告诉我)。同时,这也反映出:真正的财富,是不断的根据原有的知识,消化新的知识;同时,再用我们学到的新知识,去补充原有的知识网。这也就是我们平时所说的总结。

大家注意,我得的论断,是在查了很多资料之后,得出的总结。前人说的论断不管正确与否,对我现在的实践都是由很大帮助的(这个很好解释,亚里士多德这个巨人的例子,说明这个问题在合适不过了)。我能在他们的基础上得到一个更深更接近真理的结论。不过,别高兴太早了:尽管,我是在前人的基础上进行的总结,这里也可能有些不妥的地方。但是要想将它们看出来,你就需要去了解更多,去懂更多。


最后,给大家留一个问题:像在JBoss3一样,对于同一个接口运行即允许在本地客户端访问,又允许远程客户端访问,有什么不好呢?为什么JBoss会做出这样的改进?

我认为这是职责单一性的考虑。一般情况的应用只需一种注解方式即可,无需同时提供两种注解服务。另外,这样实现可以避免使接口臃肿,接口的职责更加单一。这是我的理解,欢迎高手拍砖(高手莫要见笑,大家可以直接留言交流)。

  • 10
    点赞
  • 27
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值