將Mule ESB Http項目轉換爲Tomcat項目(4) 將ESB項目改造爲Web項目

     系列2中建立的ESB項目沒法在Studio中直接轉換爲能夠部署到Tomcat的Web項目,由於Mule Anypoint Studio提供的Project Facet不包含Dynamic Web Module,只有Static Web Module,須要咱們進行手動修改。java

     Mule ESB官方提供的Tomcat項目轉換文檔存在不少謬誤,不建議參考,我進行轉換時主要參考的是這篇博文。web

     https://www.ricston.com/blog/tomcat-mule-3-7/spring

 1. 將Mule ESB的運行時的全部庫包拷貝到一個本地庫目錄,這些庫包原來所在的位置在Anypoint的安裝目錄的plugins\org.mule.tooling.server.3.8.0.ee_6.0.0.201601271348\mule\lib目錄下(如圖所示),咱們把它們拷貝到一個指定目錄,例如D:\muleLib下apache

  2. 改變項目的packaging類型爲war,這樣會使得在進行編譯時,使用的是mave compile plugin,而不是mule提供的mule-app-maven-plugin。tomcat

    <groupId>com.mycompany</groupId>
    <artifactId>testproject</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>war</packaging>app

 3. 改動項目中引用的mule esb jar包的scope,從provided改成system,這樣避免從Mule Enterprise Repository下載mule esb jar包,使其直接指向本地目錄,例如對於eclipse

mule-core-ee-3.8.0-M1.jar的引用,改動以前的dependency是這樣的:webapp

<dependency>
            <groupId>com.mulesoft.muleesb</groupId>
            <artifactId>mule-core-ee</artifactId>
            <version>${mule.version}</version>
            <scope>provided</scope>
 </dependency>

改動以後變成了maven

<dependency>
    <groupId>com.mulesoft.muleesb</groupId>
    <artifactId>mule-core-ee</artifactId>
    <version>${mule.version}</version>
    <scope>system</scope>
   <systemPath>D:\MuleLib\mule\mule-core-${mule.version}.jar</systemPath>
 </dependency>

這樣在編譯時僅僅是引用本地mule lib目錄下的jar包,而沒必要從mule ee repository上下載對應jar包,其餘的mule esb jar包作一樣修改。ide

4.添加maven-war-plugin,去除原來pom.xml文件build節點裏的plugin.

<build>
        <finalName>testproject</finalName>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.3</version>
				<configuration>
					<webResources>
						<!-- 打包時將src/main/app目錄下的testproject.xml流程文件包含到war包的WEB-INF目錄下!-->
						<resource>
							<targetPath>WEB-INF</targetPath>
							<directory>src/main/app</directory>
							<includes>
								<include>*.xml
								</include>
							</includes>
						</resource>
					</webResources>
					<failOnMissingWebXml>false</failOnMissingWebXml>
				</configuration>
			</plugin>					 
		</plugins>
	</build>

  5.運行mvn eclipse:clean, mvn eclipse:eclipse命令,將ESB項目轉化爲可導入Eclipse的eclipse項目。

6.導入5生成的eclipse項目,右鍵菜單選中[Configure]-[Convert To Maven Project],將其專程maven項目,這是爲了之後添加第三方庫包。

7.設置項目的Project Facet爲Dynamic Web Module 3.0, Java 1.8.新建src/main/webapp目錄,在這個目錄下新建web.xml文件,設置web.xml的內容以下:

<?xml version="1.0" encoding="UTF-8"?>

<web-app 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_3_0.xsd"
	      version="3.0">
	      
	<context-param>
		<param-name>org.mule.config</param-name>
		<!-- 設置web application訪問的mule流程文件的位置 -->
		<param-value>WEB-INF/testproject.xml</param-value>
	</context-param>
	
	<!-- 設置Context Listener -->
	<listener>
		<listener-class>org.mule.config.builders.MuleXmlBuilderContextListener</listener-class>
	</listener>
	
	<!-- 設置接收http請求的Mule Servlet -->
	<servlet>
		<servlet-name>muleServlet</servlet-name>
		<servlet-class>org.mule.transport.servlet.MuleReceiverServlet</servlet-class>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>muleServlet</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>	
</web-app>

修改src/main/app目錄下的testproject.xml,將原流程中的http:listener改成servlet inbound enpoint,註釋http:listener-config節點,須要在頭部添加servlet前綴的namespace定義。

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:servlet="http://www.mulesoft.org/schema/mule/servlet"
    xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw" 
	xmlns:metadata="http://www.mulesoft.org/schema/mule/metadata" 
	xmlns:http="http://www.mulesoft.org/schema/mule/http" 
	xmlns="http://www.mulesoft.org/schema/mule/core" 
	xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
	xmlns:spring="http://www.springframework.org/schema/beans" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/dw http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd 
http://www.mulesoft.org/schema/mule/servlet http://www.mulesoft.org/schema/mule/servlet/current/mule-servlet.xsd">
   <!--  <http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/> -->
    <flow name="testprojectFlow">
        <!-- <http:listener config-ref="HTTP_Listener_Configuration" path="Test" allowedMethods="POST" doc:name="HTTP"/> -->
        <servlet:inbound-endpoint path="Test" responseTimeout="10000" doc:name="Servlet"/>
        <dw:transform-message metadata:id="838915ab-810b-4c29-af43-ae0057731e2a" doc:name="Transform Message">
            <dw:set-payload><![CDATA[%dw 1.0
%output application/xml
---
{
	Student: {
		name: payload.name,
		id: payload.id as :number
	}
}]]></dw:set-payload>
        </dw:transform-message>
    </flow>
</mule>

8.這兩個文件改完之後,執行mvn clean package,便可在項目target目錄下生成testproject.war文件。

相關文章
相關標籤/搜索