最近学习Spring对mdb(消息驱动Bean)的支持,折腾了两个星期,总算搞定了。现将配置总结如下:
一.ejb部分。
mdb类:
packagecom.mdb.ejb;
importjavax.ejb.EJBException;
importjavax.ejb.MessageDrivenBean;
importjavax.ejb.MessageDrivenContext;
importjavax.jms.JMSException;
importjavax.jms.Message;
importjavax.jms.MessageListener;
importjavax.jms.TextMessage;
/***//**
*XDoclet-basedMessageDrivenentitybean.
*
*TogenerateEJBrelatedclassesusingXDoclet:-AddStandardEJBmoduleto
*XDocletprojectproperties-CustomizeXDocletconfiguration-RunXDoclet
*
*Belowarethexdoclet-relatedtagsneededforthisEJB.
*
*@ejb.beanname="Hello"display-name="NameforHello"description="Description
*forHello"destination-type="javax.jms.Queue"
*acknowledge-mode="Auto-acknowledge"
*@weblogic.poolmax-beans-in-free-pool="10"initial-beans-in-free-pool="2"
*@weblogic.message-drivendestination-jndi-name="ejb/Hello"
*initial-context-factory="weblogic.jndi.WLInitialContextFactory"
*connection-factory-jndi-name="helloConnectionFactory"
*/
publicclassHelloBeanimplementsMessageDrivenBean,MessageListener...{
privatestaticfinallongserialVersionUID=1L;
/***//**TheMessageDrivenContext*/
MessageDrivenContextcontext;
publicHelloBean()...{
super();
//TODOAuto-generatedconstructorstub
}
/***//**
*Settheassociatedcontext.Thecontainercallsthismethodafterthe
*instancecreation.<br>
*
*Theenterprisebeaninstanceshouldstorethereferencetothecontext
*objectinaninstancevariable.<br>
*
*Thismethodiscalledwithnotransactioncontext.
*
*@paramnewContext
*AMessageDrivenContextinterfacefortheinstance.
*
*@throwsEJBException
*Thrownbythemethodtoindicateafailurecausedbya
*system-levelerror.
*/
publicvoidsetMessageDrivenContext(MessageDrivenContextnewContext)
throwsEJBException...{
context=newContext;
}
publicvoidejbRemove()throwsEJBException...{
//TODOAuto-generatedmethodstub
}
publicvoidonMessage(MessagerecvMsg)...{
System.out.println("HelloBean接收到的消息:");
try...{
TextMessagemessage=(TextMessage)recvMsg;
System.out.println(message.getText());
}catch(JMSExceptione)...{
e.printStackTrace();
}
}
/***//**
*AnejbCreatemethodasrequiredbytheEJBspecification.
*
*Thecontainercallstheinstance?s<code>ejbCreate</code>method
*immediatelyafterinstantiation.
*
*@ejb.create-method
*/
publicvoidejbCreate()...{
}
}
ejb-jar.xml:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEejb-jarPUBLIC"-//SunMicrosystems,Inc.//DTDEnterpriseJavaBeans2.0//EN""http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar>
<description><![CDATA[NoDescription.]]></description>
<display-name>GeneratedbyXDoclet</display-name>
<enterprise-beans>
<!--
Toaddsessionbeansthatyouhavedeploymentdescriptorinfofor,add
afiletoyourXDocletmergedirectorycalledsession-beans.xmlthatcontains
the<session></session>markupforthosebeans.
-->
<!--EntityBeans-->
<!--
Toaddentitybeansthatyouhavedeploymentdescriptorinfofor,add
afiletoyourXDocletmergedirectorycalledentity-beans.xmlthatcontains
the<entity></entity>markupforthosebeans.
-->
<!--MessageDrivenBeans-->
<message-driven>
<description><![CDATA[DescriptionforHello]]></description>
<display-name>NameforHello</display-name>
<ejb-name>Hello</ejb-name>
<ejb-class>com.mdb.ejb.HelloBean</ejb-class>
<transaction-type>Container</transaction-type>
<acknowledge-mode>Auto-acknowledge</acknowledge-mode>
<message-driven-destination>
<destination-type>javax.jms.Queue</destination-type>
</message-driven-destination>
</message-driven>
<!--
Toaddmessagedrivenbeansthatyouhavedeploymentdescriptorinfofor,add
afiletoyourXDocletmergedirectorycalledmessage-driven-beans.xmlthatcontains
the<message-driven></message-driven>markupforthosebeans.
-->
</enterprise-beans>
<!--Relationships-->
<!--AssemblyDescriptor-->
<!--
Tospecifyyourownassemblydescriptorinfohere,addafiletoyour
XDocletmergedirectorycalledassembly-descriptor.xmlthatcontains
the<assembly-descriptor></assembly-descriptor>markup.
-->
<assembly-descriptor>
<!--
Tospecifyadditionalsecurity-roleelements,addafileinthemerge
directorycalledejb-security-roles.xmlthatcontainsthem.
-->
<!--methodpermissions-->
<!--
Tospecifyadditionalmethod-permissionelements,addafileinthemerge
directorycalledejb-method-permissions.entthatcontainsthem.
-->
<!--transactions-->
<!--
Tospecifyadditionalcontainer-transactionelements,addafileinthemerge
directorycalledejb-container-transactions.entthatcontainsthem.
-->
<!--findertransactions-->
<!--messagedestinations-->
<!--
Tospecifyadditionalmessage-destinationelements,addafileinthemerge
directorycalledejb-message-destinations.entthatcontainsthem.
-->
<!--excludelist-->
<!--
Tospecifyanexclude-listelement,addafileinthemergedirectory
calledejb-exclude-list.xmlthatcontainsit.
-->
</assembly-descriptor>
</ejb-jar>
weblogic-ejb-jar.xml:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEweblogic-ejb-jarPUBLIC"-//BEASystems,Inc.//DTDWebLogic8.1.0EJB//EN""http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd">
<weblogic-ejb-jar>
<description><![CDATA[GeneratedbyXDoclet]]></description>
<weblogic-enterprise-bean>
<ejb-name>Hello</ejb-name>
<message-driven-descriptor>
<pool>
<max-beans-in-free-pool>10</max-beans-in-free-pool>
<initial-beans-in-free-pool>2</initial-beans-in-free-pool>
</pool>
<destination-jndi-name>ejb/Hello</destination-jndi-name>
<initial-context-factory>weblogic.jndi.WLInitialContextFactory</initial-context-factory>
<connection-factory-jndi-name>helloConnectionFactory</connection-factory-jndi-name>
</message-driven-descriptor>
<reference-descriptor>
</reference-descriptor>
</weblogic-enterprise-bean>
<!--
Toaddenterprisebeansthatyouhavedeploymentdescriptorinfofor,add
afiletoyourXDocletmergedirectorycalledweblogic-enterprise-beans.xmlthatcontains
the<weblogic-enterprise-bean></weblogic-enterprise-bean>markupforthosebeans.
-->
<!--
Toaddasecurity-role-assignmentsection,add
afiletoyourXDocletmergedirectorycalledweblogic-security-role-assignment.xmlthatcontains
the<security-role-assignment></security-role-assignment>markup.
-->
<!--
Toaddarun-as-role-assignmentsection,add
afiletoyourXDocletmergedirectorycalledweblogic-run-as-role-assignment.xmlthatcontains
the<run-as-role-assignment></run-as-role-assignment>markup.
-->
</weblogic-ejb-jar>
打包ejb jar并发布。配置文件放在META-INF下。ejb jar 的结构如下:
测试代码:
publicclassEJBtest...{
privatefinalstaticStringNAMING_FACTORY="weblogic.jndi.WLInitialContextFactory";
//QueueConnectionFactory'sfactoryclass,valuealwaysisjavax.jms.QueueConnectionFactory
privatefinalstaticStringQCON_FACTORY="javax.jms.QueueConnectionFactory";
//MessageDrivenBean'sJNDI-Name
privatefinalstaticStringMESSAGE_QUEUE="ejb/Message";
publicstaticvoidmain(String[]args)...{
QueueConnectionqCon=null;
QueueSenderqSender=null;
QueueSessionqSession=null;
try...{
//CreateaJNDIinitialcontext
Propertiesprops=newProperties();
props.put(Context.INITIAL_CONTEXT_FACTORY,NAMING_FACTORY);
props.put(Context.PROVIDER_URL,"t3://localhost:7001");
InitialContextic=newInitialContext(props);
//LookupaConnectionFactoryinJNDI
QueueConnectionFactoryqCF=(QueueConnectionFactory)ic
.lookup(QCON_FACTORY);
//CreateaConnection
qCon=qCF.createQueueConnection();
//CreateaSession
qSession=qCon.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);
//LookuptheQueue
Queuequeue=(Queue)ic.lookup(MESSAGE_QUEUE);
//CreateaQueueSenderboundtotheQueue
qSender=qSession.createSender(queue);
//CreateaTextMessage
TextMessagemes=qSession.createTextMessage("HelloWorld!");
//StarttheQueue,sendthemessage
qCon.start();
for(inti=0;i<5;i++)...{
qSender.send(mes);
System.out.println("SendingHelloWorld-"+i
+"totheJMSQueue");
}
}catch(NamingExceptione)...{
System.out.println(e);
}catch(JMSExceptione)...{
e.printStackTrace();
}finally...{
//ReleaseallJMSresources
try...{
qCon.close();
qSender.close();
qSession.close();
}catch(JMSExceptionje)...{
System.out.println(je);
}
}
}
}
二。搭建spring web 项目环境,并配置applicationContext.xml如下:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<beanid="connectionFactory"
class="org.springframework.jndi.JndiObjectFactoryBean">
<propertyname="jndiName">
<value>helloConnectionFactory</value>
</property>
<propertyname="jndiTemplate">
<reflocal="jndiTemplate"></ref>
</property>
</bean>
<beanid="destination"
class="org.springframework.jndi.JndiObjectFactoryBean">
<propertyname="jndiName">
<value>ejb/Hello</value>
</property>
<propertyname="jndiTemplate">
<reflocal="jndiTemplate"></ref>
</property>
</bean>
<beanid="jmsTemplate"
class="org.springframework.jms.core.JmsTemplate">
<propertyname="connectionFactory">
<reflocal="connectionFactory"/>
</property>
<propertyname="defaultDestination">
<reflocal="destination"/>
</property>
</bean>
<beanid="jndiTemplate"
class="org.springframework.jndi.JndiTemplate">
<propertyname="environment">
<props>
<propkey="java.naming.factory.initial">
weblogic.jndi.WLInitialContextFactory
</prop>
<propkey="java.naming.provider.url">
t3://localhost:7001
</prop>
</props>
</property>
</bean>
</beans>
web.xml:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEweb-appPUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd">
<web-appid="WebApp_ID">
<display-name>p_spring</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
weblogic.xml:
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEweblogic-web-app
PUBLIC"-//BEASystems,Inc.//DTDWebApplication8.1//EN"
"http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">
<weblogic-web-app>
<jsp-descriptor>
<jsp-param>
<param-name>compileFlags</param-name>
<param-value>-g</param-value>
</jsp-param>
<jsp-param>
<param-name>keepgenerated</param-name>
<param-value>true</param-value>
</jsp-param>
</jsp-descriptor>
<context-root>p_spring</context-root>
</weblogic-web-app>
编写spring调用ejb的测试类:
packagecom.mdb.ejb;
importjavax.jms.JMSException;
importjavax.jms.Message;
importjavax.jms.Session;
importorg.apache.commons.logging.Log;
importorg.apache.commons.logging.LogFactory;
importorg.springframework.beans.factory.BeanFactory;
importorg.springframework.beans.factory.xml.XmlBeanFactory;
importorg.springframework.core.io.ClassPathResource;
importorg.springframework.core.io.Resource;
importorg.springframework.jms.core.JmsTemplate;
importorg.springframework.jms.core.MessageCreator;
/***//**
*HelloBeanClient,用于发送消息。
*/
publicclassHelloBeanClient...{
protectedstaticfinalLoglog=LogFactory.getLog(HelloBeanClient.class);
publicstaticvoidmain(String[]args)...{
Resourceresource=newClassPathResource("applicationContext.xml");
BeanFactoryfactory=newXmlBeanFactory(resource);
JmsTemplatejt=(JmsTemplate)factory.getBean("jmsTemplate");
try...{
for(inti=0;i<5;++i)...{
jt.send(newMessageCreator()...{
publicMessagecreateMessage(Sessionsession)
throwsJMSException...{
returnsession
.createTextMessage("HelloWorld(MDB),ejb/Hello!,"
+System.currentTimeMillis());
}
});
}
}catch(Exceptione)...{
e.printStackTrace();
}
log.info("成功发送消息!");
}
}
至此编码工作全部完成,整个项目的结构如下图:
三。在weblogic控制台
配置JMS 文件存储:
配置JMS 服务器:
配置JMS 队列:
配置JMS 连接工厂:
四。运行测试代码,运行结果如下:
分享到:
相关推荐
MYECLIPSE + STRUTS2 + SPRING4 + HIBERNATE4 + STRUCTS2S+OGNL + MYSQL_5.7.12
搭建Eclipse3.2.2+MyEclipse5.5+Tomcat+Weblogic
myeclipse+springmvc+spring+mybatis案例附带mysql数据库
在myeclipse中配置weblogic8.1详细说明
Weblogic 8.1的安装与配置.doc,我自己整理的,可用。
ssh框架实例(MyEclipse+struts+spring+hibernate整合) 一个小小的登陆工程 初学者这个实例最恰当不过了,里面包含了建立工程的过程 步骤,源工程,
基于网站开发工具MyEclipse+ MySQL的新闻发布系统.pdf基于网站开发工具MyEclipse+ MySQL的新闻发布系统.pdf基于网站开发工具MyEclipse+ MySQL的新闻发布系统.pdf基于网站开发工具MyEclipse+ MySQL的新闻发布系统.pdf...
MyEclipse6.0下配置Weblogic8.1的详细说明
WebLogic 8.1 + MySQL + MyEclipse数据源的配置.doc,可行参考。
简单demo,myeclipse+spring+websocket+sockjs(非maven项目),解压部署就能用,jdk1.7,tomcat7.0或者以上
MyEclipse+Tomcat+MySQL的环境搭建.txt
MyEclipse + WebLogic 9.2 配置详解,MyEclipse + WebLogic 9.2 配置详解
bbs.rar 网络论坛系统 很好的学习资料,大家一起学习看看如何了。。。MyEclipse+Tomcat+MySQL
参考前文:Java+MyEclipse+Tomcat (一)配置过程及jsp网站开发入门Java+MyEclipse+Tomcat (二)配置Servlet及简
JDK+MyEclipse+Tomcat的配置
Myeclipse+tomcat+mysql配置.docx
Java+MyEclipse+MySQL+JBOSS环境配置
Weblogic 8.1 + MyEclipse的配置及其Java Web应用的部署和测试.doc。介绍很详细
MYECLIPSE+SQL添加学生信息系统
一个简单的网上购物系统,采用JSP+Myeclipse+Sqlserver2000技术。