| {Contents} |
| |
| %{toc} |
| |
| {Platform requirements} |
| |
| Synapse requires Java 1.5 or higher and has been tested on Java runtime environments from Sun, |
| IBM and Apple. Note that the recommended Java version is 1.5 and that there is at least one |
| known issue on Java 1.6 (see below). Synapse is used on various operation systems, including |
| Linux, Mac OS X, Solaris, Windows and AIX, as well as mainframe environments. The recommended |
| operation system for production use is Linux since it offers a wider range of options to tune |
| the TCP/IP stack. This is important to optimize the performance of the NIO HTTP transport. |
| |
| When selecting the environment for deployment, the following known issues should be taken |
| into account: |
| |
| * There is a known issue related to the script mediator when used with Java 1.6 on Windows. |
| It has been observed that with this combination, random failures can occur during startup of |
| Synapse. It is suspected that this issue is caused by a bug in BSF, but there is no solution |
| or workaround yet. |
| |
| * The <<<synapse.bat>>> and <<<synapse.sh>>> scripts included in the binary distribution use |
| the <<<-server>>> option which is not supported by IBM's JRE. This problem can be easily |
| solved by manually editing these scripts to remove the unsupported <<<-server>>> option. |
| See {{{https://issues.apache.org/jira/browse/SYNAPSE-454}SYNAPSE-454}}. |
| |
| * In the past several issues related to subtle concurrency problems have been reported with |
| the non-blocking HTTP transport (which is the recommended HTTP implementation for Synapse) |
| when used on more "exotic" platforms. While this has been improved it is recommended to |
| thoroughly test the HTTP transport before deploying Synapse in a production environment based |
| on these platforms. Please don't hesitate to report any issues using JIRA or by posting a |
| message on the mailing list. |
| |
| {Overview of available deployment options} |
| |
| Synapse can be deployed in two different ways: |
| |
| * Stand-alone, i.e. as an independently managed Java process. |
| |
| * As a J2EE application (WAR) deployed into a simple servlet container (e.g. Tomcat) or a |
| full-featured J2EE application server. |
| |
| [] |
| |
| Since Synapse doesn't rely on any container API, the features offered are the same in both |
| deployment scenarios, with very few exceptions: |
| |
| * There is a minor issue that prevents classpath resources from being used in a WAR deployment. |
| See {{{https://issues.apache.org/jira/browse/SYNAPSE-207}SYNAPSE-207}}. |
| |
| * When deployed as a WAR file, Synapse can be configured with the standard Axis2 servlet based |
| HTTP transport: while the recommended HTTP implementation for Synapse is the NIO HTTP |
| transport, there might be situations where it is preferable or mandatory to use the HTTP |
| protocol implementation of the application server. |
| |
| [] |
| |
| In some scenarios Synapse is used to proxy services that are deployed themselves on an |
| application server. In these cases it would be interesting to deploy Synapse on the same |
| application server and use an in-VM transport instead of HTTP to communicate with these |
| services. Note that for the moment no production-grade implementation of this type of transport |
| exists yet for Axis2, but this might change in the future. |
| |
| Since the features offered are almost the same, the differences between the two deployment |
| options are mainly related to packaging and operational considerations: |
| |
| * Many IT departments prefer deploying J2EE applications than managing stand-alone Java |
| processes, because this allows them to leverage the management and monitoring facilities |
| offered by the application server. |
| |
| * If the use case relies on JNDI resources such as JMS connection factories, JDBC data source |
| and transactions it might be easier to set up and configure these resources when Synapse is |
| deployed directly on the application server that hosts these resources. |
| |
| {Stand-alone deployment} |
| |
| * {Using the standard binary distribution} |
| |
| The easiest way to get started with a stand-alone deployment is using the standard binary |
| distribution ZIP or tarball (see {{download.html}}). It already contains everything that is |
| needed to run Synapse stand-alone and you only need to customize it according to your requirements: |
| |
| * Place your mediations in <<<repository/conf/synapse.xml>>>. |
| |
| * Place any additional files such as WSDL files, endpoint definitions, etc. referenced by your |
| mediations in the <<<repository>>> directory. |
| |
| * Customize <<<repository/conf/axis2.xml>>> to enable and disable transports according to your needs. |
| |
| * Add any additional libraries required by your mediations to the <<<lib>>> directory. Alternatively |
| modify <<<repository/conf/wrapper.conf>>> to add directories and JAR files to the classpath. |
| |
| * Add any required modules to <<<repository/modules>>>. |
| |
| * If necessary, modify <<<lib/log4j.properties>>> to configure logging. |
| |
| [] |
| |
| Since the standard binary distribution also contains samples and documentation, you might want |
| to remove the following folders: |
| |
| * <<<docs>>> |
| |
| * <<<repository/conf/sample>>> |
| |
| * <<<samples>>> |
| |
| [] |
| |
| The <<<bin>>> directory contains Unix and Windows scripts to run Synapse: |
| |
| * <<<synapse.sh>>> and <<<synapse.bat>>> allow to run Synapse in non daemon mode. |
| |
| * <<<synapse-daemon.sh>>> is a Sys V init script that can be used on Unix systems to start and |
| stop Synapse in daemon mode. |
| |
| * <<<install-synapse-service.bat>>> and <<<uninstall-synapse-service.bat>>> can be used on |
| Windows to install Synapse as an NT service. |
| |
| * {Using Maven to build a custom distribution} |
| |
| Building a custom Synapse package based on the standard binary distribution is a manual process |
| and this has some drawbacks: |
| |
| * The JAR files required to run Synapse must be selected manually and it is not easy to identify |
| unused JARs that could be safely removed. |
| |
| * The process is not suitable if there is a requirement for strict configuration management. |
| In particular: |
| |
| * Because of the large number of JAR files, managing the artifacts using a source control |
| repository is not practical. |
| |
| * The process is not repeatable and there is no way to go back to a previous version of |
| the artifacts. |
| |
| * When upgrading to a newer version of Synapse (or when working with snapshot versions), it |
| is necessary either to manually replace the JARs in the current package or to start again |
| from a new version of the standard binary distribution. |
| |
| * If Synapse needs to be deployed with slightly different configurations in multiple |
| environments (e.g. test and production), the corresponding packages need to be prepared |
| manually. |
| |
| [] |
| |
| Note that these problems not only arise in the development and maintenance phases of a project, |
| but also when doing proof of concepts that you want to keep in a safe place for later reuse. |
| One approach to overcome these difficulties is to use Maven to assemble a custom package. When |
| used correctly, this approach solves all of the issues identified above. In particular Maven's |
| dependency management together with the excellent |
| {{{http://maven.apache.org/plugins/maven-assembly-plugin/}assembly plugin}} can be used to |
| automatically select the relevant JARs to include and pull them from Maven repositories. |
| The remaining artifacts required to assemble the package can then be easily stored in a source |
| control repository. |
| |
| Synapse provides a Maven archetype that allows to set up this kind of project in only a few |
| simple steps. To begin with, change to the directory where you want to create the project and |
| issue the following command: |
| |
| ------------------------------------------------------------------- |
| mvn archetype:generate -DarchetypeCatalog=http://synapse.apache.org |
| ------------------------------------------------------------------- |
| |
| In case of problems, you can try to use the latest version of the archetype catalog: |
| |
| ------------------------------------------------------------------- |
| mvn archetype:generate -DarchetypeCatalog=http://svn.apache.org/repos/asf/synapse/trunk/java/src/site/resources |
| ------------------------------------------------------------------- |
| |
| Finally, if you have build Synapse from sources, you don't need to specify a catalog at all: |
| the archetype is added automatically to the local catalog during the build. |
| |
| In any case, when prompted by Maven, select <<<synapse-package-archetype>>> for the Synapse |
| version you want to use. In the next step enter the values for <<<groupId>>>, <<<artifactId>>> |
| and <<<version>>> for your project. You will also be prompted for a package name. Since the |
| archetype doesn't contain any source code, this value is irrelevant and you can continue with the default value. |
| |
| At this stage a Maven project has been created in a subdirectory with the same name as the |
| <<<artifactId>>> specified previously. You should now customize this projects according to your needs: |
| |
| * Add your mediations to <<<repository/conf/synapse.xml>>>. |
| |
| * Customize the dependencies in <<<pom.xml>>>. In particular if additional transports such as |
| JMS are needed, add the required dependencies here. Additional Axis2 modules should also be added here. |
| |
| * Enable and configure additional transports in <<<repository/conf/axis2.xml>>>. |
| |
| * Place any other files referenced by <<<synapse.xml>>> into the <<<repository>>> directory. |
| |
| [] |
| |
| The project is built as usually with the following command: |
| |
| ----------- |
| mvn package |
| ----------- |
| |
| This will create a ZIP file (in the <<<target>>> directory) containing everything that is needed |
| to run your custom Synapse configuration. You only need to uncompress it and use the appropriate |
| script in the <<<bin>>> directory to start Synapse. |
| |
| {WAR deployment} |
| |
| Synapse provides a standard WAR file that can be used to deploy mediations on a servlet container |
| or on a J2EE application server. Note that this WAR file is not part of the downloadable |
| distributions. It can be retrieved from the following location: |
| |
| * {{http://repo1.maven.org/maven2/org/apache/synapse/synapse-war/}} for released versions. |
| |
| * {{http://hudson.zones.apache.org/hudson/job/Synapse%20-%20Trunk/org.apache.synapse$synapse-war/}} |
| for snapshot versions. |
| |
| [] |
| |
| Customization of the Web application is similar to the stand-alone option, but the default |
| directory structure is different: |
| |
| * <<<synapse.xml>>> and <<<axis2.xml>>> are placed into the <<<WEB-INF/conf>>> directory. All |
| other files referenced by your mediations should go to the <<<WEB-INF/repository>>> directory. |
| |
| * Additional libraries must be placed into the standard <<<WEB-INF/lib>>> directory. |
| |
| * Axis2 modules are located in <<<repository/modules>>>. |
| |
| * <<<log4j.properties>>> is located in <<<WEB-INF/classes>>>. |