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. <jboss>
  4. <enterprise-beans>
  5. <!--
  6. To add beans that you have deployment descriptor info for, add
  7. a file to your XDoclet merge directory called jboss-beans.xml that contains
  8. the <session></session>, <entity></entity> and <message-driven></message-driven>
  9. markup for those beans.
  10. -->
  11. <session>
  12. <ejb-name>TrainArticle</ejb-name>
  13. <jndi-name>ejb/TrainArticle</jndi-name>
  14. </session>
  15. <session>
  16. <ejb-name>TrainOrganInfo</ejb-name>
  17. <jndi-name>ejb/TrainOrganInfo</jndi-name>
  18. </session>
  19. <!--
  20. write a merge file jboss-webservices.ent for webservice-description
  21. -->
  22. </enterprise-beans>
  23. <resource-managers>
  24. </resource-managers>
  25. <!--
  26. | for container settings, you can merge in jboss-container.xml
  27. | this can contain <invoker-proxy-bindings/> and <container-configurations/>
  28. -->
  29. </jboss>
     <?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. <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
  3. <ejb-jar >
  4. <description><![CDATA[No Description.]]></description>
  5. <display-name>Generated by XDoclet</display-name>
  6. <enterprise-beans>
  7. <!-- Session Beans -->
  8. <session >
  9. <description><![CDATA[Description for TrainArticle]]></description>
  10. <display-name>Train Article Handler Bean</display-name>
  11. <ejb-name>TrainArticle</ejb-name>
  12. <home>com.train.search.ejb.TrainArticleHome</home>
  13. <remote>com.train.search.ejb.TrainArticle</remote>
  14. <ejb-class>com.train.search.ejb.TrainArticleBean</ejb-class>
  15. <session-type>Stateless</session-type>
  16. <transaction-type>Container</transaction-type>
  17. <env-entry>
  18. <env-entry-name>ejb/BeanFactoryPath</env-entry-name>
  19. <env-entry-type>java.lang.String</env-entry-type>
  20. <env-entry-value>applicationContext.xml</env-entry-value>
  21. </env-entry>
  22. </session>
  23. <session >
  24. <description><![CDATA[Description for TrainOrganInfo]]></description>
  25. <display-name>Train OrganInfo Handler Bean</display-name>
  26. <ejb-name>TrainOrganInfo</ejb-name>
  27. <home>com.train.search.ejb.TrainOrganInfoHome</home>
  28. <remote>com.train.search.ejb.TrainOrganInfo</remote>
  29. <ejb-class>com.train.search.ejb.TrainOrganInfoBean</ejb-class>
  30. <session-type>Stateless</session-type>
  31. <transaction-type>Container</transaction-type>
  32. <env-entry>
  33. <env-entry-name>ejb/BeanFactoryPath</env-entry-name>
  34. <env-entry-type>java.lang.String</env-entry-type>
  35. <env-entry-value>applicationContext.xml</env-entry-value>
  36. </env-entry>
  37. </session>
  38. </enterprise-beans>
  39. <assembly-descriptor >
  40. </assembly-descriptor>
  41. </ejb-jar>
     <?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. import java.rmi.RemoteException;
  3. import java.util.List;
  4. import javax.ejb.CreateException;
  5. import com.train.compass.service.TraArticleService;
  6. import com.train.search.ejb.vo.TraArticle;
  7. import com.util.pagination.Page;
  8. public class TrainArticleBean extends AbstractStatelessSessionBean{
  9. private static final long serialVersionUID = -8153415548838977604L;
  10. private TraArticleService traArticleService;
  11. @Override
  12. protected void onEjbCreate() throws CreateException {
  13. if(traArticleService==null){
  14. traArticleService=(TraArticleService)getBeanFactory().getBean("traArticleService");
  15. }
  16. }
  17. public void updateArticle(TraArticle traArticle) throws RemoteException{
  18. traArticleService.updateArticle(traArticle);
  19. }
  20. public int deleteArticles(final List articleIDs) throws RemoteException{
  21. return traArticleService.deleteArticles(articleIDs);
  22. }
  23. public TraArticle loadByArticleID(int articleID) throws RemoteException{
  24. return traArticleService.loadByArticleID(articleID);
  25. }
  26. public TraArticle storeArticle(TraArticle traArticle) throws RemoteException{
  27. return traArticleService.storeArticle(traArticle);
  28. }
  29. public Page findByOrgnID( int orgnID, Page page) throws RemoteException{
  30. return traArticleService.findByOrgnID(orgnID, page);
  31. }
  32. public Page search(Page page) throws RemoteException{
  33. return traArticleService.search(page);
  34. }
  35. public TraArticle Query(int articleID) throws RemoteException{
  36. return traArticleService.Query(articleID);
  37. }
  38. public boolean insert(TraArticle[] ta) throws RemoteException{
  39. return traArticleService.insert(ta);
  40. }
  41. public List getAllArticles(int orgnIDBegin,int orgnIDEnd) throws RemoteException{
  42. return traArticleService.getAllArticles(orgnIDBegin, orgnIDEnd);
  43. }
  44. public int getAllArticleCount(int orgnID) throws RemoteException{
  45. return traArticleService.getAllArticleCount(orgnID);
  46. }
  47. }
     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. import java.rmi.RemoteException;
  3. import java.util.List;
  4. import javax.ejb.CreateException;
  5. import com.train.compass.service.TraOrganInfoService;
  6. import com.train.search.ejb.vo.TraOrganInfo;
  7. import com.util.pagination.Page;
  8. public class TrainOrganInfoBean extends AbstractStatelessSessionBean{
  9. private static final long serialVersionUID = -8153415548838977604L;
  10. private TraOrganInfoService traOrganInfoService;
  11. @Override
  12. protected void onEjbCreate() throws CreateException {
  13. if(traOrganInfoService==null){
  14. traOrganInfoService=(TraOrganInfoService)getBeanFactory().getBean("traOrganInfoService");
  15. }
  16. }
  17. public TraOrganInfo getTraOrganInfoByID(Integer traID) throws RemoteException{
  18. return traOrganInfoService.getTraOrganInfoByID(traID);
  19. }
  20. public void updateTraOrganInfo(TraOrganInfo traOrganInfo) throws RemoteException{
  21. traOrganInfoService.updateTraOrganInfo(traOrganInfo);
  22. }
  23. public TraOrganInfo findTraOrganInfoByName(String userName) throws RemoteException{
  24. return traOrganInfoService.findTraOrganInfoByName(userName);
  25. }
  26. public TraOrganInfo storeTraOrganInfo(TraOrganInfo traOrganInfo) throws RemoteException{
  27. return traOrganInfoService.storeTraOrganInfo(traOrganInfo);
  28. }
  29. public boolean updatePassword(Integer traID,String password) throws RemoteException{
  30. return traOrganInfoService.updatePassword(traID, password);
  31. }
  32. public Page search(Page page) throws RemoteException{
  33. return traOrganInfoService.search(page);
  34. }
  35. public TraOrganInfo Query(int trainID) throws RemoteException{
  36. return traOrganInfoService.Query(trainID);
  37. }
  38. public boolean insert(TraOrganInfo[] to) throws RemoteException{
  39. return traOrganInfoService.insert(to);
  40. }
  41. public List getAllOrganInfos(int trainIDBegin, int trainIDEnd) throws RemoteException{
  42. return traOrganInfoService.getAllOrganInfos(trainIDBegin, trainIDEnd);
  43. }
  44. public void auditingOrganInfo(Integer traID, Short checkFlag) throws RemoteException{
  45. traOrganInfoService.auditingOrganInfo(traID, checkFlag);
  46. }
  47. }
     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. import org.springframework.beans.factory.access.BeanFactoryLocator;
  3. import org.springframework.beans.factory.access.SingletonBeanFactoryLocator;
  4. import org.springframework.ejb.support.AbstractStatelessSessionBean;
  5. public abstract class MyAbstractStatelessSessionBean extends AbstractStatelessSessionBean {
  6. private static final long serialVersionUID = 5192139144489442341L;
  7. private BeanFactoryLocator beanFactoryLocator=SingletonBeanFactoryLocator.getInstance();
  8. public MyAbstractStatelessSessionBean(){
  9. super();
  10. this.setBeanFactoryLocatorKey("global.spring.ejb.context");
  11. this.setBeanFactoryLocator(beanFactoryLocator);
  12. }
  13. }
      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. - Application context definition for Petclinic on Hibernate.
  5. -->
  6. <beans>
  7. <bean id="global.spring.ejb.context" class="org.springframework.context.support.ClassPathXmlApplicationContext">
  8. <constructor-arg>
  9. <list>
  10. <value>META-INF/applicationContext.xml</value>
  11. </list>
  12. </constructor-arg>
  13. </bean>
  14. </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配置文件就只需加载一次即可!

spring和ejb2.x集成共享applicationContext.xml的问题相关推荐

  1. Spring学习总结(7)——applicationContext.xml 配置文详解

    web.xml中classpath:和classpath*:  有什么区别? classpath:只会到你的class路径中查找找文件; classpath*:不仅包含class路径,还包括jar文件 ...

  2. Spring整合了CXF的一个applicationContext.xml的配置文件

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  3. Spring的junit4测试集成

    Spring的junit测试集成 Spring提供spring-test-4.2.4.RELEASE.jar 可以整合junit. 优势:可以简化测试代码(不需要手动创建上下文,即手动创建spring ...

  4. IDEA创建applicationContext.xml文件图标不是xml文件图标

    开始是在初学spring的时候发现创建的applicationContext.xml文件图标异常,且不会有设置Configure application context的提示,如图所示 查阅资料后发现 ...

  5. spring框架里面applicationContext.xml 和spring-servlet.xml 的区别

    问题:spring框架里面applicationContext.xml 和spring-servlet.xml 的区别 在Spring框架中applicationContext.xml和Spring ...

  6. Spring 配置文件applicationContext.xml

    Spring配置文件是用于指导Spring工厂进行Bean生产.依赖关系注入(装配)及Bean实例分发的"图纸". Spring配置文件是一个或多个标准的XML文档,applica ...

  7. spring整合hibernate(注解、xml)applicationContext.xml配置

    每次ssh框架整合都很麻烦,今天有空余时间总结下(主要总结spring+hibernate): 1.注解方式整合: applicationContext.xml配置文件: <?xml versi ...

  8. spring 找不到applicationContext.xml解决方法

    初学Spring在用Resource rs=new ClassPathResource("applicationContext.xml");时老是遇到这个错误.后来发现用 Appl ...

  9. Spring配置文件applicationContext.xml的两种拆分方式

    第一种: 通过web.xml配置加载spring上下文环境,其配置方式如下: web.xml [xhtml] view plain copy <context-param> <par ...

最新文章

  1. Python中的super()函数
  2. torch tensor用法
  3. spring中resource设计与实现
  4. oracle hyperion招聘,Hyperion Planning功能顾问
  5. scrum in agile development
  6. C++ 基础知识!初学者必看!
  7. jsp页面将数据导出到Excel
  8. redis映射的概念_Redis存储总是心里没底?你大概漏了这些数据结构原理
  9. NodeJS链接MongDB
  10. android手机冻屏问题,android 模拟冻屏 代码实现
  11. 回溯算法解迷宫问题(java版)
  12. 基于springboot的科技馆设备巡检系统
  13. 高频感应加热电源驱动电路设计方案
  14. python能做什么工作知乎-python能做什么知乎
  15. Zabbix监控网站
  16. AutoCAD 2006/2007等在高版本系统上无法安装
  17. Hibernate 列映射 – 解决其他类型映射命名冲突
  18. 微信小程序分页加载列表
  19. 如何解决Kettle读取txt文件时出现的中文乱码问题?
  20. docker logs

热门文章

  1. 【数据结构与算法】之深入解析“字符串相乘”的求解思路与算法示例
  2. 2014/School_C_C++_A/3/x的x次幂
  3. The 3n + 1 problem UVA - 100
  4. 华农计算机科学宿舍在哪个区,新生指南Ⅵ | 住在华农·看看我们第二个家
  5. python panda apply_python – Pandas – 关于apply函数缓慢的解释
  6. 专科 java转go 翱翔之路(四)协议通信 锁,互斥锁 读写锁 条件变量锁 连接mysql 查询
  7. deamon守护进程
  8. POJ 1064 Cable master (二分答案,G++不过,C++就过了)
  9. 每天一道LeetCode-----计算二叉树的最大路径和,路径只需要从一个节点到达另一个节点,无其他要求
  10. 关于计算机的使用方法中心,关于新校区行政楼和活动中心楼网络使用的说明