http://ybzshizds.iteye.com/blog/313342
默認的作法: ? jboss.xml中這樣配置 ?
Java代碼 ?
?????<?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> ?? ?? ????
<?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, adda file to your XDoclet merge directory called jboss-beans.xml that containsthe <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代碼 ?
?????<?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> ?? ?? ????
<?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代碼 ?
?????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); ?? ????}?? ?? ?? } ?? ?? ?? ????
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;@Overrideprotected 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代碼 ?
?????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); ?? ????} ?? } ?? ?? ????
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;@Overrideprotected 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);}
}
? 出現(xiàn)的問題: ? 每調(diào)用一個EJB Bean的時候,都會讓spring的容器初始化一次,這無疑是一種資源浪費,因為 ? spring的配置文件,applicationContext.xml只需加載一次就可以了 ? 為了尋求解決的辦法,找了一些資料,查看了一下源碼 ? 最后解決方案如下: ? 新建MyAbstractStatelessSessionBean.java繼承自AbstractStatelessSessionBean ? setBeanFactoryLocatorKey()和setBeanFactoryLocator(),改變??? AbstractStatelessSessionBean.java的默認行為 ?
Java代碼 ?
??????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); ?? ????} ?? ???? ?? } ?? ?? ????
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代碼 ?
?<?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>??
<?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的问题 的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔 推薦給好友。