This page contains information regarding integrating/supporting ESB4.x with AS5.1.0.GA
Directory structure change
The majority of jars that were previously located in jbossesb.sar/lib have been moved to deployers/esb.deployer/lib.
Deployers
In AS5 the single JBoss4ESBDeployer is replaced by a number of JBoss AS deployers and supporting classes to deploy .esb (4.x) archives on JBoss AS 5.x.
The different deployers come into play at different stages of deployment. The deployers don't really deploy anything but only create/add metadata (EsbMetaData) information that will later be used to by the EsbDeployer to create a BeanMetaData representing an EsbDeployment.
The MicroContainer will take care of creating the real EsbDeployment instance and take care of calling its lifecycle metods for us.
DeploymentStage | Deployer | Description | ||
---|---|---|---|---|
PARSE | EsbConfigParser | Is responsible for parsing the .esb configuration and creating an EsbMetaData instance representing the deployment. | ||
POST_PARSE | EsbWebServiceDeployer | Is responsible for examining the EsbMetaData and generating web service metadata that will be picked up by JBoss Web Service deployers. | ||
POST_CLASSLOADER | EsbWsdlDeployer | Is responsible for examining the EsbMetaData and generating the wsdl, which requries usage of classloaders hence this deployer is targeted after classloaders have been created. | ||
| EsbDeployer | This is where the actual bean meta data that represents an esb deployment is created, EsbDeployment. |
Deployers configuration
The deployers configuration is located in <server-name>/deployers/esb.deployers.
Directory structure for esb.deployers
File/Directory | Description |
---|---|
actionArtifactMap.properties | Properties file containing an action name to .esb archive mapping.This enables a set of "default" actions to be specified in jboss-esb.xml files without the need to explictly add the .esb archives of those actions to the depends element in deployment.xml |
esb.juddi.xml | Juddi configuration. |
jbossesb-properties.xml | The ESB configuration file. |
lib | The main jars for the ESB. |
META-INF/esb-deployers-jboss-beans.xml | The beans (deployers) configuration for the Microcontainer. |
META-INF/jboss-structure.xml | A Microcontainer configuration file that describes the structure for the esb.deployer. For example it specifies that the jars can be located in the lib directory. |
privateKeyStore | The private keystore. |
publicKeyStore | The public keystore. |
EsbConfigParser configuration
As the other deployers this deployer is configured in esb-deployers-jboss-beans.xml.
A configuration example:
<bean name="EsbConfigParser" class="org.jboss.soa.esb.listeners.deployers.mc.EsbConfigParser">
<property name="esbDeploymentPrefix">jboss.esb:deployment=</property>
<property name="warDeploymentPrefix">jboss.web.deployment:war=</property>
<property name="actionArtifactsFile">/actionArtifactMap.properties</property>
</bean>
Property | Description |
---|---|
esbDeploymentPrefix | This is the prefix that a ESB archive deployments will have in JBoss AS. Defaults to 'jboss.esb:deployment=' |
warDeploymentPrefix | This is the prefix that a war archive deployments will have in JBoss AS. These are used for .war archives specified in the 'esb-depends' section of a deployment.xml file. Defaults to 'jboss.web.deployment:war='. |
actionArtifactsFile | Properties file containing an action name to .esb archive mapping. Defaults to '/actionArtifactMap.properties'. |
EsbWebServiceDeployer configuration
Does not have any configuration properties.
A configuration example:
<bean name="EsbWebServiceDeployer" class="org.jboss.soa.esb.listeners.deployers.mc.EsbWebServiceDeployer"/>
EsbWsdlDeployer configuration
Does not have any configuration properties.
A configuration example:
<bean name="EsbWsdlDeployer" class="org.jboss.soa.esb.listeners.deployers.mc.EsbWsdlDeployer"/>
EsbDeployer configuration
As the other deployers this deployer is configured in esb-deployers-jboss-beans.xml.
A configuration example:
<bean name="EsbDeployer" class="org.jboss.soa.esb.listeners.deployers.mc.EsbDeployer">
<property name="esbBeanPrefix">jboss.esb</property>
<property name="defaultDependencies">
<list elementClass="java.lang.String">
<value>jboss.esb:service=ESBRegistry</value>
<value>jboss.esb:service=JuddiRMI</value>
</list>
</property>
</bean>
Property | Description |
---|---|
esbBeanPrefix | Prefix used for the BeanMetaData and for the managenment bean name |
defaultDependencies | A list of additional dependencies that will be added to deployments as dependencies. |
How to try it out
In the process of adding support for AS 5 we discovered a few issues that needed to be fixed in AS for the ESB to work. This is the reason why you will need to check out a specific branch of AS to be able to test this. These fixes are scheduled for the next release for AS which is 5.1.0.GA.
If you'd like to try this out then please follow the instructions below.
Installation steps.
- Download JBoss AS 5.1.0.GAand unzip it.
- svn checkout http://anonsvn.jboss.org/repos/labs/labs/jbossesb/trunk.
- Run 'ant dist' from the product directory
- Edit product/install/deployment.properties and set org.jboss.esb.server.home to point to the unzipped server from step 1.
- Run 'ant deploy' from the product/install directory.
- Startup the server (with JBOSS_HOME set to the install folder of JBoss AS 5.1.0.GA).
- Try out some quickstarts or deploy your .esb archive.
Depending on whether you access certain application (like the jopr console) you might need to increase the memory settings when starting the server (in run.conf):
-Xms128m -Xmx512m -XX:PermSize=200m -XX:MaxPermSize=500m
Running the integration tests:
- Edit qa/test.properties and set org.jboss.esb.server.home to point to the same location as in step 6 above.
- Run 'ant -f integration-build.xml integration' from the product directory.
Java 6
When using Java 6 the following jars are required to be available in <server_home>/lib/endorsed
1. jaxb-api.jar
2. jaxb-impl.jar
3. jaxb-xjc.jar
4. jbossws-native-jaxrpc.jar
5. jbossws-native-jaxws-.jar
6. jbossws-native-jaxws-ext.jar
7. jbossws-native-saaj.jar
Scoped Deployments
In ESB 4.x you can specify that a deployment be scoped by configuring this in deployment.xml:
<jbossesb-deployment>
<depends>jboss.esb:test=server</depends>
<depends>jboss.esb.qa.junit.destination:service=Queue,name=esb_gateway_channel_versioned</depends>
<depends>jboss.esb.qa.junit.destination:service=Queue,name=esb_channel_versioned</depends>
<loader-repository>
org.jboss.soa.esb:loader=simple-scoped
<loader-repository-config>
java2ParentDelegaton=false
</loader-repository-config>
</loader-repository>
</jbossesb-deployment>
The AS5 deployers ignore this section of deployment.xml. Instead a ESB 4.x scoped deployment
users will be required to create a META-INF/jboss-classloading.xml:
<classloading xmlns="urn:jboss:classloading:1.0" domain="simple-scoped" parent-first="false" />
This was discussed and agreed upon in this dev forum thread.
SubDeployments
Prior to AS 5 sub-deployments in an .esb archive could be located anywhere, in the root, in a subdirectory somewhere.
This has changed with AS 5 and this post is meant to list the options that users have when upgrading.
This really only effects users that currently have sub-deployments in a sub-directory. For those that have sub-deployments in the root of the .esb archive nothing needs to be done.
We are now defining a GroupStructure in deployers/esb.deployers/META-INF/esb-deployers-jboss-beans.xml:
<bean name="GroupingStructure" class="org.jboss.soa.esb.listeners.deployers.mc.GroupingStructure">
<property name="shortCircuitFilter">
<inject bean="EsbFilter"/>
</property>
<property name="metaDataPaths">
<array elementClass="java.lang.String">
<value>META-INF</value>
<value>.</value>
</array>
</property>
<property name="libs">
<set elementClass="java.lang.String">
<value>.</value>
<value>jars</value>
</set>
</property>
<property name="libFilter">
<inject bean="JarFilter"/>
</property>
<property name="groups">
<set elementClass="java.lang.String">
<value>.</value>
<value>wars</value>
</set>
</property>
<property name="groupFilter">
<inject bean="WarFilter"/>
</property>
</bean>
<bean name="EsbFilter" class="org.jboss.soa.esb.listeners.deployers.mc.util.VfsFileFilter">
<constructor>
<parameter>.esb</parameter>
</constructor>
</bean>
<bean name="JarFilter" class="org.jboss.soa.esb.listeners.deployers.mc.util.VfsFileFilter">
<constructor>
<parameter>.jar</parameter>
</constructor>
</bean>
<bean name="WarFilter" class="org.jboss.soa.esb.listeners.deployers.mc.util.VfsFileFilter">
<constructor>
<parameter>.war</parameter>
</constructor>
</bean>
So by default we can have jars in either the root, or in a sub directory named 'jars'.
And we can have wars in either the root, or in a sub directory named 'wars'.
In the cases where users want to have wars (or other types of
deployments) in sub-directories that have different names. they have
the following options:
1. Renaming their sub directory to 'wars'.
2. Adding their sub directory names to the 'groups' list above.
3. Add a META-INF/jboss-structure.xml to their .esb archive:
<?xml version="1.0" encoding="UTF-8"?>
<structure>
<context>
<path name=""/>
<metaDataPath>
<path name="META-INF"/>
<path name="."/>
</metaDataPath>
<classpath>
<path name=""/>
<path name="." suffixes=".jar"/>
</classpath>
</context>
<context>
<path name="subdir/testwar.war"/>
<metaDataPath>
<path name="WEB-INF"/>
</metaDataPath>
<classpath>
<path name="subdir/testwar.war/WEB-INF/classes"/>
</classpath>
</context>
</structure>
Windows script error
The windows run.bat script, included in the AS 5.1.0 GA release, contains an error that prevents the JDK tools jar from being added to the classpath. This is required for compilation of the wise WS proxies and can be fixed with a small modification. Please refer to JBESB-2747 for details.
CI Build
Port Conflict
When installing AS5 on the build servers I noticed a port conflict for the AJP Connector port 8009. This has now been configured in default/deploy/jbossweb.sar/server.xml to port 8019 as shown below:
<!-- A AJP 1.3 Connector on port 8009 -->
<Connector protocol="AJP/1.3" port="8019" address="${jboss.bind.address}"
redirectPort="8443" />
This port conflict is caused by the hudson service executing on the CI machines.
Comments