设为首页 收藏本站
查看: 660|回复: 0

[经验分享] 关于applicationContext.xml装载weblogic workmanager的问题

[复制链接]

尚未签到

发表于 2017-2-17 11:52:18 | 显示全部楼层 |阅读模式
  Spring ApplicationContext装载的问题在网上已经讨论过很多,分析也很详细了。前两天在配置Weblogic WorkManager的时候,发现了一个特别的问题,花了好半天才解决。 DSC0000.gif
  具体场景如下:
  1。 一个package中包含了两个ejb文件(work1.ejb.jar, work2.ejb.jar)和一个war文件(work.war)。
  2。 work1.ejb.jar和work.war需要用同一个workmanager。这个workmanager定义在work1.ejb.jar的weblogic-ejb-jar.xml里。

<work-manager>
<name>wm/Parallel_WorkManager</name>
<min-threads-constraint>
<name>parallel_minthreads</name>
<count>1</count>
</min-threads-constraint>
<max-threads-constraint>
<name>parallel_maxthreads</name>
<count>100</count>
</max-threads-constraint>
</work-manager>
  3。 在work1.ejb.jar对workManager的引用有如下两种方式:
  【applicationContext.xml中引用】

    <bean id="producerInnerImpl" class="eventnotification.producer.ProducerInnerImpl">
<constructor-arg index="0">
<ref bean="workManager" />
</constructor-arg>
</bean>
<bean id="workManager" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/wm/EventNotifiactionWorkManager</value>
</property>
</bean>
  【程序中直接调用】

   InitialContext ic = new InitialContext();
WorkManager wm = (WorkManager)ic.lookup("java:comp/env/wm/Parallel_WorkManager");

  4。 在work.war中,也需要使用上述的workmanager,于是在war的applicationContext.xml中做了同样的定义:

    <bean id="producerInnerImpl" class="eventnotification.producer.ProducerInnerImpl">
<constructor-arg index="0">
<ref bean="workManager" />
</constructor-arg>
</bean>
<bean id="workManager" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/wm/EventNotifiactionWorkManager</value>
</property>
</bean>
  因为在applicationContext里设置了default-lazy-init="true",所以安装的时候,没有任何问题,但是到了真正运行时, work.war就找不到workmanger了。
  找了半天原因, 终于发现问题就在war的applicationContext.xml里,java:comp/env/wm/Parallel_WorkManager是基于上下文的引用,因此war通过java:comp/env/wm/Parallel_WorkManager的方式,访问不到ejb里的resource (workmanage)。
  解决办法:让war直接访问ejb的applicationContext.xml所创建的bean。
  ejb的applicationContext.xml的配置不变,beanRefFactory.xml的定义如下 (放在META-INF目录之外)

   <bean id="spring.ejbContext"
class="org.springframework.context.support.ClassPathXmlApplicationContext">
<constructor-arg>
<list>
<value>/applicationContext.xml</value>
</list>
</constructor-arg>
</bean>

  war的applicationContext.xml里不配置workmanager,直接用work1.ejb.jar里的bean,将war的applicationContext.xml改名成webApplicationContext.xml,和beanRefFactory.xml一起放在WEB-INF/classes里(注意不放在WEB-INF),beanRefFactory.xml的定义如下

   <bean id="web" lazy-init="true"
class="org.springframework.context.support.ClassPathXmlApplicationContext">
<constructor-arg>
<list>
<value>webApplicationContext.xml</value>
</list>
</constructor-arg>
<!-- if we want to combine with the application context in the ejb layer as the parent context.-->
<constructor-arg>
<ref bean="spring.ejbContext"/>
</constructor-arg>
</bean>
  war里的spring容器访问不需要直接访问workmanager,只需要通过ejb的spring context就可以获取到workmanager的bean了。
  几个需要注意的问题:
  1。war的applicationContext.xml和beanRefFacotry.xml的存放地点。
  2。定义beanRefFacotry.xml,让war的直接使用ejb的bean。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-343462-1-1.html 上篇帖子: 03_Java通信_JNDI_demo2远程调用weblogic的数据源 下篇帖子: Weblogic中关于缓存和钝化有状态会话EJB
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表