zoukankan      html  css  js  c++  java
  • Tuscany SCA与Spring、Hibernate整合之简洁方法

    Tuscany SCA发布Web Service,这篇文章讲了Tuscany 如何发布Web Service。本文介绍如何与常用的框架spring/hibernate整合。

    Tuscany SCA与Spring结合官方的方法和解释详见:使用 Spring Framework 设计和开发 SCA 组件,第 1 部分: 三剑客:Spring、SCA 和 Apache Tuscany使用 Spring Framework 设计和开发 SCA 组件,第 2 部分: 使用 Apache Tuscany 的高级技巧。但是配置太复杂了,直接弄昏我了。还可参考这位仁兄的SCA(Tuscany)+Spring+Hibernate使用范例V0.1,但依然是spring配置和composite配置一个接一个,重复嫌疑。现给出一个在Tuscany SCA 发布Web Service的基础上略加修改得到的一个方法。

    本实例使用了Tuscany-sca-1.6.2(不建议使用2.0,因为版本不稳定,教程较少,练习中诸多不便),spring 3.0.5,Hibernate 3.6.5。分别可以在官方网站下载。

    1.新建”动态web项目“

    参考《Spring2.0技术手册》读书笔记八-Spring与Hibernate整合,配置好spring与Hibernate。

    2. Tuscany 发布服务

    参考Tuscany SCA发布Web Service

    3.有创新的部分,服务对DAO类的获取

    StudentDAO

     

    public class StudentDAO extends BaseDAO {
    	private static StudentDAO instance=null;
    	public static StudentDAO getInstance(){
    		return instance;
    	}
    	public StudentDAO(){
    		instance=this;
    	}
    }

    补:BaseDAO是一个DAO基类,封装了一般的增删改查方法。

    服务使用DAO:tuscany与spring/hibernate整合的官方方法复杂就复杂在对DAO的获取,完全通过配置让tuscany与spring交互,需要把dao也发布成component。

    StudentServiceImpl

     

    public class StudentServiceImpl implements IStudentService{
    	private StudentDAO studentDao;
    	public StudentServiceImpl(){
    		studentDao=StudentDAO.getInstance();
    	}
    	@SuppressWarnings("unchecked")
    	public List<Student> getAll(){
    		return (List<Student>)studentDao.findAll(Student.class);
    	}
    }

    注:通过代码而不是配置来获得DAO,简化了不少事。那StudentDAO中的静态属性(private static StudentDAO)什么时候被初始化的呢?

    4.重要的配置文件

    applicationContext.xml中关于DAO的部分

     

    	<bean id="studentDAO" class="com.test.dao.StudentDAO">
    		<property name="sessionFactory">
    			<ref bean="sessionFactory" />
    		</property>
    	</bean>

    student.composite

     

        <service name="StudentService" promote="StudentServiceComponent">   
            <interface.java interface="com.test.service.IStudentService" />  
            <binding.ws></binding.ws>           
        </service>
        
        <component name="StudentServiceComponent">   
        	<implementation.java class="com.test.serviceImpl.StudentServiceImpl"/>
        </component>

    web.xml

     

    	<context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>/WEB-INF/applicationContext*.xml</param-value>
    	</context-param>
    	<filter>
    		<filter-name>encodingFilter</filter-name>
    		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    		<init-param>
    			<param-name>encoding</param-name>
    			<param-value>UTF-8</param-value>
    		</init-param>
    		<init-param>
    			<param-name>forceEncoding</param-name>
    			<param-value>true</param-value>
    		</init-param>
    	</filter>
    	<!-- tuscany -->
    	<filter>
    		<filter-name>tuscany</filter-name>
    		<filter-class>org.apache.tuscany.sca.host.webapp.TuscanyServletFilter</filter-class>
    	</filter>
    	<filter-mapping>
    		<filter-name>encodingFilter</filter-name>
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>
    	<filter-mapping>
    		<filter-name>tuscany</filter-name>
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>
    
    	<listener>
    		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    	</listener>

    5.项目结构图


    6.项目发布到tomcat下,输入http://localhost:8080/SCASpringHibernate/StudentService?wsdl可以看到studentservice的wsdl,我用flex的WebService组件调用StudentService的getAll方法测试成功。

    重点解释:启动应用时,服务器根据web.xml加载相应的监听器、过滤器等。spring的ContextLoaderListener根据applicationContext.xml初始化了其中的DAO,即StudentDAO中的静态实例(private static StudentDAO instance)在应用启动成功后已经存在容器(内存)中。所以在StudentServiceImpl中调用StudentDAO.getInstance()静态方法可返回一个StudentDAO实例。不知道有没有说清楚,但这个方法是否合理,我觉得还可以讨论。

    项目下载地址:http://download.csdn.net/source/3454636

    补充:当然不只是DAO可以这样使用了,其他的Bean也可以采用这个”静态实例“的方法来实现。对于工具类(不包含状态信息)倒可以放心使用,如果一个Bean有自己的状态信息,那整个应用都共享这个静态实例就不是一个好方法了!

  • 相关阅读:
    Vue.js的组件化思想--下
    Vue.js的组件化思想--上
    Git常用命令总结
    vue基础语法
    ES6基础语法
    Vue笔记
    Vue的基本使用(一)
    es6的基本用法
    Django-admin管理工具
    Django组件-中间件
  • 原文地址:https://www.cnblogs.com/whuqin/p/4982072.html
Copyright © 2011-2022 走看看