`
lonely
  • 浏览: 3157 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Mule2.2 BookStore例子学习

    博客分类:
  • Mule
阅读更多
最近刚要开始学习Mule,在此将BookStore作为示例记录下来。在例子之前,首先将mule的环境配置完毕,有助于减少不必要的麻烦。
bookstore中有三个小工程,我分别把它们转成了eclips工程,下面是源代码,加了少量的注释,由于其所必须的jar文件过大,将其删除。
附件中的三个工程分别为:
api--定义webservice接口;
admin-web--作为该示例主要的工程,采用mule方式对外提供webservice服务,类似于bs结构中的server端,其作用不言而喻;
bookstore-web--主要是通过webservice从admin-web中获取必要的数据信息。
admin-web、bookstore-web中都会用到api工程的jar包,只要将这两个工程中的target目录下的bookstore-admin,bookstore发布到tomcat中即可访问,当然要把其需要的jar包分别放入对应的目录中才可。
1.bookstore-admin

<service name="CatalogService">
         <inbound>
             <!-- Public interface,接收来自于bookstore的请求 -->
             <inbound-endpoint address="cxf:http://0.0.0.0:8777/services/catalog" />

              <!-- Administration interface 接收来自admin.jsp页面的请求-->
              <inbound-endpoint address="servlet://catalog">                                      
              <transformers>                                  
              <!-- Extract parameters from HTTP Request -->
                  <servlet:http-request-to-parameter-map />
              <!-- Convert request parameters to Book object -->
                  <custom-transformer class="org.mule.example.bookstore.transformers.ParameterMapToBook"/>
              </transformers>
              <response-transformers>
              <!-- Format response to be a nice HTML page -->
                  <custom-transformer class="org.mule.example.bookstore.transformers.AddBookResponse"/>
              <!-- Force text/html, otherwise it falls back to request props, which have form-encoded one -->
                   <transformer ref="setHtmlContentType"/>
              </response-transformers>
              </inbound-endpoint>
         </inbound>
     <component>
         <singleton-object class="org.mule.example.bookstore.CatalogServiceImpl" />
     </component>
</service> 

通过上面的代码可以看到添加book的流程为
servlet://catalog(接收来自admin.jsp的请求)->ParameterMapToBook(转换为book)->CatalogServiceImpl(添加book)->AddBookResponse(生成需要输出的信息)->setHtmlContentType(设定格式)。
2.bookstore


       
// Invoke the CXF web service
        JaxWsProxyFactoryBean pf = new JaxWsProxyFactoryBean();
        pf.setServiceClass(CatalogService.class);
        pf.setAddress(CatalogService.URL);
        CatalogService catalog = (CatalogService) pf.create();

        Collection <Book> books = catalog.getBooks();

用户提交需搜索的书籍,系统调用bookstore-admin的webservice服务(http://0.0.0.0:8777/services/catalog)获取书籍信息与搜索的书籍比对,符合条件列出来。
当用户下单时,调用下面定义好的流程,最后调用邮件服务、消息服务。
<service name="OrderService">
       <inbound>
	    <!-- Public interface ,接收来自于bookstore的请求 -->
	    <inbound-endpoint address="cxf:http://0.0.0.0:8777/services/order" />
       </inbound>
       <!-- 指定由下面的实现类来完成这个请求 -->
       <component>
	    <singleton-object class="org.mule.example.bookstore.OrderServiceImpl" />
       </component>
       <outbound>
	    <multicasting-router>
		<vm:outbound-endpoint path="emailNotification"/>
		<vm:outbound-endpoint path="dataWarehouse"/>
	    </multicasting-router>
       </outbound>
</service>

邮件服务,别忘记将下面的无效邮箱换成可用的邮箱,否则无法发送邮件。
<service name="EmailNotificationService">
       <inbound>
	    <vm:inbound-endpoint path="emailNotification" />
       </inbound>
       <outbound>
	    <pass-through-router>
		<!-- 成功发送邮件 -->
		 <smtp:outbound-endpoint user="username" password="password" host="smtp.gmail.com" 
		     from="username@gmail.com" subject="Your order has been placed!">
		      <transformers>
			    <custom-transformer class="org.mule.example.bookstore.transformers.OrderToEmailTransformer" />
			    <email:string-to-email-transformer />
		      </transformers> 
		 </smtp:outbound-endpoint>
	    </pass-through-router>
       </outbound>
</service>

消息服务, 在DataWarehouse组装消息完毕后将其发送到vm://statistics
<service name="DataWarehouse">
       <inbound>
	    <vm:inbound-endpoint path="dataWarehouse"/>
       </inbound>
       <component>
	    <singleton-object class="org.mule.example.bookstore.DataWarehouse" />
       </component>
       <outbound>
	    <pass-through-router>
		<!-- 消息发往vm://statistics,以供bookstore-admin获取信息 -->
		<outbound-endpoint ref="stats" transformer-refs="setHtmlContentType"/>
	    </pass-through-router>
       </outbound>
  </service>

一切完毕之后,可以回到bookstore-admin中点击首页中的Get Stats按钮从消息队列获取DataWarehouse组装的消息,基本就是这个样子了。
  • api.rar (11.8 KB)
  • 下载次数: 122
  • 大小: 41.5 KB
  • 大小: 23.7 KB
0
0
分享到:
评论
1 楼 cqzmj 2010-05-10  
你好,我在运行bookstore例子的时候,当我点击search,告知catalog.jsp页面45行中的Collection <Book> books = catalog.getBooks()的getBooks()是Unknown Source,请问是怎么回事呢?谢谢!

相关推荐

Global site tag (gtag.js) - Google Analytics