xfire+spring+ibatis(详细)

前言:

spring+xfire+ibatis搭建的项目.接触xfire没多久,但是查阅了很多资料.
之前也用过相同结构的框架,但是一直没解决注入bean,而且对xfire还不是很熟悉,这次花了很多时间查阅资料,把之前的问题解决了,也算是对spring集成xfire有了很大的了解。
下面贴下弄好的项目资料.以备以后可查.

主要配置文件
这里写图片描述
————————-applicationContext-dao.xml——————–:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 指定Spring配置文件的Schema信息 -->
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
                http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
    <!--基本DAO组件配置-->
    <bean id="baseDao" class="gzhy.remote.evaluating.acquire.dao.IBaseDaoImpl">
        <property name="sqlMapClient" ref="sqlMapClient"/>
    </bean>
</beans>

—————————————–applicationContext-database.xml————————————-

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

    <!-- ========================= 数据源配置========================= -->
    <bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource" destroy-method="close">
        <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="driverUrl" value="jdbc:oracle:thin:@127.0.0.1:1521:prt080astu"/>
        <property name="user" value="sa"/>
        <property name="password" value="123456"/>
        <property name="prototypeCount" value="0" />
        <property name="maximumConnectionCount" value="10" />
        <property name="minimumConnectionCount" value="3" />
        <property name="simultaneousBuildThrottle" value="20" />
        <property name="houseKeepingTestSql" value="SELECT 1 FROM DUAL" />
        <property name="testAfterUse" value="true" />
        <property name="testBeforeUse" value="true" />
    </bean>


    <!-- SqlMap setup for iBATIS Database Layer -->
    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation" value="/WEB-INF/classes/SqlMapConfig.xml"/>
        <property name="dataSource" ref="dataSource"/>
        <property name="mappingLocations">
            <list>
            <value>/WEB-INF/classes/gzhy/remote/evaluating/acquire/sqlmaps/acquire/*_SqlMap.xml</value>
            <value>/WEB-INF/classes/gzhy/remote/evaluating/acquire/sqlmaps/dispatch/*_SqlMap.xml</value>
            </list>
        </property>
    </bean>

    <!-- Transaction manager for a single JDBC DataSource -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!-- **配置事务特性**  -->
    <bean id="txAdvice" class="org.springframework.transaction.interceptor.TransactionInterceptor">
       <property name="transactionManager" ref="transactionManager" />
       <property name="transactionAttributes">
           <props>
               <prop key="get*">PROPAGATION_REQUIRED</prop>
           </props>
       </property>
    </bean>

    <bean id="autoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
        <property name="beanNames">
            <value>*service</value>
        </property>
        <property name="interceptorNames">
            <list>
            <value>txAdvice</value>
            </list>
        </property>
    </bean>


</beans>

这里由于项目的关系,对spring的事务,多数据源并没有做扩充,需要的可以网上查下资料. 还是说说sqlMapClient节点中的mappingLocations配置,这里是为了自动加载ibatis的sqlmap文件,因为不想每次都要去SqlMapConfig.xml里面引用。 目前还有点遗留问题:
1.比如我这里的路径写到最里一层了,应该可以直接加载sqlmpas包下面的所有sqlmap文件;
2. SqlMapConfig.xml里面必须要引用一个sqlmap文件才不报错。

进度紧,就暂时这样处理,后续会去研究什么问题导致的,到时候会留言说明。如有知道的朋友,也请留言告知下,感激不尽。

—————————————–applicationContext-service.xml—————————————-

<?xml version="1.0" encoding="UTF-8"?>
<!-- 指定Spring配置文件的Schema信息 -->
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
                http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

    <!-- ====================基础业务接口============= -->
    <bean id="baseService"
        class="gzhy.remote.evaluating.acquire.service.base.IBaseServiceImpl">
        <property name="baseDao" ref="baseDao" />
    </bean>
    **<bean id="IGetDataServiceImpl"
        class="gzhy.remote.evaluating.acquire.service.base.IGetDataServiceImpl">
        <property name="baseService" ref="baseService" />
    </bean>**

</beans>

IGetDataServiceImpl注入了baseService,其实和dao层注入到service层一样,至于要注入dao还是service,根据业务来,这里注入dao相对来说比较规范点,我是因为项目处于快结束的阶段了,很多属性和通用业务都在baseService里面了,你可以把这个实现类理解成普通类而不是业务层。

———————————-xfire-servlet.xml——————–
这里有好几种配置,先发目前使用的配置:
第一种

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <!-- START SNIPPET: xfire -->
    <import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />

    <!-- 获得applicationContext中所有bean的JSR181 annotation -->
    <!-- 该Bean获取Spring容器中所有标注@WebService的Bean -->
    <bean id="webAnnotations"
        class="org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations" />

    <!-- 对标注@WebService的Bean进行处理,完成导出工作 -->
    <bean id="jsr181HandlerMapping" class="org.codehaus.xfire.spring.remoting.Jsr181HandlerMapping">
        <property name="xfire" ref="xfire" />
        <property name="webAnnotations" ref="webAnnotations" />
    </bean>



    <!-- END SNIPPET: xfire -->


</beans>

第一种是通过注解方式定义,也可以对wsdl文件的属性做定义.

第二种

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <!-- START SNIPPET: xfire -->
    <import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />

    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="urlMap">
      <map>
        <entry key="/IGetDataService">
            <ref bean="getData"/>
        </entry>
      </map>
    </property>
  </bean>

  <!-- Declare a parent bean with all properties common to both services -->
  <bean id="getData" class="org.codehaus.xfire.spring.remoting.XFireExporter">
    <property name="serviceFactory">
      <ref bean="xfire.serviceFactory"/>
    </property>
    <property name="xfire">
      <ref bean="xfire"/>
    </property>
    <property name="serviceBean">
        <ref bean="IGetDataServiceImpl"/>
    </property>
    <property name="serviceClass">
      <value>gzhy.remote.evaluating.acquire.service.base.IGetDataService</value>
    </property>
  </bean>
<!-- END SNIPPET: xfire -->

</beans>

第二种需要spring-webmvc.jar,如果把第一种和第二种混合起,也没问题,但是如果在接口跟实现类都使用@webservice注解 ,就会出现两个接口方法.
还有一种是没集成spring的网上很多.就是service.xml配置的,区别就是web.xml中引用的类不同,集成spring的引用org.codehaus.xfire.spring.XFireSpringServlet
———————————-web.xml——————————

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>gzhy.remote.evaluating</display-name>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml,classpath*:xfire-servlet.xml
    </param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

     <servlet>
    <servlet-name>XFireServlet</servlet-name>
    <servlet-class>  
        org.codehaus.xfire.spring.XFireSpringServlet 
    </servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>XFireServlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

</web-app>

最后贴下接口和实现类中的注解。

@WebService(
        serviceName="IGetDataService",
        endpointInterface ="gzhy.remote.evaluating.acquire.service.acquire.IGetDataService"
        )
@SuppressWarnings("all")
public class IGetDataServiceImpl implements IGetDataService {

}
@WebService(  
targetNamespace="http://service.acquire.evaluating.remote.gzhy")
public interface IGetDataService {

}
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值