当前位置: 代码迷 >> Web前端 >> Spring JMS 调整Tomcat和Weblogic JMS
  详细解决方案

Spring JMS 调整Tomcat和Weblogic JMS

热度:389   发布时间:2012-09-22 21:54:54.0
Spring JMS 整合Tomcat和Weblogic JMS
本篇我们将继续使用上一篇日志的工程环境,只是MQ改用Weblogic JMS

1. Weblogic JMS配置

1.1.  JMS Server配置
1)????? 启动weblogic11g 管理控制台;
2)????? 在左窗格中选择”Services”―“Messaging”―“JMS Servers”;
3)????? 点击右窗格的”New”按钮;
4)????? 输入JMS Server的名称JMSServer-0,点击”Next”;



5)????? 将Target选择指向AdminServer,点击”Finish”;



1.2. JMS Modules配置
1)????? 在左窗格中选择”Services”―“Messaging”―“JMS Modules”;
2)????? 点击右窗格的”new”按钮;
3)????? 输入System Module的名称SystemModule-0,点击”Next”;



4)????? 将Servers表框中”AdminServer”前面的复选框选中,点击”Next”;



5)????? 选中” Would you like to add resources to this JMS system module?”,点击”Finish”;



1.3. JMS Subdeployments配置
1)????? 在左窗格中选择”Services”―“Messaging”―“JMS Modules”;
2)????? 点击右窗格的”SystemModule-0”,然后点击”Subdeployments”选项卡中的”New”按钮;
3)????? 输入Subdeployment 的名称Subdeployment-0,点击”Next”;



4)????? 选中JMS Servers中”JMSServer-0”,点击”Finish”.



1.4. JMS Connection Factory配置
1)????? 在左窗格中选择”Services”―“Messaging”―“JMS Modules”;
2)????? 点击右窗格的” SystemModule-0””,然后点击”New”按钮;
3)????? 选择”Connection Factory”,点击”Next”;



4)????? 输入”Connection Factory”的名称ConnectionFactory-0和”JNDI”的名称weblogic.jms.ConnectionFactory0,点击”Next”;



5)????? 点击”Advanced Targeting”,将”Subdeployment”下拉选中Subdeployment-0;

6)????? 选中”JMS Servers”框中JMSServer-0,点击”Finish”;



1.5. JMS Queue配置
1)????? 在左窗格中选择”Services”―“Messaging”―“JMS Modules”;
2)????? 点击右窗格的” SystemModule-0””,然后点击”New”按钮;
3)????? 选择”Queue”,点击”Next”;



4)????? 输入” Queue”的名称Queue -0和”JNDI”的名称weblogic.jms.Queue0,点击”Next”;



5)????? 将”Subdeployment”下拉选中Subdeployment-0,点击”Finish”;




2.写Spring的配置文件,假设存在这个文件里:jms-weblogic.xml
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean id="weblogicJms" class="org.springframework.jndi.JndiTemplate">
        <property name="environment">
            <props>
                <prop key="java.naming.factory.initial">
                    weblogic.jndi.WLInitialContextFactory 
                </prop>
                <prop key="java.naming.provider.url">
                    t3://localhost:7001
                </prop>
                <prop key="java.naming.factory.url.pkgs">
                    weblogic.jndi.factories
                </prop>
				<prop key="java.naming.security.principal">
				    weblogic
				</prop>
				<prop key="java.naming.security.credentials">
				    weblogic11
				</prop>
            </props>
        </property>
    </bean>
    
    <!-- Connection factory -->
    <bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="weblogic.jms.ConnectionFactory0" />
        <property name="jndiTemplate" ref="weblogicJms"/>
    </bean>
    
    <!-- Queue -->
    <bean id="jmsQueue" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="weblogic.jms.Queue0" />
        <property name="jndiTemplate" ref="weblogicJms"/>
    </bean>
    
    <!-- Receiver -->
    <bean id="jmsReceiver" class="com.xp.MessageQueueReceiver">
    </bean>
    
    <!-- Message Listener -->
    <bean id="listenerContainer"
        class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="jmsConnectionFactory"/>
        <property name="destination" ref="jmsQueue"/>
        <property name="messageListener" ref="jmsReceiver"/>
        <property name="autoStartup" value="true"/>
    </bean>
    
    <!-- Spring JMS Template -->
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate" lazy-init="true">
        <property name="connectionFactory" ref="jmsConnectionFactory" />
        <property name="defaultDestination" ref="jmsQueue" /> 
   </bean>
    
    <!-- Sender -->
    <bean id="jmsSender" class="com.xp.MessageQueueSender"
        lazy-init="true">
        <property name="jmsTemplate" ref="jmsTemplate"></property>
    </bean>
    
</beans>


其中java.naming.security.principal和java.naming.security.credentials是weblogic的用户名和密码
另外注释掉上一篇日志里用的jms-activemq.xml
可以发现,采用SpringJMS以后,从ActiveMQ切换到WeblogicJMS是多么的灵活,代码都不用改,就改一个配置文件

3.我们想通过Tomcat来访问WeblogicJMS,于是要导入以下Jar包,
wlclient.jar(可从C:\oracle\Middleware\wlserver_10.3\server\lib下找到并复制出来)

4.启动tomcat,发现出错了
java.security.AccessControlException: access denied (javax.management.MBeanTrustPermission register)

5.上网搜索找到解决问题的临时方法,修改%JAVA_HOME%\jre\lib\security下的java.policy
最后加一行
permission javax.management.MBeanTrustPermission "register";

6. 再次启动tomcat,没问题了。按照上一篇日志的测试方法,测试通过。

还可以在Weblogic管理台监控消息
1)????? 在左窗格中选择”Services”―“Messaging”―“JMS Modules”;
2)????? 点击右窗格的” SystemModule-0””,然后点击”Queue-0”;
3)????? 点击"Monitoring"选项卡
4)?????勾选SystemModule-0!Queue-0,点击Show messages



5)????? 点击New,随便输入信息,按OK



可在控制台看到接受者能收到此消息