清单8.5是特定于Tomcat的。第一个元素命名为jms/ConnectionFactory--它定义了一个ActionMQ连接工厂并利用ActiveMQ中的优点,通过连接工厂启动一个代理实例。第二个元素名为jms/FooQueue在ActiveMQ中定义了一个JMS queue。这个配置文件live with web application并被tomcat自动获取来配置资源。Tomcat使得他们可以通过一个标准的JNDI查找示例web应用程序。
注意 $TOMCAT_HOME变量一般被用来指向Tomcat安装目录,它并不是必须在你的环境中设置的
为了测试local JNDI资源,使用下面的步骤:
第一步 复制jms-webapp-local/target/jms-webapp.war文件到$TOMCAT_HOME/webapps目录中。
第二步 启动Tomcat:
$ cd $TOMCAT_HOME
$ ./bin/catalina.sh run
Using CATALINA_BASE: /opt/apache-tomcat-6.0.26
Using CATALINA_HOME: /opt/apache-tomcat-6.0.26
Using CATALINA_TMPDIR: /opt/apache-tomcat-6.0.26/temp
Using JRE_HOME:
/System/Library/Frameworks/JavaVM.framework/Versions/
CurrentJDK/Home
Using CLASSPATH: /opt/apache-tomcat-6.0.26/bin/bootstrap.jar
...
INFO - BrokerService - ActiveMQ 5.4.1 JMS Message
Broker (FooBroker) is starting
...
Apr 8, 2010 9:03:03 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 3542 ms
...
INFO: Server startup in 3306 ms
INFO - SingleConnectionFactory - Established shared
JMS Connection:
ActiveMQConnection {id=ID:mongoose.local-55759-1270249165283-2:1,
clientId=null,
started=false}
INFO - JmsMessageDelegate - Consumed message with payload:
This is a test message
显示在表8.6中的server.xml文件的<Resource>元素在Tomcat中注册了JNDIReferenceFactory对象来建立提到的对象类型--ActiveMQConnectionFactory和ActiveMQQueue。再一次,ActiveMQ is unique in the fact that a full broker instance can be created by creating an ActiveMQConnectionFactory。brokerURL属性被用来传递代理URI,它允许使用任何被支持的transports(TCP,VM等等)。它也支持可选的brokerConfig属性为启动的ActiveMQ实例用于指向一个配置文件。
下面要修改的文件是context.xml文件;如下显示相关添加的内容。 Listing 8.7 The Tomcat context.xml file
$ cd $TOMCAT_HOME
$ ./bin/catalina.sh run
Using CATALINA_BASE: /opt/apache-tomcat-6.0.26
Using CATALINA_HOME: /opt/apache-tomcat-6.0.26
Using CATALINA_TMPDIR: /opt/apache-tomcat-6.0.26/temp
Using JRE_HOME:
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
Using CLASSPATH:
/opt/apache-tomcat-6.0.26/bin/bootstrap.jar
...
INFO - BrokerService - ActiveMQ 5.4.1 JMS Message
Broker (FooBroker) is starting
...
Apr 9, 2010 8:54:59 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 3365 ms
...
INFO: Server startup in 3365 ms
INFO - SingleConnectionFactory - Established shared
JMS Connection:
ActiveMQConnection {id=ID:mongoose.local-49429-1270868098091-2:1,
clientId=null,started=false}
INFO - JmsMessageDelegate - Consumed message with payload:
This is a test message
在显示的输出中,注意从JmsMessageDelegate Bean中的输出的最后一行显示了被JmsMessageDelegate bean消费的消息正文。
对于一些项目而言,配置ActiveMQ来使用Tomcat global JNDI context是合适的因为可能有多个项目需要访问那些资源。在一些情况下,它是有意义的,它从Tomcat内部进程中控制了ActiveMQ。缺点是Tomcat和ActiveMQ在相同的JVM正在争用同样的资源。对于一些项目,这不是一个问题,因此是一个acceptable trade-off。
但是Tomcat并被是唯一viable开源web容器。Jetty是一个formidable的选择。