JSPCN主页 | JSP空间 | 网站制作 | JSP下载 | JSP论坛 | JSP教程 | 关于JSPCN | 联系我们
JSP虚拟主机,jsp空间,java空间,java虚拟空间,详细请点击进入
做最专业的JSP中文网站 当前位置首页--JAVA技术--Spring  
文章搜索:
关键字 标题
  
JSP中文网内容管理系统(JCMS)
JSP虚拟主机
网络笔记本
网摘,图片,笔记收藏
虚拟服务器

JSPCN文章目录分类
JSP配置[219]JSP基础[136]
中文问题[69]上传问题[27]
JAVABEAN[46]数据库[212]
文件操作[126]图片声音[17]
JSP其他[57]时间相关[16]
JAVAMAIL[72]STRUTS[144]
开发工具[28]教程系列[157]
JSP实例[89]
JAVA基础[421]APPLET[78]
JAVA网络[179]Applica[115]
Servlet[98]XML[163]
J2ME[257]J2EE[374]
考试相关[63]JAVA线程[90]
EJB[261]Swing[26]
Java API[141]声音图片[28]
异常处理[33]JAVA实例[290]
JAVA类[139]SUN[89]
Hibernate[6]JMX[8]
Spring[34]
本版推荐文章 
本版热点文章 
相关文章链接 
 
XFire在SpringSide中的应用
作者:     文章来源:
访问次数:5次     加入时间:2007年04月09日
这一节,通过SpringSide来分析XFire的应用。

SpringSide开源项目是国内的开发人员所做的一个以Spring为核心的开源项目,目的是提供一个Pragmatic的企业应用开发基础和最佳实践展示。为使用Spring框架的开发者提供一个非Demo版的复杂、正式而体现最佳使用实践的参照系统。为JavaEEer必须面对的所有问题提供合理的、合乎Pragmatic原则的解决方案。采用Plugins形式组织,使开发者可快速定位所需的参考方案并做加法到自己的系统。

SpringSide中关于Web服务的配置是在WEB-IBF/classes文件下的applicationContext-webservice.xml中配置的:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
  3. <beans>
  4.     <import resource="classpath:org/codehaus/xfire/spring/xfire.xml"/>
  5.     <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  6.         <property name="mappings">
  7.             <value>/BookService=bookService</value>
  8.         </property>
  9.     </bean>
  10.  
  11.     <bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" abstract="true">
  12.         <property name="serviceFactory" ref="xfire.serviceFactory"/>
  13.         <property name="xfire" ref="xfire"/>
  14.     </bean>
  15.    
  16.     <bean id="bookService" parent="baseWebService">
  17.         <property name="serviceBean" ref="bookManager"/>
  18.         <property name="serviceClass" value="org.springside.bookstore.service.webservice.BookService"/>
  19.     </bean>
  20. </beans>


第一步,引入xfire.xml文件

<import resource="classpath:org/codehaus/xfire/spring/xfire.xml"/>。这样,我们就不必在web.xml中配置了,这种语法在Spring参考手册(2.0-M3)3.18节中有介绍,3.19节介绍了在web.xml配置bean定义文件的方法,就是上一节使用的方法。

第二步,处理映射,将/BookService URL和bookService这个bean联系起来。当然,这里bookService又继承了baseWebService,这样做挺巧妙,这样如果有多个Web服务bean,就继承baseWebService就可以了,这种面向对象的概念还是值得我们提倡的,Spring参考手册3.5节介绍了相关的知识。

在bookService的定义中,serviceBean也就是接口实现类为bookManager bean,这个bean实际是在WEB-INF/classes/ applicationContext-manager.xml文件中所定义,类名为org.springside.bookstore.service.logic.BookManager:
  1. package org.springside.bookstore.service.logic;
  2.  
  3. import … …
  4.  
  5. public class BookManager extends BaseHibernateDao implements BookService {
  6.  
  7.     private CategoryManager categoryManager;
  8.  
  9.     public void setCategoryManager(CategoryManager categoryManager) {
  10.         this.categoryManager = categoryManager;
  11.     }
  12.  
  13.     protected Class getEntityClass() {
  14.         … …
  15.     }
  16.  
  17.     public Book get(Integer id) {
  18.         … …
  19.     }
  20.  
  21.     public void save(Book book) {
  22.        … …
  23.     }
  24.  
  25.     public void remove(Integer id) {
  26.        … …
  27.     }
  28.  
  29.     public List getAllCategorys() {
  30.         … …
  31.     }
  32.  
  33.     public Category getCategory(Integer id) {
  34.         … …
  35.     }
  36.  
  37.     public List findBooksByName(String name) {
  38.         … …
  39.     }
  40.   
  41.     public List getNewBooks() {
  42.         … …
  43.     }
  44.  
  45.     public List findAllLowStock(Integer stockHint) {
  46.        … …
  47.     }
  48.  
  49.     public List findBooksByCategory(String category_id) {
  50.        … …
  51.     }
  52.  
  53.     protected void filterCriteria(Criteria criteria, Map filter) {
  54.        … …
  55.     }
  56. }


serviceClass也就是接口类为

org.springside.bookstore.service.webservice.BookService:
  1. package org.springside.bookstore.service.webservice;
  2.  
  3. import java.util.List;
  4.  
  5. public interface BookService {
  6.     List findBooksByName(String name);
  7.   
  8.     List findBooksByCategory(String category);
  9.  
  10.     List getAllCategorys();
  11.  
  12. }


事实上,SpringSide既是一个Web服务的提供者,又是一个Web服务的消费者。它在WEB-INF/classes/applicationContext-webservice-client.xml文件中定义了消费这个Web服务的bean:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
  3. <beans>
  4.     <!-- 一分钟刷新一次sciprt文件-->
  5.     <bean class="org.springframework.scripting.support.ScriptFactoryPostProcessor">
  6.           <property name="refreshCheckDelay" value="60" />
  7.     </bean>
  8.  
  9.     <bean id="BookServiceClient" class="org.springframework.scripting.groovy.GroovyScriptFactory">
  10.          <constructor-arg value="classpath:org/springside/bookstore/service/webservice/BookServiceClient.groovy"/>
  11.          <property name="serviceUrl" value="http://localhost:8080/springside/service/BookService" />
  12.     </bean>
  13. </beans>


这个消费Web服务的bean定义为BookServiceClient,它是采用Groovy脚本语言定义了。在Spring参考手册(2.0-M3)中的第25章专门介绍在Spring中脚本语言的使用,脚本语言支持是Spring 2.0新增的内容,目前可以支持Groovy、BeanShell、Jruby三种脚本语言。

这个BookServiceClient最终是在dwr中使用,可以

pluginsorg.springside.ajax.dwrwebappWEB-INFdwr.xml中的定义。

 

在SpringSide,采用Aegis的binding方式,在

pluginsorg.springside.webservice.xfiresrcorgspringsideookstoreservicewebserviceBookService.aegis.xml中定义了返回值的类型:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <mappings>
  3.     <mapping>
  4.         <method name="findBooksByName">
  5.             <return-type componentType="org.springside.bookstore.domain.Book"/>
  6.         </method>
  7.         <method name="findBooksByCategory">
  8.             <return-type componentType="org.springside.bookstore.domain.Book"/>
  9.         </method>
  10.         <method name="getAllCategorys">
  11.             <return-type componentType="org.springside.bookstore.domain.Category"/>
  12.         </method>
  13.     </mapping>
  14. </mappings>
Copyright © 2002-2005 JSPCN.net. All rights reserved.
JSP中文网    备案序号:蜀ICP备05001583号
成都恒海科技发展有限公司    成都市一环路南二段6号新瑞楼三楼8号