spring和ejb2.x集成共享applicationContext.xml的问题

11 篇文章 0 订阅

http://ybzshizds.iteye.com/blog/313342

默认的作法:
  jboss.xml中这样配置
 

Java代码 复制代码  收藏代码
  1.      <?xml version="1.0" encoding="UTF-8"?>   
  2. <!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.0//EN" "http://www.jboss.org/j2ee/dtd/jboss_3_0.dtd">   
  3.   
  4. <jboss>   
  5.   
  6.    <enterprise-beans>   
  7.   
  8.      <!--   
  9.        To add beans that you have deployment descriptor info for, add   
  10.        a file to your XDoclet merge directory called jboss-beans.xml that contains   
  11.        the <session></session>, <entity></entity> and <message-driven></message-driven>   
  12.        markup for those beans.   
  13.      -->   
  14.   
  15.       <session>   
  16.          <ejb-name>TrainArticle</ejb-name>   
  17.          <jndi-name>ejb/TrainArticle</jndi-name>   
  18.       </session>   
  19.          
  20.       <session>   
  21.          <ejb-name>TrainOrganInfo</ejb-name>   
  22.          <jndi-name>ejb/TrainOrganInfo</jndi-name>   
  23.       </session>   
  24.   
  25.     <!--   
  26.       write a merge file jboss-webservices.ent for webservice-description    
  27.     -->   
  28.   
  29.    </enterprise-beans>   
  30.   
  31.    <resource-managers>   
  32.    </resource-managers>   
  33.   
  34.   <!--   
  35.     | for container settings, you can merge in jboss-container.xml   
  36.     | this can contain <invoker-proxy-bindings/> and <container-configurations/>   
  37.   -->   
  38.   
  39. </jboss>   
  40.   
  41.     
     <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.0//EN" "http://www.jboss.org/j2ee/dtd/jboss_3_0.dtd">

<jboss>

   <enterprise-beans>

     <!--
       To add beans that you have deployment descriptor info for, add
       a file to your XDoclet merge directory called jboss-beans.xml that contains
       the <session></session>, <entity></entity> and <message-driven></message-driven>
       markup for those beans.
     -->

      <session>
         <ejb-name>TrainArticle</ejb-name>
         <jndi-name>ejb/TrainArticle</jndi-name>
      </session>
      
      <session>
         <ejb-name>TrainOrganInfo</ejb-name>
         <jndi-name>ejb/TrainOrganInfo</jndi-name>
      </session>

    <!--
      write a merge file jboss-webservices.ent for webservice-description 
    -->

   </enterprise-beans>

   <resource-managers>
   </resource-managers>

  <!--
    | for container settings, you can merge in jboss-container.xml
    | this can contain <invoker-proxy-bindings/> and <container-configurations/>
  -->

</jboss>

  


  在ejb.jar.xml中这样配置
 

Java代码 复制代码  收藏代码
  1.      <?xml version="1.0" encoding="UTF-8"?>   
  2.   
  3. <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">   
  4.   
  5. <ejb-jar >   
  6.   
  7.    <description><![CDATA[No Description.]]></description>   
  8.    <display-name>Generated by XDoclet</display-name>   
  9.   
  10.    <enterprise-beans>   
  11.   
  12.       <!-- Session Beans -->   
  13.       <session >   
  14.          <description><![CDATA[Description for TrainArticle]]></description>   
  15.          <display-name>Train Article Handler Bean</display-name>   
  16.   
  17.          <ejb-name>TrainArticle</ejb-name>   
  18.   
  19.          <home>com.train.search.ejb.TrainArticleHome</home>   
  20.          <remote>com.train.search.ejb.TrainArticle</remote>   
  21.          <ejb-class>com.train.search.ejb.TrainArticleBean</ejb-class>   
  22.          <session-type>Stateless</session-type>   
  23.          <transaction-type>Container</transaction-type>   
  24.             
  25.          <env-entry>   
  26.             <env-entry-name>ejb/BeanFactoryPath</env-entry-name>   
  27.             <env-entry-type>java.lang.String</env-entry-type>   
  28.             <env-entry-value>applicationContext.xml</env-entry-value>   
  29.          </env-entry>   
  30.       </session>   
  31.          
  32.       <session >   
  33.          <description><![CDATA[Description for TrainOrganInfo]]></description>   
  34.          <display-name>Train OrganInfo Handler Bean</display-name>   
  35.   
  36.          <ejb-name>TrainOrganInfo</ejb-name>   
  37.   
  38.          <home>com.train.search.ejb.TrainOrganInfoHome</home>   
  39.          <remote>com.train.search.ejb.TrainOrganInfo</remote>   
  40.          <ejb-class>com.train.search.ejb.TrainOrganInfoBean</ejb-class>   
  41.          <session-type>Stateless</session-type>   
  42.          <transaction-type>Container</transaction-type>   
  43.             
  44.          <env-entry>   
  45.             <env-entry-name>ejb/BeanFactoryPath</env-entry-name>   
  46.             <env-entry-type>java.lang.String</env-entry-type>   
  47.             <env-entry-value>applicationContext.xml</env-entry-value>   
  48.          </env-entry>   
  49.       </session>     
  50.          
  51.     </enterprise-beans>   
  52.       
  53.    <assembly-descriptor >   
  54.    </assembly-descriptor>   
  55.   
  56. </ejb-jar>   
  57.   
  58.     
     <?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">

<ejb-jar >

   <description><![CDATA[No Description.]]></description>
   <display-name>Generated by XDoclet</display-name>

   <enterprise-beans>

      <!-- Session Beans -->
      <session >
         <description><![CDATA[Description for TrainArticle]]></description>
         <display-name>Train Article Handler Bean</display-name>

         <ejb-name>TrainArticle</ejb-name>

         <home>com.train.search.ejb.TrainArticleHome</home>
         <remote>com.train.search.ejb.TrainArticle</remote>
         <ejb-class>com.train.search.ejb.TrainArticleBean</ejb-class>
         <session-type>Stateless</session-type>
         <transaction-type>Container</transaction-type>
         
         <env-entry>
            <env-entry-name>ejb/BeanFactoryPath</env-entry-name>
            <env-entry-type>java.lang.String</env-entry-type>
            <env-entry-value>applicationContext.xml</env-entry-value>
         </env-entry>
      </session>
      
      <session >
         <description><![CDATA[Description for TrainOrganInfo]]></description>
         <display-name>Train OrganInfo Handler Bean</display-name>

         <ejb-name>TrainOrganInfo</ejb-name>

         <home>com.train.search.ejb.TrainOrganInfoHome</home>
         <remote>com.train.search.ejb.TrainOrganInfo</remote>
         <ejb-class>com.train.search.ejb.TrainOrganInfoBean</ejb-class>
         <session-type>Stateless</session-type>
         <transaction-type>Container</transaction-type>
         
         <env-entry>
            <env-entry-name>ejb/BeanFactoryPath</env-entry-name>
            <env-entry-type>java.lang.String</env-entry-type>
            <env-entry-value>applicationContext.xml</env-entry-value>
         </env-entry>
      </session>  
      
    </enterprise-beans>
   
   <assembly-descriptor >
   </assembly-descriptor>

</ejb-jar>

  


TrainArticleBean.java
 

Java代码 复制代码  收藏代码
  1.      package com.train.search.ejb;   
  2.   
  3.   
  4.   
  5. import java.rmi.RemoteException;   
  6. import java.util.List;   
  7. import javax.ejb.CreateException;   
  8. import com.train.compass.service.TraArticleService;   
  9. import com.train.search.ejb.vo.TraArticle;   
  10. import com.util.pagination.Page;   
  11.   
  12. public class TrainArticleBean extends AbstractStatelessSessionBean{   
  13.   
  14.     private static final long serialVersionUID = -8153415548838977604L;   
  15.     private TraArticleService traArticleService;   
  16.   
  17.     @Override  
  18.     protected void onEjbCreate() throws CreateException {   
  19.         if(traArticleService==null){   
  20.             traArticleService=(TraArticleService)getBeanFactory().getBean("traArticleService");   
  21.   
  22.         }   
  23.     }   
  24.   
  25.     public void updateArticle(TraArticle traArticle) throws RemoteException{   
  26.         traArticleService.updateArticle(traArticle);   
  27.     }   
  28.   
  29.     public int deleteArticles(final List articleIDs) throws RemoteException{   
  30.         return traArticleService.deleteArticles(articleIDs);   
  31.     }   
  32.   
  33.     public TraArticle loadByArticleID(int articleID) throws RemoteException{   
  34.         return traArticleService.loadByArticleID(articleID);   
  35.     }   
  36.   
  37.     public TraArticle storeArticle(TraArticle traArticle) throws RemoteException{   
  38.         return traArticleService.storeArticle(traArticle);   
  39.     }   
  40.   
  41.     public Page findByOrgnID( int orgnID, Page page) throws RemoteException{   
  42.         return traArticleService.findByOrgnID(orgnID, page);   
  43.     }   
  44.   
  45.     public Page search(Page page) throws RemoteException{   
  46.         return traArticleService.search(page);   
  47.     }   
  48.   
  49.     public TraArticle Query(int articleID) throws RemoteException{   
  50.         return traArticleService.Query(articleID);   
  51.     }   
  52.   
  53.     public boolean insert(TraArticle[] ta) throws RemoteException{   
  54.         return traArticleService.insert(ta);   
  55.     }   
  56.   
  57.     public List getAllArticles(int orgnIDBegin,int orgnIDEnd) throws RemoteException{   
  58.         return traArticleService.getAllArticles(orgnIDBegin, orgnIDEnd);   
  59.     }   
  60.   
  61.     public int getAllArticleCount(int orgnID) throws RemoteException{   
  62.         return traArticleService.getAllArticleCount(orgnID);   
  63.     }     
  64.   
  65. }   
  66.   
  67.   
  68.     
     package com.train.search.ejb;



import java.rmi.RemoteException;
import java.util.List;
import javax.ejb.CreateException;
import com.train.compass.service.TraArticleService;
import com.train.search.ejb.vo.TraArticle;
import com.util.pagination.Page;

public class TrainArticleBean extends AbstractStatelessSessionBean{

	private static final long serialVersionUID = -8153415548838977604L;
	private TraArticleService traArticleService;

	@Override
	protected void onEjbCreate() throws CreateException {
		if(traArticleService==null){
			traArticleService=(TraArticleService)getBeanFactory().getBean("traArticleService");

		}
	}

	public void updateArticle(TraArticle traArticle) throws RemoteException{
		traArticleService.updateArticle(traArticle);
	}

    public int deleteArticles(final List articleIDs) throws RemoteException{
    	return traArticleService.deleteArticles(articleIDs);
    }

    public TraArticle loadByArticleID(int articleID) throws RemoteException{
    	return traArticleService.loadByArticleID(articleID);
    }

    public TraArticle storeArticle(TraArticle traArticle) throws RemoteException{
    	return traArticleService.storeArticle(traArticle);
    }

	public Page findByOrgnID( int orgnID, Page page) throws RemoteException{
		return traArticleService.findByOrgnID(orgnID, page);
	}

	public Page search(Page page) throws RemoteException{
		return traArticleService.search(page);
	}

	public TraArticle Query(int articleID) throws RemoteException{
		return traArticleService.Query(articleID);
	}

	public boolean insert(TraArticle[] ta) throws RemoteException{
		return traArticleService.insert(ta);
	}

	public List getAllArticles(int orgnIDBegin,int orgnIDEnd) throws RemoteException{
		return traArticleService.getAllArticles(orgnIDBegin, orgnIDEnd);
	}

	public int getAllArticleCount(int orgnID) throws RemoteException{
		return traArticleService.getAllArticleCount(orgnID);
	}  

}


  


  TrainOrganInfoBean.java
 

Java代码 复制代码  收藏代码
  1.      package com.train.search.ejb;   
  2.   
  3. import java.rmi.RemoteException;   
  4. import java.util.List;   
  5. import javax.ejb.CreateException;   
  6. import com.train.compass.service.TraOrganInfoService;   
  7. import com.train.search.ejb.vo.TraOrganInfo;   
  8. import com.util.pagination.Page;   
  9.   
  10. public class TrainOrganInfoBean extends AbstractStatelessSessionBean{   
  11.     private static final long serialVersionUID = -8153415548838977604L;   
  12.     private TraOrganInfoService traOrganInfoService;   
  13.   
  14.     @Override  
  15.     protected void onEjbCreate() throws CreateException {   
  16.         if(traOrganInfoService==null){   
  17.             traOrganInfoService=(TraOrganInfoService)getBeanFactory().getBean("traOrganInfoService");   
  18.   
  19.         }   
  20.     }   
  21.   
  22.     public TraOrganInfo getTraOrganInfoByID(Integer traID) throws RemoteException{   
  23.         return traOrganInfoService.getTraOrganInfoByID(traID);   
  24.     }   
  25.   
  26.     public void updateTraOrganInfo(TraOrganInfo traOrganInfo) throws RemoteException{   
  27.         traOrganInfoService.updateTraOrganInfo(traOrganInfo);   
  28.     }   
  29.   
  30.     public TraOrganInfo findTraOrganInfoByName(String userName) throws RemoteException{   
  31.         return traOrganInfoService.findTraOrganInfoByName(userName);   
  32.     }   
  33.   
  34.     public TraOrganInfo storeTraOrganInfo(TraOrganInfo traOrganInfo) throws RemoteException{   
  35.         return traOrganInfoService.storeTraOrganInfo(traOrganInfo);   
  36.     }   
  37.   
  38.     public boolean updatePassword(Integer traID,String password) throws RemoteException{   
  39.         return traOrganInfoService.updatePassword(traID, password);   
  40.     }   
  41.   
  42.   
  43.     public Page search(Page page) throws RemoteException{   
  44.         return traOrganInfoService.search(page);   
  45.     }   
  46.   
  47.     public TraOrganInfo Query(int trainID) throws RemoteException{   
  48.         return traOrganInfoService.Query(trainID);   
  49.     }   
  50.   
  51.   
  52.     public boolean insert(TraOrganInfo[] to) throws RemoteException{   
  53.         return traOrganInfoService.insert(to);   
  54.     }   
  55.   
  56.   
  57.     public List getAllOrganInfos(int trainIDBegin, int trainIDEnd) throws RemoteException{   
  58.         return traOrganInfoService.getAllOrganInfos(trainIDBegin, trainIDEnd);   
  59.   
  60.     }   
  61.   
  62.     public void auditingOrganInfo(Integer traID, Short checkFlag) throws RemoteException{   
  63.         traOrganInfoService.auditingOrganInfo(traID, checkFlag);   
  64.     }   
  65. }   
  66.   
  67.     
     package com.train.search.ejb;

import java.rmi.RemoteException;
import java.util.List;
import javax.ejb.CreateException;
import com.train.compass.service.TraOrganInfoService;
import com.train.search.ejb.vo.TraOrganInfo;
import com.util.pagination.Page;

public class TrainOrganInfoBean extends AbstractStatelessSessionBean{
	private static final long serialVersionUID = -8153415548838977604L;
	private TraOrganInfoService traOrganInfoService;

	@Override
	protected void onEjbCreate() throws CreateException {
		if(traOrganInfoService==null){
			traOrganInfoService=(TraOrganInfoService)getBeanFactory().getBean("traOrganInfoService");

		}
	}

    public TraOrganInfo getTraOrganInfoByID(Integer traID) throws RemoteException{
    	return traOrganInfoService.getTraOrganInfoByID(traID);
    }

	public void updateTraOrganInfo(TraOrganInfo traOrganInfo) throws RemoteException{
		traOrganInfoService.updateTraOrganInfo(traOrganInfo);
	}

	public TraOrganInfo findTraOrganInfoByName(String userName) throws RemoteException{
		return traOrganInfoService.findTraOrganInfoByName(userName);
	}

	public TraOrganInfo storeTraOrganInfo(TraOrganInfo traOrganInfo) throws RemoteException{
		return traOrganInfoService.storeTraOrganInfo(traOrganInfo);
	}

	public boolean updatePassword(Integer traID,String password) throws RemoteException{
		return traOrganInfoService.updatePassword(traID, password);
	}


    public Page search(Page page) throws RemoteException{
    	return traOrganInfoService.search(page);
    }

	public TraOrganInfo Query(int trainID) throws RemoteException{
		return traOrganInfoService.Query(trainID);
	}


	public boolean insert(TraOrganInfo[] to) throws RemoteException{
		return traOrganInfoService.insert(to);
	}


	public List getAllOrganInfos(int trainIDBegin, int trainIDEnd) throws RemoteException{
		return traOrganInfoService.getAllOrganInfos(trainIDBegin, trainIDEnd);

	}

	public void auditingOrganInfo(Integer traID, Short checkFlag) throws RemoteException{
		traOrganInfoService.auditingOrganInfo(traID, checkFlag);
	}
}

  


  出现的问题:
  每调用一个EJB Bean的时候,都会让spring的容器初始化一次,这无疑是一种资源浪费,因为
  spring的配置文件,applicationContext.xml只需加载一次就可以了

  为了寻求解决的办法,找了一些资料,查看了一下源码
  最后解决方案如下:
  新建MyAbstractStatelessSessionBean.java继承自AbstractStatelessSessionBean
  setBeanFactoryLocatorKey()和setBeanFactoryLocator(),改变    AbstractStatelessSessionBean.java的默认行为
 

Java代码 复制代码  收藏代码
  1.       package com.train.search.ejb;   
  2.   
  3. import org.springframework.beans.factory.access.BeanFactoryLocator;   
  4. import org.springframework.beans.factory.access.SingletonBeanFactoryLocator;   
  5. import org.springframework.ejb.support.AbstractStatelessSessionBean;   
  6.   
  7. public abstract class MyAbstractStatelessSessionBean extends AbstractStatelessSessionBean {   
  8.   
  9.     private static final long serialVersionUID = 5192139144489442341L;   
  10.        
  11.     private BeanFactoryLocator beanFactoryLocator=SingletonBeanFactoryLocator.getInstance();   
  12.        
  13.     public MyAbstractStatelessSessionBean(){   
  14.         super();   
  15.         this.setBeanFactoryLocatorKey("global.spring.ejb.context");   
  16.         this.setBeanFactoryLocator(beanFactoryLocator);   
  17.     }   
  18.        
  19. }   
  20.   
  21.     
      package com.train.search.ejb;

import org.springframework.beans.factory.access.BeanFactoryLocator;
import org.springframework.beans.factory.access.SingletonBeanFactoryLocator;
import org.springframework.ejb.support.AbstractStatelessSessionBean;

public abstract class MyAbstractStatelessSessionBean extends AbstractStatelessSessionBean {

	private static final long serialVersionUID = 5192139144489442341L;
	
	private BeanFactoryLocator beanFactoryLocator=SingletonBeanFactoryLocator.getInstance();
	
	public MyAbstractStatelessSessionBean(){
		super();
		this.setBeanFactoryLocatorKey("global.spring.ejb.context");
		this.setBeanFactoryLocator(beanFactoryLocator);
	}
	
}

  


然后让TrainOrganInfoBean.java 和 TrainArticleBean.java都继承自MyAbstractStatelessSessionBean.java
加入beanRefFactory.xml文件

Java代码 复制代码  收藏代码
  1.  <?xml version="1.0" encoding="UTF-8"?>   
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">   
  3.   
  4. <!--   
  5.   - Application context definition for Petclinic on Hibernate.   
  6. -->   
  7. <beans>   
  8.      <bean id="global.spring.ejb.context" class="org.springframework.context.support.ClassPathXmlApplicationContext">   
  9.          <constructor-arg>   
  10.                   <list>   
  11.                       <value>META-INF/applicationContext.xml</value>   
  12.                   </list>   
  13.          </constructor-arg>   
  14.      </bean>   
  15. </beans>  
 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<!--
  - Application context definition for Petclinic on Hibernate.
-->
<beans>
	 <bean id="global.spring.ejb.context" class="org.springframework.context.support.ClassPathXmlApplicationContext">
	     <constructor-arg>
	              <list>
	                  <value>META-INF/applicationContext.xml</value>
	              </list>
	     </constructor-arg>
	 </bean>
</beans>


  这样Spring的applicationContext.xml配置文件就只需加载一次即可!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值