`
taojingrui
  • 浏览: 67558 次
  • 来自: ...
社区版块
存档分类
最新评论

关于applicationContext.xml装载weblogic workmanager的问题

阅读更多

Spring ApplicationContext装载的问题在网上已经讨论过很多,分析也很详细了。前两天在配置Weblogic WorkManager的时候,发现了一个特别的问题,花了好半天才解决。

 

具体场景如下:

 

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。

分享到:
评论

相关推荐

    applicationContext.xml 详细配置

    ApplicationContext.xml 配置详解 ApplicationContext.xml 是 Spring 框架中用于配置应用程序的核心配置文件。通过该文件,可以定义 Bean、数据源、Session 工厂、 Hibernate 配置等相关信息,从而实现应用程序的...

    applicationContext.xml

    Spring applicationContext.xml常见部分属性的使用备注

    struts.xml和applicationContext.xml、web.xml的配置

    在Java Web开发中,`struts.xml`, `applicationContext.xml` 和 `web.xml` 是三个至关重要的配置文件,它们各自负责不同的职责,并协同工作来构建一个完整的应用框架。以下是关于这三个配置文件的详细说明。 首先,...

    applicationContext.xml详解

    ApplicationContext.xml详解 ApplicationContext.xml是Spring框架中的核心配置文件,它是Spring的IOC(Inverse of Control,控制反转)容器的核心组件。该文件用于定义和配置Spring应用程序中的各种Bean,对于...

    ssm applicationContext.xml,SpringMVC,web设置

    这是一些配置文件,可以作为参考,个人感觉很方便的学习方法

    applicationContext.xml等文件.rar

    在IT行业中,尤其是在Java Web开发领域,`applicationContext.xml`、`db.properties`、`log4j.properties`以及`spring-mvc.xml`等文件是非常关键的配置文件,它们各自负责不同的功能,对于一个完整的应用程序来说不...

    ApplicationContext.xml

    《ApplicationContext.xml——Spring框架的核心配置文件详解》 在Java开发领域,Spring框架是不可或缺的一部分,它以其强大的依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented ...

    spring3.0 + Quartz1.52 + applicationContext.xml

    这个压缩包“spring3.0 + Quartz1.52 + applicationContext.xml”显然是一个关于如何在Spring 3.0环境中集成Quartz 1.52版本的示例或教程资源。 首先,`applicationContext.xml`是Spring框架的核心配置文件,它定义...

    SSH框架applicationContext.xml头部文件

    ### SSH框架applicationContext.xml头部文件知识点解析 #### 一、SSH框架简介 SSH框架是Struts+Spring+Hibernate三个开源框架的组合,是中国开发者对这三个框架整合应用的一种简称。其中Struts负责MVC(Model-View-...

    Spring 2.5-applicationContext.xml提示信息的配置

    在Spring框架中,`applicationContext.xml`是应用上下文的核心配置文件,用于定义bean的创建、依赖关系以及各种服务的配置。这篇博文“Spring 2.5 - applicationContext.xml提示信息的配置”主要探讨了如何在Spring ...

    SSH中applicationContext.xml如何配制事务

    在SSH的applicationContext.xml 中如何配制配制事务

    applicationContext.xml用法

    ### Spring的applicationContext.xml文件详解 #### 一、引言 在Java开发领域,Spring框架因其强大的功能和灵活的设计而受到广泛欢迎。其中,`applicationContext.xml`是Spring框架的核心配置文件之一,它用于管理...

    spring+jpa的applicationContext.xml配置

    spring+jpa的applicationContext.xml配置

    ssm框架基础配置文件web.xml模板springmvc.xml模板applicationContext.xml模板拿来即用

    3. **applicationContext.xml**:这是Spring的上下文配置文件,主要管理服务层(Service)和数据访问层(DAO)的Bean。包括Bean的定义、依赖注入(DI)、事务管理、AOP(面向切面编程)等配置。 - Bean定义:使用`...

Global site tag (gtag.js) - Google Analytics