私は現在、Spring MVC に基づくプロジェクトに取り組んでいます。これは、Spring MVC テンプレートを使用した単なる標準プロジェクトです。だから私はweb.xmlとservlet-context.xmlを持っています。
私はこのプロジェクトに Apache cxf Web サービスを追加する作業を行っており、既存の Spring MVC とサービスを共有する際にいくつかの問題に直面しています。
私の最初のアプローチは、Web サービスを機能させることでした。そのため、私の web.xml は次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- The definition of the Root Spring Container shared by all Servlets
and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml
/WEB-INF/spring/jaxwsServlet/jaxwsServlet-context.xml
</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Process web service requests -->
<servlet>
<servlet-name>jaxws</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSSpringServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jaxws</servlet-name>
<url-pattern>/industryAspectWS</url-pattern>
</servlet-mapping>
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
と私の jaxwsServlet-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ws="http://jax-ws.dev.java.net/spring/core"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:wss="http://jax-ws.dev.java.net/spring/servlet"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://jax-ws.dev.java.net/spring/core
classpath:spring-jax-ws-core.xsd
http://jax-ws.dev.java.net/spring/servlet
classpath:spring-jax-ws-servlet.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd"
>
<wss:binding url="/industryAspectWS">
<wss:service>
<ws:service bean="#industryAspectWS"/>
</wss:service>
</wss:binding>
<!-- Web service methods -->
<bean id="industryAspectWS" class="com.example.ws.IndustryAspectWS"></bean>
<context:component-scan base-package="com.example" />
<beans:import resource="../HibernateTransaction.xml" />
<beans:import resource="../JaxbMarshaller.xml" />
</beans>
context:component-scan beans:importセクションを servlet-context.xml からコピーしました
サーバーを起動し、Web サービスを呼び出し、サーブレットと jsp にもアクセスできたので、この構成は正常に機能します。ただし、両方のコンテキスト xml ファイルで hibernateTransaction.xml を引用したため、2 つのセッション ファクトリがあることに気付きました。
Apache cxf と Spring MVC コントローラー間ですべてのサービス (hibernate など) を共有したいので、root-context.xml に設定を入れてみましたが、うまくいきませんでした。これもオンラインで検索しようとしましたが、共有サービスに関する完全な例は見つかりませんでした。両者でサービスを共有する設定を入れることはできますか?
=================================================
これを投稿した後、いくつかの設定を実験しましたが、
<context:component-scan base-package="com.example" />
と
<tx:annotation-driven transaction-manager="txManagerExample" />
servlet-context.xml と jaxwsServlet-context.xml の両方で、問題なく動作します。他のすべての設定は、共有の root-context.xml にとどまることができます