javajohn

金色年华

tomcat下应用JMS

         jms做为J2EE的高级部分一直蒙着一层神秘的面纱,作为JMS的定制者SUN只规定了JMS规范,象很多其他SUN产品一样被多家厂商提供了具体的实现。但是作为tomcat和RESIN(今年初宣布全部支持J2EE规范)。这些面向低端但却被广泛应用的服务器本身并不对JMS提供支持。庆幸的是openjms和activeMQ两家开源软件提供了插件式的支持。
        在应用了一些开发框架如spring的项目里如果要使用到JMS,虽然SPRING提供了部分对JMS的支持但经过我一段时间的应用发现,OO的封装在某些地方反而成为开发过程中的障碍。在实现诸如监听之类的代码段里使人非常的懊恼,即使用callback(回调)有些东西仍然不能够很好的被取到。
        下面就一些TOMCAT上面JMS的支持既实现做一下整理。
1.很自然的你需要下载JMS实现,如:opnerJMS或者activeMQ .下载地址www.jmsopen.comwww.activeMQ.com
2.服务器下载以后的具体配置在以上两个网站上都有很详细的说明,就不再列举了。
3。和WEB服务器的整合
         首先要配置应用的web.xml这个文件配置如下:

1    < context-param >
2      < param-name > brokerURI </ param-name >
3      < param-value > /WEB-INF/activemq.xml </ param-value >
4    </ context-param >
5
6    < listener >
7      < listener-class > org.activemq.web.SpringBrokerContextListener </ listener-class >
8    </ listener >
将这一段代码放到web.xml里。注意到activemq.xml文件,是jms服务器的具体配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC  "-//ACTIVEMQ//DTD//EN" "http://activemq.org/dtd/activemq.dtd">
<beans>

  
<!-- ==================================================================== -->
  
<!-- ActiveMQ Broker Configuration -->
  
<!-- ==================================================================== -->
  
<broker>
    
<connector>
      
<tcpServerTransport uri="tcp://localhost:61616" useAsyncSend="true" maxOutstandingMessages="50"/>
    
</connector>

    
<!-- to enable Stomp support uncomment this
    <connector>
      <serverTransport uri="stomp://localhost:61626"/>
    </connector>
    
-->

    
<persistence>
          
<jdbcPersistence dataSourceRef="oracle-ds"/>
    
</persistence>
  
</broker>

  
<!-- ==================================================================== -->
  
<!-- JDBC DataSource Configurations -->
  
<!-- ==================================================================== -->

  
<!-- The Derby Datasource that will be used by the Broker -->
  
<bean id="oracle-ds" class="[oracle驱动]" destroy-method="close">
    
<property name="driverClassName">
      
<value>org.apache.derby.jdbc.EmbeddedDriver</value>
    
</property>
    
<property name="url">
      
<!-- Use a URL like 'jdbc:hsqldb:hsql://localhost:9001' if you want to connect to a remote hsqldb -->
      
<value>jdbc:derby:derbydb;create=true</value>
    
</property>
    
<property name="username">
      
<value></value>
    
</property>
    
<property name="password">
      
<value></value>
    
</property>
    
<property name="poolPreparedStatements">
      
<value>true</value>
    
</property>
  
</bean>
</beans>

此时,在启动你的TOMCAT的时候会看到JMS服务器已经绑到了上面。(待续)

posted on 2005-12-08 18:41 javajohn 阅读(16996) 评论(20)  编辑  收藏 所属分类: 短信开发

Feedback

# re: tomcat下应用JMS 2005-12-19 09:38 jackey

楼主,麻烦把具体的配置写详细,或者把文档发到我的邮箱,急用.
还有openjms的还有没别的网站下载,上面的我打不开.
我的邮箱:feitianshu1983@21cn.com  回复  更多评论   

# re: tomcat下应用JMS 2005-12-19 13:13 javajohn

以上的两个网地址:
http://activemq.codehaus.org/ 是activeMQ的
http://openjms.sourceforge.net/ 是openjms的
配置的时候注意
<persistence>
<jdbcPersistence dataSourceRef="oracle-ds"/>
</persistence>
这段dataSourceRef的值是你下面配置的数据库连接的名称,比如我的配置是oracle-ds,在下面就做了oracle的连接信息,在下载了activeMQ以后在它的配置文件里有对mysql的例子。  回复  更多评论   

# re: tomcat下应用JMS 2006-01-10 15:36

我现在正在做TOMCAT+SPRING+ACTIVEMQ的JMS呢,好头痛,总是出现各种各样的问题,好想请教你一下呀,我的QQ是25009993,MSN是tdhwxz@hotmail.com,希望加我啊!很紧急呢!谢谢先  回复  更多评论   

# re: tomcat下应用JMS 2006-02-19 20:55 ergedan

这个是什么?  回复  更多评论   

# re: tomcat下应用JMS 2006-02-27 17:18 gusee

activemq网站上面关于tomcat的配置写得不太清楚,
我配置完后控制台上总是报Error Listener  回复  更多评论   

# re: tomcat下应用JMS 2006-03-02 09:29 javajohn

我以上的说明都是针对3.2版本的,据说新版4.0已经发布了.3.2版的文件下载到本地本身就有些地方配置是错误的,我已经都说明了的,你只要看过我的这篇文章应该是可以正常运行的  回复  更多评论   

# re: tomcat下应用JMS 2006-03-04 12:01 shao

楼主,麻烦把具体的配置写详细,或者把文档发到我的邮箱,急用.
还有openjms的还有没别的网站下载,上面的我打不开.
我的邮箱:shaofuqiang@jinchuang.net  回复  更多评论   

# re: tomcat下应用JMS 2006-03-04 22:25 javajohn

你登不上openjms说明你没有详细看我这篇文章的回复,在回复里我修改了正确的地址,具体的配置我已经在上面的文章说明了,不知道你怎么会配置不成功的.
不知道blogjava能不能带附件上来,我可以把我整理过的文档发上来.  回复  更多评论   

# re: tomcat下应用JMS 2006-03-04 22:30 javajohn

如果你在第一次测试activeMQ的时候报listener的错误那应该是web.xml里的监听器配置不正确,这是因为activeMQ网站供下载的web.xml这个文件本来就是错误的,那个监听器应该配置如下:
<listener>
<listener-class>org.activemq.web.SpringBrokerContextListener</listener-class>
</listener>

  回复  更多评论   

# re: tomcat下应用JMS 2006-03-12 16:19 msq

activeMQ 数据库怎么设置
不用建表吗  回复  更多评论   

# re: tomcat下应用JMS 2006-03-13 09:09 javajohn

ACTIVEMQ自己会建  回复  更多评论   

# re: tomcat下应用JMS 2006-03-13 09:11 javajohn

也不一定要用数据库,activeMQ也支持其它的消息保存机制  回复  更多评论   

# re: tomcat下应用JMS 2006-04-10 19:55 asf

上面配置的是oracle-ds
下面却是derby-ds
真不知道怎么通过的  回复  更多评论   

# re: tomcat下应用JMS 2006-04-26 14:02 pc

不错哦!  回复  更多评论   

# re: tomcat下应用JMS 2006-04-30 16:52 javaboy

activemq目前还是不稳定,特别是在网络状态不好的环境下,基本上网络一出现异常,它就死掉,估计是它还没有对网络异常进行更多的检测。  回复  更多评论   

# re: tomcat下应用JMS 2006-05-28 00:24 绿色使者、绿色心情

真是,还是应该有一些专业精神,asf提出的错误很明显,确是到现在都还没有更改过来  回复  更多评论   

# re: tomcat下应用JMS 2006-05-29 16:19 javajohn

呵呵,看来是不能偷懒哦  回复  更多评论   

# re: tomcat下应用JMS 2007-05-29 16:58 guest

不知道楼主整合过tomcat和MQ6.0没?
如果是,可以发给配置文件给我吗?
gongsiping@gmail.com
http://wiki.apache.org/tomcat/HowTo#head-b45c4c0b8c57d9efa1e9c5342650d5e534f55cfa
照着这篇文章试了一下,
QueueConnectionFactory qcf = (QueueConnectionFactory) ctx.lookup("jms/MyQCF");
在这步的时候总是会出错.

另外如果采用support pac即IBM提供的扩展JNDI的包,会出现
Properties env = new Properties();
env.put(
Context.INITIAL_CONTEXT_FACTORY,
"com.ibm.mq.jms.context.WMQInitialContextFactory");
env.put(Context.PROVIDER_URL, "localhost:1414/SYSTEM.DEF.SVRCONN");

Context ctx = (Context) new InitialContext(env)
到这步时会出错:
错误: javax.naming.ServiceUnavailableException: Unable to connect to the target
queue manager localhost:1414/SYSTEM.DEF.SVRCONN [Root exception is com.ibm.mq.MQ
Exception: MQJE001: MQException 出现:完成代码是 2,原因为 2195
MQJE020: 队列管理器不支持 CCSID]

看了一下MQContext类,它里面设定了默认的CCSID的值,而建立工厂连接的时候,根本就没地方去重新设定CCSID..
  回复  更多评论   

# re: tomcat下应用JMS 2008-08-19 20:17 任之

您文章里的连接或知识已经过时了,请更新好吗?  回复  更多评论   

# re: tomcat下应用JMS 2011-09-05 17:09 和仁

我与遇到此问题了.你是怎么解决的?  回复  更多评论   



只有注册用户登录后才能发表评论。


网站导航:
 

My Links

Blog Stats

常用链接

留言簿(7)

随笔分类(36)

随笔档案(39)

classmate

good blog

企业管理网站

好友

站点收藏

搜索

最新评论

阅读排行榜

评论排行榜