Monday, February 10, 2014

Resolve activation Module not found issue in WSO2 ESB 4.8.0


When you were upgrading your WSO2 ESB pfrom 4.7.0 or older version to 4.8.0, you might notice the following issue.  Caused by: org.wso2.carbon.CarbonException: Axis Module not found for : activation-2.1.2

This error happens if you migrate the ESB_HOME/repository/deployment/server/servicemetafiles/ folder to the ESB 4.8.0 or a later version. The reason is that activation module is not shipped with ESB anymore, but the servicemetafiles from the older version might still contain references to activation module. Since ESB cannot find that module, it throws the following error, and the proxy service fails to deploy.

To resolve this issue, you have to edit the metafiles to remove references to activation module. There, you might notice, the references like follows. The version might differ.

         <module name="activation" version="2.1.2" type="engagedModules"/>

Simply remove this line from the metafile, and then the proxy services will deploy successfully. You can create a script to do this if you have several proxy services / axis2 services.



[2014-02-10 13:02:09,156] ERROR - PersistenceMetaDataDeployer Unable to handle service initialization. Service: myProxyService
org.wso2.carbon.core.persistence.PersistenceException: Unable to handle service initialization. Service: myProxyService
    at org.wso2.carbon.core.persistence.AbstractPersistenceManager.handleExceptionWithRollback(AbstractPersistenceManager.java:582)
    at org.wso2.carbon.core.persistence.ServicePersistenceManager.handleExistingServiceInit(ServicePersistenceManager.java:747)
    at org.wso2.carbon.core.persistence.file.deployer.PersistenceMetaDataDeployer.deploy(PersistenceMetaDataDeployer.java:96)
    at org.apache.axis2.deployment.repository.util.DeploymentFileData.deploy(DeploymentFileData.java:136)
    at org.apache.axis2.deployment.DeploymentEngine.doDeploy(DeploymentEngine.java:807)
    at org.apache.axis2.deployment.repository.util.WSInfoList.update(WSInfoList.java:144)
    at org.apache.axis2.deployment.RepositoryListener.update(RepositoryListener.java:377)
    at org.apache.axis2.deployment.RepositoryListener.checkServices(RepositoryListener.java:254)
    at org.apache.axis2.deployment.RepositoryListener.startListener(RepositoryListener.java:371)
    at org.apache.axis2.deployment.scheduler.SchedulerTask.checkRepository(SchedulerTask.java:59)
    at org.apache.axis2.deployment.scheduler.SchedulerTask.run(SchedulerTask.java:67)
    at org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask.runAxisDeployment(CarbonDeploymentSchedulerTask.java:79)
    at org.wso2.carbon.core.deployment.CarbonDeploymentSchedulerTask.run(CarbonDeploymentSchedulerTask.java:124)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
    at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:662)
Caused by: org.wso2.carbon.CarbonException: Axis Module not found for : activation-2.1.2
    at org.wso2.carbon.core.persistence.AbstractPersistenceManager.getExistingAxisModule(AbstractPersistenceManager.java:562)
    at org.wso2.carbon.core.persistence.ServicePersistenceManager.handleExistingServiceInit(ServicePersistenceManager.java:472)
    ... 20 more

Saturday, February 1, 2014

Merge WSO2 Carbon products using Maven


It's a common requirement for users of WSO2 to combine multiple WSO2 products together everything can be run within one JVM instance. Because of component architecture of WSO2 Carbon, you can combine features from several into one product which would help some deployments. Some of the common products that get merged together are AS + DSS + BPS, ESB + IS, BAM + CEP. The default way to install products/features is to use the 'Feature Manager' in the management console. But users might want to merge products via Apache Maven. This is done by creating a maven pom.xml, and leveraging carbon-p2-plugin.

Following steps guide you on how to create merge features from different products together.

Pre-requisites -

Apache Maven 3.0.x and Apache Ant are required.

Steps -

  1.  Create a directory, and add the following in a file named pom.xml. Let's call this directory as $BASE_DIR
  2.  Download the P2-repo at http://dist.wso2.org/p2/carbon/releases/turing.tar.gz
  3.  Extract the turing.tar.gz to $BASE_DIR/p2-repo. Now, the content.jar should be located at $BASE_DIR/p2-repo/content.jar
  4.  Add the features you want additionally to the pom.xml. The sample contains two features - org.wso2.carbon.webapp.mgt.feature.group, and org.wso2.carbon.logging.mgt.feature.group. The feature listings should look like the following. The features needed for each product can be found under the p2-profile-gen/pom.xml. For ex. the AS features - https://svn.wso2.org/repos/wso2/carbon/platform/branches/turing/products/as/5.2.1/modules/p2-profile-gen/pom.xml
            <feature>
                <id>org.wso2.carbon.webapp.mgt.feature.group</id>
                <version>${carbon.platform.version}</version>
            </feature> 
    
  5. Enter the command `mvn clean install`
  6. Your combined product will be built at $BASE_DIR/target/wso2carbon-x.x.x.


    <?xml version="1.0" encoding="utf-8"?>
    <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>org.wso2.appserver</groupId>
        <artifactId>wso2appserver-parent</artifactId>
        <version>5.2.0</version>
    </parent>
    
    <modelVersion>4.0.0</modelVersion>
    <artifactId>wso2product-p2-gen</artifactId>
    <packaging>pom</packaging>
    <name>WSO2 Product Profile Generation</name>
    <url>http://wso2.org</url>
    
    <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.8</version>
            <inherited>false</inherited>
            <executions>
                <execution>
                    <id>1-unpack-p2-agent-distribution</id>
                    <phase>test</phase>
                    <goals>
                        <goal>unpack</goal>
                    </goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>org.wso2.carbon</groupId>
                                <artifactId>wso2carbon-core</artifactId>
                                <version>${carbon.kernel.version}</version>
                                <type>zip</type>
                                <overWrite>true</overWrite>
                                <outputDirectory>target</outputDirectory>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
                <execution>
                    <id>unpack-equinox-executable</id>
                    <phase>test</phase>
                    <goals>
                        <goal>unpack</goal>
                    </goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>org.eclipse.equinox</groupId>
                                <artifactId>org.eclipse.equinox.executable</artifactId>
                                <version>3.5.0.v20110530-7P7NFUFFLWUl76mart</version>
                                <type>zip</type>
                                <overWrite>true</overWrite>
                                <outputDirectory>target</outputDirectory>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.wso2.maven</groupId>
            <artifactId>carbon-p2-plugin</artifactId>
            <version>${carbon.p2.plugin.version}</version>
            <executions>
              <execution>
                    <id>3-p2-profile-generation</id>
                    <phase>package</phase>
                    <goals>
                        <goal>p2-profile-gen</goal>
                    </goals>
                <configuration>
                    <profile>default</profile>
                    <metadataRepository>file:${basedir}/p2-repo</metadataRepository>
                    <artifactRepository>file:${basedir}/p2-repo</artifactRepository>
                    <destination>
                        ${basedir}/target/wso2carbon-core-${carbon.kernel.version}/repository/components
                    </destination>
                    <deleteOldProfileFiles>true</deleteOldProfileFiles>
                    <features>
                        <!-- ### Add your features here ### -->
                        <feature>
                            <id>org.wso2.carbon.logging.mgt.feature.group</id>
                            <version>${carbon.platform.version}</version>
                        </feature>
    
                        <feature>
                            <id>org.wso2.carbon.webapp.mgt.feature.group</id>
                            <version>${carbon.platform.version}</version>
                        </feature>
    
                    </features>
                </configuration>
              </execution>
    
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <configuration>
                        <tasks>
                            <replace token="false" value="true"
                                     dir="target/wso2carbon-core-${carbon.kernel.version}/repository/components">
                                <include name="**/bundles.info"/>
                            </replace>
                        </tasks>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
    </build>
    <properties>
       <carbon.platform.version>4.2.0</carbon.platform.version>
       <carbon.kernel.version>4.2.0</carbon.kernel.version>
    </properties>
    
    <repositories>
         <repository>
            <id>wso2-nexus</id>
            <name>WSO2 internal Repository</name>
            <url>http://maven.wso2.org/nexus/content/groups/wso2-public/</url>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>daily</updatePolicy>
                <checksumPolicy>ignore</checksumPolicy>
            </releases>
        </repository>
    </repositories>
    
    <pluginRepositories>
        <pluginRepository>
            <id>wso2-maven2-repository-1</id>
            <url>http://dist.wso2.org/maven2</url>
        </pluginRepository>
        <pluginRepository>
            <id>wso2-maven2-repository-2</id>
            <url>http://dist.wso2.org/snapshots/maven2</url>
        </pluginRepository>
     </pluginRepositories>
    </project>
    

    Wednesday, January 22, 2014

    HowTo: One ESB - Two isolated ActiveMQ instances


    There is sometimes a need to point WSO2 ESB to two separate ActiveMQ instances which are independent from each other. So, there will be different queues in these ActiveMQ instances. And, in the proxy configuration we can specify which ActiveMQ instance to use. Following samples explain how to do this. While this blog post focus on ActiveMQ, you follow quite the same steps for other message brokers like WSO2 MB, IBM MQ etc.


    jms transportReceiver section of axis2.xml would look like below.

    <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
      <parameter name="myTopicConnectionFactory" locked="false">
        <parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
        <parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>
        <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">TopicConnectionFactory</parameter>
        <parameter name="transport.jms.ConnectionFactoryType" locked="false">topic</parameter>
      </parameter>
      
      <parameter name="myQueueConnectionFactory" locked="false">
        <parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
        <parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>
        <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>
        <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
       </parameter>
      
       <parameter name="default" locked="false">
         <parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
         <parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>
         <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>
         <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
       </parameter>
       </transportReceiver>
    
    
    • Note the parameter names that's been set - for queues, there is configurations under 'myQueueConnectionFactory' and under 'default'
    • Now, let's go ahead and add the configurations for the other ActiveMQ instance. For that, add another <parameter> under the jms <transportReceiver> and set the java.naming.provider.url to point to the new ActiveMQ instance. Also note the parameter name you have set. Now, the <transportReceiver> section of axis2.xml would look like the following.
     <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
           <parameter name="myTopicConnectionFactory" locked="false">
                <parameter name="java.naming.factory.initial"  locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
               <parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>
                <parameter name="transport.jms.ConnectionFactoryJNDIName"  locked="false">TopicConnectionFactory</parameter>
                <parameter name="transport.jms.ConnectionFactoryType" locked="false">topic</parameter>
           </parameter>
      
           <parameter name="myQueueConnectionFactory" locked="false">
                <parameter name="java.naming.factory.initial"  locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
               <parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>
                <parameter name="transport.jms.ConnectionFactoryJNDIName"  locked="false">QueueConnectionFactory</parameter>
                <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
           </parameter>
    
    
           <parameter name="secondQueueConnectionFactory" locked="false">
                <parameter name="java.naming.factory.initial"  locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
               <parameter name="java.naming.provider.url" locked="false">tcp://mq2.example.com:61616</parameter>
                <parameter name="transport.jms.ConnectionFactoryJNDIName"  locked="false">QueueConnectionFactory</parameter>
                <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
           </parameter>
      
           <parameter name="default" locked="false">
                <parameter name="java.naming.factory.initial"  locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
               <parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>
                <parameter name="transport.jms.ConnectionFactoryJNDIName"  locked="false">QueueConnectionFactory</parameter>
                <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
           </parameter>
       </transportReceiver>
    

     Now, the ESB configuration is complete. What's left is to instruct a JMS proxy service to which jms connection factory to use. We use the service level parameter, transport.jms.ConnectionFactory, to specify the connection factory name. If you did not specify any name, ESB will use the connection factory configuration under 'default'.

    A sample proxy service that uses the newly defined activemq instance would look like the following. Note the value set for the transport.jms.ConnectionFactory.

    <?xml version="1.0" encoding="UTF-8"?>
    <proxy xmlns="http://ws.apache.org/ns/synapse" name="remoteJMSProxy" transports="jms" startOnLoad="true" trace="disable">
      <target>
        <inSequence>
          <property name="OUT_ONLY" value="true" scope="default"/>
            <send>
              <endpoint>
                <address uri="http://localhost:9763/services/echo" format="soap11"/>
              </endpoint>
            </send>
        </inSequence>
        <outSequence/>
      </target>
    
      <parameter name="transport.jms.ContentType">
        <rules>
          <jmsProperty>contentType</jmsProperty>
            <default>text/xml</default>
        </rules>
      </parameter>
    
      <parameter name="transport.jms.ConnectionFactory">remoteQueueConnectionFactory</parameter>
    
    </proxy>
    
    

    Tuesday, August 27, 2013

    Install Subversion 1.6 in Ubuntu 13.04


    As you know, we can't perform svn commands on a Subversion 1.6 working copy using a Subversion 1.7 client. But in Ubuntu 13.04, the default Subversion package is 1.7. 1.7 is certainly far superior in comparison to 1.6 in terms of speed. But I need to be able to do svn operations on 1.6 working copies. So, I needed two versions of subversion client. The only way I found for this is the following. This might help you too.

    We need Java for this to work. So, if you do not have Java installed, install it before continuing.

    First, install svnkit.. This installs several packages that is needed for svnkit. In 13.04, we get the svnkit 1.7.5 which comes with support for Subversion 1.7.

    sudo apt-get install svnkit

    Now, uninstall svnkit and libsvnkit-java packages. We do not need the 1.7.5 version of these since we need Subversion 1.6 support.

    sudo apt-get remove svnkit libsvnkit-java

    Now, go to a Ubuntu mirror site. I have used the Ubuntu mirror site for Sri Lanka.
    http://lk.archive.ubuntu.com/ubuntu/pool/universe/s/svnkit/

    There, download, and install the following two packages.

    libsvnkit-java_1.3.5+dfsg-3_all.deb
    svnkit_1.3.5+dfsg-3_all.deb

    You can install these by using the command "sudo dpkg -i *deb" command or simply double-clicking in these.

    Now, you have SVN 1.6 installed. To run, use the command jsvn instead of svn.

    jsvn --version

    You might need to set the JAVA_HOME variable if jsvn is failing to locate java. If so, open up /usr/bin/jsvn (which is a simple bash script), and edit the JAVA_HOME variable there accordingly.

    Good luck!












    Thursday, July 18, 2013

    WS-Discovery with CXF-based JAX-WS/JAX-RS in WSO2 AS

    Apache CXF has added out-of-the-box support for WS-Discovery for CXF based JAX-WS and JAX-RS services starting from CXF 2.7.x versions. This post describes how to add this support to WSO2 Application Server with WSO2 Governance Registry (GReg) acting as the DiscoveryProxy receiver.

    All the WSO2 Carbon-based service hosting products like WSO2 Application Server supported WS-Discovery for axis2 services (including data services, proxy services etc.) for a long time. These products can be configured to announce the axis2 services to a Governance Registry instance. But we did not have a way to announce CXF-based JAX-WS and JAX-RS services. But with the out-of-the-box support for WS-Discovery that comes with CXF this is now possible. Following steps describes how to add WS-Discovery to jax webapps.

    1. Download the latest WSO2 Application Server (AS) pack.
    2. Copy the following three jars to {WSO2-AS-HOME}/lib/runtimes/cxf
      • cxf-services-ws-discovery-service  - version 2.7.5
      • cxf-services-ws-discovery-api  - version 2.7.5
      • mina-core - version 2.0.7
    3. Add a CXF Configuration File (cxf.xml) to the WEB-INF/classes/ location of a webapp.
    4. Add a bus property "org.apache.cxf.service.ws-discovery.address" which points to the DiscoveryProxy instance residing in GReg. To do that,
      1. Open up cxf.xml we added to the webapp before. There, under the 'cxf' bean (which uses the class org.apache.cxf.bus.spring.SpringBus), add the property "org.apache.cxf.service.ws-discovery.address" and set it to the DiscoveryProxy service URL of GReg. The default service URL is https://localhost:9443/services/DiscoveryProxy for a WSO2 GReg instance running in local machine with port offset 0. The properties are stored as a map. A sample cxf.xml would look like the following. [1]


    <property name="properties">
        <map>
            <entry key="org.apache.cxf.service.ws-discovery.address" value="https://localhost:9443/services/DiscoveryProxy" />
        </map>
    </property>
    
    

         5. Deploy the webapp


    [1] Sample cxf.xml

    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
        <bean id="cxf" class="org.apache.cxf.bus.spring.SpringBus" destroy-method="shutdown">
            <property name="properties">
                <map>
                    <entry key="org.apache.cxf.service.ws-discovery.address" value="http://localhost:8080/services/DiscoveryProxy" />
                </map>
            </property>
        </bean>
    
        <bean id="org.apache.cxf.bus.spring.BusWiringBeanFactoryPostProcessor" 
            class="org.apache.cxf.bus.spring.BusWiringBeanFactoryPostProcessor"/>
        <bean id="org.apache.cxf.bus.spring.Jsr250BeanPostProcessor" 
            class="org.apache.cxf.bus.spring.Jsr250BeanPostProcessor"/>
        <bean id="org.apache.cxf.bus.spring.BusExtensionPostProcessor" 
            class="org.apache.cxf.bus.spring.BusExtensionPostProcessor"/>
    
    </beans>
     
    
    
    
    

    Sample Hello Message sent from AS to GReg

    <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
                   xmlns:wsa="http://www.w3.org/2005/08/addressing"
                   xmlns:tns="http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01">
        <soap:Header>
            <wsa:Action>http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/Hello</wsa:Action>
            <wsa:MessageID>urn:uuid:5063d2d5-4c8c-4f86-b1a0-9c3a17421af2</wsa:MessageID>
            <wsa:To>http://localhost:8080/services/DiscoveryProxy</wsa:To>
            <wsa:ReplyTo>
                <wsa:Address>http://www.w3.org/2005/08/addressing/none</wsa:Address>
            </wsa:ReplyTo>
        </soap:Header>
        <soap:Body>
            <ns2:Hello xmlns="http://www.w3.org/2005/08/addressing"
                       xmlns:ns2="http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01">
                <EndpointReference>
                    <Address>urn:uuid:e67f250f-9402-4c53-bb1f-da1ffe985ebc</Address>
                </EndpointReference>
                <ns2:Types xmlns:ns3="http://server.hw.demo/">ns3:HelloWorld</ns2:Types>
                <ns2:Scopes/>
                <ns2:XAddrs>/hello_world</ns2:XAddrs>
                <ns2:MetadataVersion>1</ns2:MetadataVersion>
            </ns2:Hello>
        </soap:Body>
    </soap:Envelope>




    Monday, April 29, 2013

    Customize the height of header div of Docbook Webhelp in Docbook 1.78.1


    Recently, I've been getting some queries on how to change the height of the docbook webhelp html output. This has been straight forward in the previous releases where, where you just change the CSS height property of #header, #content, and #leftnavigation. But starting from Docbook xsl release of 1.78.0, you need to do an additional change to get it working because of the introduction of left panel resize handler.

    The left panel resize handler is a feature introduced with 1.78.0 to let the users resize it as they wish in case the contents of left navigation panel is not completely visible. {webhelp-dir}/template/common/splitterInit.js .  There, we divide the webhelp output in to main three sections. the 

    • North pane - #header
    • West pane - #sidebar
    • Center pane - #content

    Then, it gives you the ability to add resize handler to the edges of these three panes. In the case of webhelp, we have suppressed the ability of users to resize the north pane, and kept only the left pane resizable. I believe the reasons are obvious. So, that's a little intro about the resize handler. 

    Now, if you want to customize the header, first you need to few modifications to this file. Here, I'm explaining how to change the height of the #header.

    • First, open {webhelp-dir}/template/common/splitterInit.js
    • Look for the attribute north__minSize in that file. Currently, it has the value 99 which is in pixels. This values over-rides the #height css property in positioning.css. So, change this value to a height you like. 
    • Change the the height of #content, and #leftnavigation appropriately.
    You might want to replace the header-bg.png with a wider image too.


    Friday, April 26, 2013

    Highlights of WSO2 ESB 4.6.0 Documentation

    With WSO2 ESB 4.6.0 release, we have seen lot of improvements in several areas including the Passthru transport which provides far better performance compared to the NIO transport. The comparison include the latest ESBs of Talend, Mule and WSO2 ESB 4.5.1 vs WSO2 ESB 4.6.0. We have chosen to do the benchmark on two different WSO2 ESB versions to show the performance gain we have received. You can find the architectural details at Hiranya's blog How the World's Fastest ESB was Made.

    While these were, one of the complains WSO2 had was the lack of documentation. Some of the cool features go unnoticed because of this, and people have faced some difficulties finding what they want. So, after the release of Carbon 4.0.0 release, WSO2 has given special attention on getting the documentation right. We have held several documentation hackathons, discussions and we I believe we have come up with a decent set of documentation now.

    WSO2 promotes the documentation in the means of the WSO2 documentation site, WSO2 OT knowledge-base articles, blogs etc. This time, we have focused on our official documentation site, http://docs.wso2.org.

    So, I wanted to share the highlights of the documentation of WSO2 ESB 4.6.0. It shows the capabilities of ESB with examples covering quite a lot of use-cases of any given features with examples. We still have a lot to write, but I guess we have come a long way so far.

    The ESB 4.6.0 documentation is located here - http://docs.wso2.org/wiki/display/ESB460/Enterprise+Service+Bus+Documentation

    We can first start with the FAQ page - http://docs.wso2.org/wiki/display/ESB460/FAQ
    This is a good starting page to know whether WSO2 supports a given feature, where we can find the performance numbers, introduction to common components of ESB like endpoints, mediators, sequences etc.

    REST Supporthttp://docs.wso2.org/wiki/display/ESB460/REST+Support
    With WSO2, you can have REST support using either proxy services, or the rest api. Each of these are explained with a message flow diagrams, sample configuration proxy/rest-api, sample request, and response.

    JMS Supporthttp://docs.wso2.org/wiki/display/ESB460/Java+Message+Service+%28JMS%29+Support
    Explains how to use JMS with ActiveMQ, QPid, or the wso2 in-house AMQP implementation, Andes, with WSO2. Under the JMS usecases section, you will see that the common scenarios are covered.

    SAP Integraion -
    http://docs.wso2.org/wiki/display/ESB460/SAP+Integration
    Describes integrating SAP systems with WSO2 ESB

    Clustering WSO2 ESB - Worker-Manager separation with ELB
    http://docs.wso2.org/wiki/display/ESB460/Clustered+Deployment
    Explains how to setup the WSO2 worker-manager separation fronted by WSO2 Elastic Load Balancer.  Has detailed info on each of the configuration that needs to be made.

    The Samples Guidehttp://docs.wso2.org/wiki/display/ESB460/Samples
    The usual samples guide

    ESB Monitoringhttp://docs.wso2.org/wiki/display/ESB460/Monitoring+the+ESB
    Covers the JMX Monitoring, Monitoring the mediation, transport, system statistics among others.
    In addition to this, you can integrate WSO2 Business Activity Monitor (BAM) with WSO2 ESB, and see the detailed statistics employing MapReduce technologies. You can find more info here - http://docs.wso2.org/wiki/display/BAM220/Setting+up+Mediation+Data+Agent

    Performance Tuninghttp://docs.wso2.org/wiki/display/ESB460/Performance+Tuning

    Hope the above are useful.