Search
Calendar
April 2024
S M T W T F S
« Sep    
 123456
78910111213
14151617181920
21222324252627
282930  
Your widget title
Archives

Posts Tagged ‘repackage’

PostHeaderIcon Tutorial: Re-package Mule ESB as a standalone client

Case

You have to deliver Mule 2.2.1 as a standalone application, or, more accurately, as a simple archive ready-to-use by someone else (customer, co-team worker, etc.).

In this tutorial, we assume that:

  • you have to include external jars, eg. MQ and WebLogic jars
  • you have written your XML configuration file for Mule, of which all properties are externalized in an external property file. We don’t mind the actual workflow, we assume you’re skilled enough with Mule 😉

Build

Prerequisites

Prior to building standalone:

  • get Mule ESB 2.2.1 standalone archive, available on MuleSoft website
  • get the JARs needed by MQ
    • providerutil.jar
    • fscontext.jar
    • dhbcore.jar
    • connector.jar
    • commonservices.jar
    • com.ibm.mqjms.jar
    • com.ibm.mq.jar
  • get WebLogic’s wlfullclient.jar
  • install the zip and the jars on your local repository:
    mvn install:install-file -DgroupId=org.mulesource -DartifactId=mule-esb -Dversion=2.2.1 -Dpackaging=zip -Dfile=mule-standalone-2.2.1.zip
    mvn install:install-file -Dfile=wlfullclient.jar  -DgroupId=weblogic -DartifactId=wlfullclient -Dversion=10.3 -Dpackaging=jar -DgeneratePom=true
    mvn install:install-file -Dfile=fscontext.jar  -DgroupId=fscontext -DartifactId=fscontext -Dversion=1.2 -Dpackaging=jar -DgeneratePom=true
    mvn install:install-file -Dfile=providerutil.jar  -DgroupId=fscontext -DartifactId=providerutil -Dversion=1.2 -Dpackaging=jar -DgeneratePom=true
    mvn install:install-file -DgroupId=mq -DartifactId=com.ibm.mq -Dversion=6.0.2.0 -Dpackaging=jar -Dfile=com.ibm.mq.jar
    mvn install:install-file -DgroupId=mq -DartifactId=com.ibm.mqjms -Dversion=6.0.2.0 -Dpackaging=jar -Dfile=com.ibm.mqjms.jar
    mvn install:install-file -DgroupId=mq -DartifactId=dhbcore -Dversion=6.0.2.0 -Dpackaging=jar -Dfile=dhbcore.jar
    mvn install:install-file -DgroupId=mq -DartifactId=commonservices -Dversion=6.0.2.0 -Dpackaging=jar -Dfile=commonservices.jar
    mvn install:install-file -DgroupId=connector -DartifactId=connector -Dversion=1.0 -Dpackaging=jar -Dfile=connector.jar

Files to be edited

  • Create a mule-jonathan.xml file in src/main/resources/ folder.
  • Externalize all properties in mule-jonathan.properties file in src/main/resources/ folder. As you may anticipate it, you will have add this property file in Mule classpath
  • To perform that:
    • Copy the wrapper.conf of Mule standalone archive as src/main/resources/wrapper.conf
    • After the line:
      wrapper.java.classpath.3=%MULE_HOME%/lib/boot/*.jar

      , add the line:

      wrapper.java.classpath.4=%MULE_HOME%/etc
  • in src/main/resources/, create a file start-mule-jonathan.bat, with the content:
    set MULE_HOME=%CD%
    cd %MULE_HOME%\bin
    mule.bat -config mule-jonathan.xml
    

Maven

Here is the pom.xml of our project:

<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <parent>
    <groupId>lalou-jonathan</groupId>
    <artifactId>jonathan-parent</artifactId>
    <version>1.0</version></parent>
  <modelVersion>4.0.0</modelVersion>
  <groupId>lalou.jonathan</groupId>
  <artifactId>jonathan-lalou-standalone-esb</artifactId>
  <packaging>jar</packaging>
  <version>${jonathan.version}</version>
  <name>jonathan-lalou-standalone-esb</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>org.mulesource</groupId>
      <artifactId>mule-esb</artifactId>
      <version>2.2.1</version>
      <type>zip</type></dependency>
    <dependency>
      <groupId>weblogic</groupId>
      <artifactId>wlfullclient</artifactId>
      <version>10.3</version></dependency>
    <dependency>
      <groupId>fscontext</groupId>
      <artifactId>fscontext</artifactId>
      <version>1.2</version></dependency>
    <dependency>
      <groupId>fscontext</groupId>
      <artifactId>providerutil</artifactId>
      <version>1.2</version></dependency>
    <dependency>
      <groupId>mq</groupId>
      <artifactId>com.ibm.mq</artifactId>
      <version>6.0.2.0</version></dependency>
    <dependency>
      <groupId>mq</groupId>
      <artifactId>com.ibm.mqjms</artifactId>
      <version>6.0.2.0</version></dependency>
    <dependency>
      <groupId>mq</groupId>
      <artifactId>commonservices</artifactId>
      <version>6.0.2.0</version></dependency>
    <dependency>
      <groupId>mq</groupId>
      <artifactId>dhbcore</artifactId>
      <version>6.0.2.0</version></dependency>
    <dependency>
      <groupId>connector</groupId>
      <artifactId>connector</artifactId>
      <version>1.0</version></dependency></dependencies>
  <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <excludes>
          <exclude>**/*</exclude></excludes></resource></resources>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2-beta-2</version>
        <configuration>
          <descriptors>
            <descriptor>src/main/assembly/assembly.xml</descriptor></descriptors></configuration>
        <executions>
          <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
</project>

Maven Assembly

We will use Maven Assembly: this plugin allows unpack archives, copy files, insert files, delete folders, etc.

Here is the assembly.xml file that should be located in src/main/assembly/ folder of your project. The code is commented so that you understand what we do.

<assembly xmlns="http://maven.apache.org/xsd/1.1.0/assembly"           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"           xsi:schemaLocation="http://maven.apache.org/xsd/assembly-1.1.2.xsd                               http://maven.apache.org/xsd/1.1.2/assembly">
  <id/>
  <baseDirectory>jonathan-lalou-standalone-esb-${version}</baseDirectory>
  <formats>
    <format>zip</format></formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
    <dependencySet>
      <outputDirectory>/</outputDirectory>
      <includes>
        <include>org.mulesource:mule-esb</include></includes>
      <unpack>true</unpack>
      <unpackOptions>
        <excludes>
          <!-- excluse original wrapper.conf, to include our tuned wrapper.conf-->
          <exclude>**/conf/wrapper.conf</exclude>
          <!--remove the these folders, useless in a standalone client-->
          <exclude>**/examples/**</exclude>
          <exclude>**/docs/**</exclude>
          <exclude>**/src/**</exclude></excludes></unpackOptions></dependencySet>
    <dependencySet>
      <outputDirectory>mule-standalone-2.2.1/lib/user</outputDirectory>
      <excludes>
        <exclude>org.mulesource:mule-esb</exclude></excludes></dependencySet></dependencySets>
  <fileSets>
    <fileSet>
      <directory>${basedir}/src/main/resources</directory>
      <outputDirectory>/mule-standalone-2.2.1/etc</outputDirectory>
      <includes>
        <!--include the property file -->
        <include>**/*jonathan*.properties</include></includes></fileSet>
    <fileSet>
      <directory>${basedir}/src/main/resources</directory>
      <outputDirectory>/mule-standalone-2.2.1/bin</outputDirectory>
      <includes>
        <!-- include Mule XML config file-->
        <include>**/*jonathan*.xml</include></includes></fileSet>
    <fileSet>
      <directory>${basedir}/src/main/resources</directory>
      <outputDirectory>/mule-standalone-2.2.1/conf</outputDirectory>
      <includes>
        <!-- modified wrapper.conf to stake in account the etc/ folder, containing the property file-->
        <include>**/wrapper.conf</include></includes></fileSet>
    <fileSet>
      <directory>${basedir}/src/main/resources</directory>
      <outputDirectory>/mule-standalone-2.2.1/</outputDirectory>
      <includes>
        <include>**/*-mule-jonathan.bat</include>
      </includes>
    </fileSet>
  </fileSets>
</assembly>

Build process

To build go to the folder yourproject/jonathan, then launch a mvn clean install. A complete installation package is output on target folder: jonathan-lalou-standalone-esb-1.0.zip.

The archive is built thanks to Maven Assembly plugin.

Install

Install

Copy or move the archive jonathan-lalou-standalone-esb-1.0.zip to any folder of your choice. Then unzip it.

(optionnal) Checks

Tree

Here is a tree of the installation, with some important file that must appear:

+---start-mule-jonathan.bat
+---bin
¦   +---mule-jonathan.xml
+---conf
¦   +---wrapper.conf
+---etc
¦   +---mule-jonathan.properties
+---lib
¦   +---boot
¦   ¦   +---exec
¦   +---endorsed
¦   +---mule
¦   +---opt
¦   +---user
¦       +------com.ibm.mq-6.0.2.0.jar
¦       +------com.ibm.mqjms-6.0.2.0.jar
¦       +------commonservices-6.0.2.0.jar
¦       +------connector-1.0.jar
¦       +------dhbcore-6.0.2.0.jar
¦       +------fscontext-1.2.jar
¦       +------providerutil-1.2.jar
¦       +------wlfullclient-10.3.jar
¦       +------connector-1.0.jar
+---licenses
+---logs

Files

Check the files listed above in the tree appear. Besides, check the conf/wrapper.conf file contains the line wrapper.java.classpath.4=%MULE_HOME%/etc

Config

Edit etc/mule-jonathan.properties file and set the right properties.

Use

Execute start-mule-jonathan.bat to launch Mule on Windows. On first attempt, Mule will display the user licence and ask you your confirmation you accept the terms of the agreement.