Social Icons

twitterfacebookgoogle pluslinkedinrss feed

Featured Posts

Friday, February 14, 2014

WSO2 Governance Registry - Apply Tags using Handler

There can be scenarios, where users want to apply tags into their resources, while resource is inserted. I am writing this post based on my answer provided to this Stack Overflow question.

Question was on how to apply a tag into a service in WSO2 Governance Registry at the time of the service creation. We can use Registry Handler for achieving this requirement. Handlers are the well-known extension points in WSO2 Governance Registry.

"Handlers are pluggable components, that contain custom processing logic for handling resources. All handlers extend an abstract class named Handler, which provides default implementations for resource handling methods as well as a few utilities useful for concrete handler implementations."[WSO2 Governance Registry Docs]

I have modified handler sample, which is shipped with Governance Registry pack. Using above link please download the G-Reg pack and handler sample is located at GREG_HOME/samples/handler.

 
public void put(RequestContext requestContext) throws RegistryException {

 if (!CommonUtil.isUpdateLockAvailable()) {
            return;
        }
        CommonUtil.acquireUpdateLock();
        try {
   String resourcePath = requestContext.getResourcePath().getPath();
   Registry registry = requestContext.getRegistry();
   registry.applyTag(resourcePath, "CustomTag");

  } finally {
   CommonUtil.releaseUpdateLock();
  }
 }

Compiled jar file need to be added into GREG_HOME/repository/components/dropins folder and register handler using either management console or registry.xml file.

<handler class="org.wso2.carbon.registry.samples.handler.CustomServiceHandler">
    <filter class="org.wso2.carbon.registry.core.jdbc.handlers.filters.MediaTypeMatcher">
        <property name="mediaType">application/vnd.wso2-service+xml</property>
    </filter>
</handler>

When you are inserting a new service, this handler will get hit and it will add the given tag into the Service.

Thursday, November 21, 2013

How to configure WSO2 G-Reg with ELB - Updated

This is the updated post for configuring WSO2 ELB 2.1.0 and G-Reg 4.6.0 releases. If you are using earlier releases, please refer the early post.

 When we are fronting WSO2 ELB(Elastic Load Balancer) for a WSO2 G-Reg(Governance Registry) node, all the incoming messages will go through ELB node and it will act as a HTTP and HTTPS proxy to GREG node. So when you configure ELB to the GREG front, GREG won't be able to access alone without the ELB.

1. Download WSO2 ELB and WSO2 GREG. Rename the extracted ELB as ELB-HOME and extracted GREG as GREG-HOME.

ELB Configuration 

2. Go to ELB-HOME/repository/conf/loadbalancer.conf and add the following entry. There can be multiple entries according to the clustering requirements.

 governance {

  domains   {

           wso2.governance.domain {

               tenant_range *;
               group_mgt_port 4000;
               mgt{
                   hosts governance.local.wso2.com;
               }
           }
       }
}

 3. Update hosts files in nodes with relevant IP and Domain information. In my example, G-Reg and ELB will be hosted on the same node.

127.0.0.1 governance.local.wso2.com 
if not this governance.local.wso2.com domain should be mapped into ELB node.

 4 Navigate to the repository/conf/axis2 directory and open the axis2.xml file and update localMemberPort parameter value as below. This port number should not conflict with any other port.

<parameter name="localMemberPort">5000</parameter>

Greg Configuration

4. Then clustering should be enabled in G-Reg as well. To enable it, go to GREG-HOME/repository/conf/axis2/axis2.xml and modify clustering configuration as below.


<clustering class="org.wso2.carbon.core.clustering.hazelcast.HazelcastClusteringAgent" enable="true">
 <parameter name="membershipScheme">wka </parameter> 
</clustering>

 5. Uncomment localmemberhost element in GREG-HOME/repository/conf/axis2/axis2.xml and specify the IP address (or host name) to be exposed to members of the cluster.

<parameter name="localMemberHost">127.0.0.1</parameter>


6. Then define clustering domain information.(in GREG-HOME/repository/conf/axis2/axis2.xml). This "domain" name value should be same as in loadbalancer.conf.

<parameter name="domain">wso2.governance.domain</parameter>
<parameter name="localMemberPort">4250</parameter>

7. As shown below, add "subDomain" information into the same axis2.xml file.

<parameter name="properties">
    <property name="backendServerURL" value="https://${hostName}:${httpsPort}/services/"/>
    <property name="mgtConsoleURL" value="https://${hostName}:${httpsPort}/"/>
    <property name="subDomain" value="mgt"/>
   </parameter>

8. Add load balancer IP address or host information in to same axis2.xml file. In this example scenario IP address is 127.0.0.1.

<members>
     <member>
        <hostname>127.0.0.1 </hostname>
        <port>4000</port>
     </member>
  </members>
</members>

9. Open the GREG-HOME/repository/conf/tomcat/catalina-server.xml file and add HTTP and HTTPS proxy port information to that file.

<connector port="9763" protocol="org.apache.coyote.http11.Http11NioProtocol" proxyport="8280"/> 
<connector port="9443" protocol="org.apache.coyote.http11.Http11NioProtocol" proxyport="8243"/>


10. Go to GREG-HOME/repository/conf/carbon.xml file and update the "HostName" and "MgtHostName" as below.

<hostname>governance.local.wso2.com</hostname>
<mgthostname>governance.local.wso2.com</mgthostname>

11. This step only need to be followed if you are hosting G-Reg and ELB both in same node. In this sample we have configured both ELB and G-Reg in same node. Therefore we should avoid port conflicts between ELB and G-Reg. To avoid such problems we can use "Offset" entry in carbon.xml file. Go to GREG-HOME/repository/conf/carbon.xml and change port offset value.

<offset>1</offset>

12. Start the ELB instance

13. Start the G-Reg instance(s)

14.You can access G-Reg instance using following URL        "https://governance.local.wso2.com:8243/carbon/"

Monday, September 30, 2013

Manage SOAPAction of the Out Message

 
 When you are sending a request message to a backend service through WSO2 ESB, there could be some scenarios where you need to remove or change the SOAPAction header value.


Using header mediator and property mediator which are available in WSO2 ESB, we can remove SOAPAction or set it empty.

Set SOAPAction as Empty:
<header name="Action" value=""/>
<property name="SOAPAction" scope="transport" value=""/>

Remove SOAPAction:
<header action="remove" name="Action"/> 
<property action="remove" name="SOAPAction" scope="transport"/>

Modify SOAPAction:

When setting SOAPAction one of the below approches can be used

1) .
<header name="Action" value="fixedAction"/>

2).
<header expression="xpath-expression" name="Action"/>

More Info: Header Mediator

TCPMon:

If we need to monitor the messages getting passed between ESB and backend service, we can point TCPMon[1] in between back-end and ESB. Using TCPMon, we can monitor messages and their header information(Including SOAPAction).

Bottom of the TCPMon there is a special control available to view Messages in XML format.

[1]. http://ws.apache.org/tcpmon/tcpmontutorial.html

Sunday, September 29, 2013

Oracle JDBC driver for Maven


When you are adding the oracle jdbc driver to your project as a dependency, you will not be able to get it resolved from the public repository. This is happening due to license compatibility issue. Therefore you have to manual install Oracle JDBC driver into your local repo or private repo.

This is not limited to Oracle JDBC driver, there are some JARs which are not available in the public repos. Oracle JDBC drover can be downloaded from their web site

When you are adding a JAR to the repository or project, you can refer "Maven add jar without install" post or below command.

mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=11.2.0.3.0 -Dpackaging=jar -Dfile=ojdbc.jar -DgeneratePom=true

 If you need to add JARs in to Central Repository this Maven guide will help.