`

8.1web应用示例

阅读更多
8.1web应用示例
为了在本章中演示集成示例,一个web应用示例将被用来证明每个集成都是成功地。这个理由四个网络应用的拷贝,每个为不同的环境进行了定制。每个web应用很小并仅使用ActiveMQ 代理,一个JMS连接工厂和一个JMS queue。图8.1展现了该网络应用示例的目录结构。
如你所见,这个应用的结构是一个基于Maven的Java web 应用的基本结构。虽然在图8.1中的screenshot为jms-webapp-local应用显示了项目结构,其他应用实例的目录结构仅略有不同。每个web application使用Spring框架的网络框架特性,它减少了建立web application的复杂度。为了理解web application是如何工作的,最好examine一些在基本Java web application中找到的主要的项目。
在本章中的练习相关的web application 相关的部分是web.xml文件,Spring应用环境,和JmsMessageSenderService类。下面的列表展示了web.xml相关的部分。
Listing 8.1 The web.xml file
...
<resource-ref>
	<description>JMS Connection</description>
	<res-ref-name>jms/ConnectionFactory</res-ref-name>
	<res-type>org.apache.activemq.ActiveMQConnectionFactory</res-type>
	<res-auth>Container</res-auth>
</resource-ref>
	<resource-ref>
	<res-ref-name>jms/FooQueue</res-ref-name>
	<res-type>javax.jms.Queue</res-type>
	<res-auth>Container</res-auth>
</resource-ref>
...

在web.xml中的<resource-ref>元素引用了和 application server注册的JNDI资源。这个配置使那些资源对web application可用。这个配置仅将为Geronimo集成改变,它将为JMS queue使用基本的<message-destination-ref>替代<resource-ref>。
其它从web application上来的相关配置文件是Spring application context,如下所示。
Listing 8.2 The Spring application context file
...
<jee:jndi-lookup id="connectionFactory"
	jndi-name="java:comp/env/jms/ConnectionFactory"
	cache="true"
	resource-ref="true"
	lookup-on-startup="true"
	expected-type="org.apache.activemq.ActiveMQConnectionFactory"
	proxy-interface="javax.jms.ConnectionFactory" />
<jee:jndi-lookup id="fooQueue"
	jndi-name="java:comp/env/jms/FooQueue"
	cache="true"
	resource-ref="true"
	lookup-on-startup="true"
	expected-type="org.apache.activemq.command.ActiveMQQueue"
	proxy-interface="javax.jms.Queue" />
<bean id="jmsMessageBean"
	
<bean id="messageSenderService"
	class="org.apache.activemq.book.ch8.jms.service.JmsMessageSenderService"
	p:connectionFactory-ref="connectionFactory"
	p:queue-ref="fooQueue" />
...

在表8.2中显示的Spring application context 是一个Spring框架的XML配置文件:查看http://www.springframework.org。(请同时注意Spring的p-namespacehttp://mng.bz/dLT9在这个配置中被使用。)<jee:jndi-lookup>元素使用Spring来执行一个对指出资源的JNDI查找。这些资源稍后将在在messageSenderService java bean由Spring实例化以后被injected到messageSenderService Java bean中(值通过Setter方法插入)。接着messageSenderService被web application用于发送JMS消息。表8.3显示了JmsMessageSenderService bean的源码。
Listing 8.3 The JmsMessageSenderService class
public class JmsMessageSenderService {
	private JmsTemplate jmsTemplate;
	public void sendMessage(final JmsMessage bean) throws JMSException {
		if (bean.isPersistent()) {
			jmsTemplate.setDeliveryPersistent(bean.isPersistent());
		}
		if (0 != bean.getTimeToLive()) {
			jmsTemplate.setTimeToLive(bean.getTimeToLive());
		}
		jmsTemplate.send(new MessageCreator() {
			public Message createMessage(Session session) throws JMSException {
				TextMessage message = session.createTextMessage(bean.getMessagePayload());
				if (bean.getReplyTo() != null && !bean.getReplyTo().equals("")) {
					ActiveMQQueue replyToQueue = new ActiveMQQueue(bean.getReplyTo());
					message.setJMSReplyTo(replyToQueue);
				}
				return message;
			}
		});
	}
	public void setJmsTemplate(JmsTemplate jmsTemplate) {
		this.jmsTemplate = jmsTemplate;
	}
}

JmsMessageSenderService bean被简单的kept所以它仅聚焦于发送JMS消息的任务。该类使用Spring的JmsTemplate和一个anonymous的MessageCreator来简单的发送JMS消息。
在这个web application中这里仅有一个web page并且deliberately未完成的。这是因为该web application仅需要测试这个集成罢了。添加更多详细的东西仅会造出错误并detract本章的真实目的。
为了更好地通过这些类了解一个JMS消息的工作流,看一下图8.2(图略)。
第一步 JmsMessageSenderService实现了一个匿名的Spring MessageCreator来建立消息。
第二步 JmsMessageSenderService使用Spring JmsTemplate发送消息到ActiveMQ。
第三步 Spring DefaultMessageListenerContainer 消费消息并将它转换到JmsMessageDelegate。
第四步 JmsMessageDelegate bean处理消息(它输出消息的正文)。
JmsMessageSenderService完全从Spring DefaultMessageListenerContainer和JmsMessageDelegate bean隔离。任何通过JmsMessageSenderService发送到ActiveMQ的消息和DefaultMessageListenerContainer是否在线和准备消费消息无关。事实上,JmsMessageSenderService和Spring DefaultMessageListenerContainer可以很容易地从这个应用程序分离以在完全不同的流程中重用并且它不会改变这个应用程序的功能。这是ActiveMQ提供的一个虽然是很小的但完美的异步消息传递例子。
图8.2的步骤都隐藏于显示与图8.3的示例web application中的单一页面的场景内。
当使用在图8.3中显示的页面发送消息,一个小的消息短暂地出现在页面上,然后逐渐很快消退来指示消息被发送。这仅仅是一个检查来显示web应用程序中的一些活动。这些是在web应用程序中唯一可见的功能。其它发生的所有事情都隐藏在场景之下。
这些只是恰当地与应用程序服务器集成的ActiveMQ的web应用程序的一部分。为了更好地了解这个示例web应用的详细内容,并且你自己通过这些示例的工作准确地部署测试你自己的集成,下载该书的示例代码。
本章的四个版本的web应用示例是:
■jms-webapp-geronimo--被用来展示ActiveMQ和Geronimo集成
■jms-webapp-global--被用来展示使用global的JNDI的ActiveMQ和Tomcat或Jetty的集成
■jms-webapp-jboss--被用来展示ActiveMQ和JBoss一起配置和发布
■jms-webapp-local--被用来展示使用local的JNDI的ActiveMQ和Tomcat或jetty的集成
注意  local JNDI配置示例和global JNDI配置示例无法同时部署。因为这会导致classloader issues并使ActiveMQ无法正确部署。确保某刻只部署某一个风格的配置。
在处理with this chapter,你需要建立四个这样的示例,这能通过下面的Maven命令实现。
Listing 8.4 Build the examples
[amq-in-action-example-src] $ cd chapter8/
[chapter8] $ mvn clean install
[INFO] Scanning for projects...
[INFO] Reactor build order:
[INFO] jms-webapp-geronimo
[INFO] jms-webapp-global
[INFO] jms-webapp-jboss
[INFO] jms-webapp-local
[INFO] ActiveMQ In Action Examples Chapter 8
...
[INFO]
[INFO]
[INFO] -------------------------------------------------------------------
-----
[INFO] Reactor Summary:
[INFO] -------------------------------------------------------------------
-----
[INFO] jms-webapp-geronimo ...................................
SUCCESS [4.787s]
[INFO] jms-webapp-global .....................................
SUCCESS [1.265s]
[INFO] jms-webapp-jboss ......................................
SUCCESS [8.278s]
[INFO] jms-webapp-local ......................................
SUCCESS [2.359s]
[INFO] ActiveMQ In Action Examples Chapter 8 .................
SUCCESS [1.911s]
[INFO] -------------------------------------------------------------------
-----
[INFO] -------------------------------------------------------------------
-----
[INFO] BUILD SUCCESSFUL
[INFO] -------------------------------------------------------------------
-----
[INFO] Total time: 18 seconds
[INFO] Finished at: Mon Apr 26 13:24:31 MDT 2010
[INFO] Final Memory: 19M/35M
[INFO] -------------------------------------------------------------------
-----

注意表8.4的输出已经被略微省略了。只要你看到BUILD SUCCESSFUL消息,示例已被正确地build并且针对每一个的WAR文件现在应该存在于每个项目targe目录下。然后这个WAR文件能被部署到正确的应用服务并用来测试ActiveMQ集成。
注意  虽然本章详细描述了针对每个应用服务的必要修改,所有这个修改已在每个项目中做了。只要确保下载本书的源码来获取这些示例项目。
现在你对示例应用已经有了一个概览,你已经准备试试集成了。第一个要和ActiveMQ集成的应用服务是Apache Tomcat。
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    GatewayForMicrosoftSAPApps:使用 SAP Gateway for Microsoft 的 Office 365 Windows 8.1 应用示例

    描述中提到的“微软SAPApps网关”即是指这个技术,它强调了使用 SAP Gateway for Microsoft 实现的 Office 365 和 Windows 8.1 应用的示例。这意味着该压缩包可能包含一系列教程、代码样本或演示应用程序,展示如何...

    webwork2.1.7+spring+hibernate3+oracle+weblogic8.1登录示例(详解)

    在这个示例中,我们探讨的是一个基于...这个示例演示了如何集成多个开源框架,构建一个完整的Java Web应用程序,实现了用户登录的功能。在实际开发中,这样的架构能够帮助提高代码的可维护性、可扩展性和灵活性。

    Win8.1配置web服务器终版.pdf

    在Windows 8.1操作系统中配置Web服务器是一个基础但至关重要的步骤,这使得你能够在本地计算机上运行和测试Web应用程序。以下将详细解释如何通过安装IIS(Internet Information Services)来建立Web服务器,并进一步...

    BEA WebLogic Server 8.1 Unleashed

    6. **部署和生命周期管理**:WebLogic Server 8.1支持多种部署模型,包括传统部署、EAR(Enterprise Archive)和WAR(Web Application Archive),以及热部署和热更新,便于应用的发布和维护。 7. **安全性**:提供...

    BEA Weblogic Workshop 8.1

    Page Flow是BEA Systems公司为WebLogic Workshop 8.1设计的一种高级编程模型,它主要应用于构建复杂的Web应用程序。Page Flow继承自Struts框架中的Model 2 MVC模式,并在此基础上进行了增强和优化,旨在更好地实现...

    LoadRunner8.1安装指南

    **LoadRunner** 是一款由 **Mercury Interactive Corporation** 开发的性能测试工具,广泛应用于Web应用以及其他类型的应用程序的性能评估。版本8.1提供了对Windows和UNIX操作系统的支持,使得用户能够根据不同的...

    weblogic8.1配置说明文件

    #### 示例:数据库连接配置 1. **Oracle 数据库连接**: - 将 Oracle 的 JDBC 驱动程序包 `classes12.jar` 复制到项目的 `\WEB-INF\lib` 目录下。 - 在 Java 代码中使用以下语句建立数据库连接: ```java Class...

    SOAOffice8.1For.Net

    在.NET平台上实现SOAOffice8.1,意味着该系统利用了微软的.NET Framework,这是一套用于构建和运行各种类型的应用程序的强大开发平台。开发者可以使用C#、VB.NET或其他.NET支持的语言来编写代码,利用.NET提供的类库...

    Pro Windows 8.1 Development with XAML and C#的例子源码

    《Pro Windows 8.1 Development with XAML and C#》是一本深入探讨使用XAML和C#进行Windows 8.1应用开发的专业书籍。书中的源码提供了丰富的实例,涵盖了从基础到高级的各种开发技术,旨在帮助开发者掌握构建现代...

    Loadrunner8.1安装

    - 示例许可证密钥:golba-100 和 web-10000,确认后验证通过。 **LoadRunner 8.1 测试过程**: 1. **分析性能测试需求**: - 在开始测试前,需明确测试目标,了解预期的系统负载和性能指标。 2. **编写性能测试...

    测试工程(netbeans8.1,NetBeans自带glassfish4.1,JDK7)

    在这样的环境下,开发者通常会进行Web应用的开发和测试,尤其是Java Enterprise Edition (Java EE) 应用程序,因为NetBeans和GlassFish都是Java EE开发和部署的重要工具。 描述中提到的问题在于“输出老是1,不能...

    advguicontrols8.1 pb12.5

    这可能包括了对面向对象编程的强化支持、更现代的用户界面设计、以及对Web服务和分布式系统的更好集成。这些更新的架构使得开发人员能够利用更高效的方式进行代码组织和复用,同时保持应用程序的性能和稳定性。 在...

    PHPMaker_2018.0.8.1_Downloadly.ir.rar

    总的来说,PHPMaker 2018.0.8.1是一款强大的PHP代码生成工具,可以帮助开发者快速构建基于数据库的Web应用,结合Delphi等开发环境,可以提升开发效率,同时具备良好的用户界面和安全性。通过深入学习和使用,可以极...

    weblogic8.1+jdk1.4+axis1.2遇到的问题总结

    当部署基于Java的应用程序时,特别是在早期版本的Java环境中(如JDK 1.4),使用WebLogic Server作为应用服务器并结合Apache Axis框架来构建Web服务时,开发者很可能会遇到一些兼容性和配置上的问题。这些问题包括但...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    7.1 配置任意目录下的web应用程序 240 7.2 war文件 242 7.3 tomcat中servlet的另一种运行方式 244 7.4 与servlet配置相关的元素 247 7.4.1 [servlet]元素及其子元素 247 7.4.2 [servlet-mapping]元素及其子元素...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    7.1 配置任意目录下的web应用程序 240 7.2 war文件 242 7.3 tomcat中servlet的另一种运行方式 244 7.4 与servlet配置相关的元素 247 7.4.1 [servlet]元素及其子元素 247 7.4.2 [servlet-mapping]元素及其子元素...

Global site tag (gtag.js) - Google Analytics