Showing posts with label WS. Show all posts
Showing posts with label WS. Show all posts

Tuesday, December 3, 2013

WSO2 ESB Web-service based remote registry mount

Since WSO2 products are based on Carbon stack, you don't have to store your collections and resources within the same server itself.You can store those across multiple locations.

In this blog post I'm using WSO2 GREG and WSO2 ESB to explain this topic further.

There are multiple methods to mount remote registry in-to the ESB,

1. JDBC based remote configuration
2. Atom based remote configuration
3. Webservice based remote configuration

1st method is the WSO2 recommended approach in production environments as other two methods are not supporting transactions.But there might be scenarios where you can't directly connect to your registry database due to security restrictions.

I'm going to explain the 3rd method further in this blog post.
Before moving forward, lets download and setup Greg and ESB products in my local machine.

1. Start WSO2 Greg by running ./wso2server.sh within <Greg_HOME>/bin directory.

by default all WSO2 products bind to following ports,
HTTPS port  : 9443
HTTP port    : 9763

Since I'm running both products on the same machine for the purpose of writing this blog post I have to start WSO2-ESB with a port offset.

2. Open <ESB_HOME>/repository/conf/carbon.xml and change the offset a,
<Offset>1</Offset>
Lets configure our remote registry instance now, using Webservice configuration.

3. Open <ESB_HOME>/repository/conf/registry.xml and add the following configuration.
<remoteInstance url="https://10.100.0.128:9443/registry">
   <id>instanceid</id>
   <username>admin</username>
   <password>admin</password>
   <type>ws</type>
</remoteInstance>

<mount path="/_system/governance" overwrite="true">
   <instanceId>instanceid</instanceId>
   <targetPath>/_system/governance</targetPath>
</mount>
<mount path="/_system/config" overwrite="true">
   <instanceId>instanceid</instanceId>
   <targetPath>/_system/config</targetPath>
</mount>
Use correct "remoteInstance url" (only have to update the IP address) according to your environment. "instanceid" is the remote registry instance ID(no need to update this value)."username and password" values are to login to the remote registry instance.

In my sample I'm using two mount configurations. "mount path" describes the path where you want to mount. Overwrite variable describes whether you overwrite existing resource or not.It can be any value from true, false, virtual or simply nothing as this parameter is optional. Keep the "instanceId" value as same as in the "id" of remoteInstance configuration above."targetPath" is the path inside remote registry which we are going to mount.

Above configuration I'm going to overwrite both governance and config collections inside ESB from the remote registry collections.

 4. Start WSO2 ESB by running ./wso2server.sh within <ESB_HOME>/bin directory.

Verify the status of WS remote registry mount by,
  i)  Log in to the ESB server's carbon console
  ii) Browse the Registry. Now you should see the config and governance collections(WS remote mounted using my sample registry.xml) are updated with arrow icons.


NOTE-

I en-counted following error while working with WSO2 ESB 4.5.1 and WSO2 GREG 4.5.2, you better try the above sample with latest version of WSO2 Greg and WSO2 ESB.

[2013-12-03 11:42:05,929] ERROR - FIXTransportServiceComponent Error while activating FIX transport management bundle
java.lang.NullPointerException
    at java.io.ByteArrayInputStream.<init>(ByteArrayInputStream.java:89)
    at org.wso2.carbon.core.transports.TransportPersistenceManager.getTransportElement(TransportPersistenceManager.java:127)
    at org.wso2.carbon.core.transports.TransportPersistenceManager.saveTransportConfiguration(TransportPersistenceManager.java:285)
    at org.wso2.carbon.transport.fix.internal.FIXTransportServiceComponent.activate(FIXTransportServiceComponent.java:65)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.eclipse.equinox.internal.ds.model.ServiceComponent.activate(ServiceComponent.java:252)
    at org.eclipse.equinox.internal.ds.model.ServiceComponentProp.activate(ServiceComponentProp.java:146)
    at org.eclipse.equinox.internal.ds.model.ServiceComponentProp.build(ServiceComponentProp.java:346)
    at org.eclipse.equinox.internal.ds.InstanceProcess.buildComponent(InstanceProcess.java:588)
    at org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(InstanceProcess.java:196)
    at org.eclipse.equinox.internal.ds.Resolver.getEligible(Resolver.java:328)
    at org.eclipse.equinox.internal.ds.SCRManager.serviceChanged(SCRManager.java:221)
    at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:104)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:861)
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
    at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
    at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:819)
    at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:771)
    at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130)
    at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:214)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:433)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:451)
    at org.wso2.carbon.core.init.CarbonServerManager.initializeCarbon(CarbonServerManager.java:513)
    at org.wso2.carbon.core.init.CarbonServerManager.removePendingItem(CarbonServerManager.java:290)
    at org.wso2.carbon.core.init.PreAxis2ConfigItemListener.bundleChanged(PreAxis2ConfigItemListener.java:118)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:847)
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
    at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
[2013-12-03 11:42:05,944] ERROR - JMSTransportServiceComponent Error while activating JMS transport management bundle
java.lang.NullPointerException
    at java.io.ByteArrayInputStream.<init>(ByteArrayInputStream.java:89)
    at org.wso2.carbon.core.transports.TransportPersistenceManager.getTransportElement(TransportPersistenceManager.java:127)
    at org.wso2.carbon.core.transports.TransportPersistenceManager.saveTransportConfiguration(TransportPersistenceManager.java:285)
    at org.wso2.carbon.transport.jms.internal.JMSTransportServiceComponent.activate(JMSTransportServiceComponent.java:69)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.eclipse.equinox.internal.ds.model.ServiceComponent.activate(ServiceComponent.java:252)
    at org.eclipse.equinox.internal.ds.model.ServiceComponentProp.activate(ServiceComponentProp.java:146)
    at org.eclipse.equinox.internal.ds.model.ServiceComponentProp.build(ServiceComponentProp.java:346)
    at org.eclipse.equinox.internal.ds.InstanceProcess.buildComponent(InstanceProcess.java:588)
    at org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(InstanceProcess.java:196)
    at org.eclipse.equinox.internal.ds.Resolver.getEligible(Resolver.java:328)
    at org.eclipse.equinox.internal.ds.SCRManager.serviceChanged(SCRManager.java:221)
    at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:104)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:861)
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
    at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
    at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:819)
    at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:771)
    at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130)
    at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:214)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:433)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:451)
    at org.wso2.carbon.core.init.CarbonServerManager.initializeCarbon(CarbonServerManager.java:513)
    at org.wso2.carbon.core.init.CarbonServerManager.removePendingItem(CarbonServerManager.java:290)
    at org.wso2.carbon.core.init.PreAxis2ConfigItemListener.bundleChanged(PreAxis2ConfigItemListener.java:118)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:847)
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
    at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
[2013-12-03 11:42:05,952] ERROR - MailTransportServiceComponent Error while activating the mail transport management bundle
java.lang.NullPointerException
    at java.io.ByteArrayInputStream.<init>(ByteArrayInputStream.java:89)
    at org.wso2.carbon.core.transports.TransportPersistenceManager.getTransportElement(TransportPersistenceManager.java:127)
    at org.wso2.carbon.core.transports.TransportPersistenceManager.saveTransportConfiguration(TransportPersistenceManager.java:285)
    at org.wso2.carbon.transport.mail.internal.MailTransportServiceComponent.activate(MailTransportServiceComponent.java:65)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.eclipse.equinox.internal.ds.model.ServiceComponent.activate(ServiceComponent.java:252)
    at org.eclipse.equinox.internal.ds.model.ServiceComponentProp.activate(ServiceComponentProp.java:146)
    at org.eclipse.equinox.internal.ds.model.ServiceComponentProp.build(ServiceComponentProp.java:346)
    at org.eclipse.equinox.internal.ds.InstanceProcess.buildComponent(InstanceProcess.java:588)
    at org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(InstanceProcess.java:196)
    at org.eclipse.equinox.internal.ds.Resolver.getEligible(Resolver.java:328)
    at org.eclipse.equinox.internal.ds.SCRManager.serviceChanged(SCRManager.java:221)
    at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:104)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:861)
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
    at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
    at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:819)
    at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:771)
    at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130)
    at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:214)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:433)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:451)
    at org.wso2.carbon.core.init.CarbonServerManager.initializeCarbon(CarbonServerManager.java:513)
    at org.wso2.carbon.core.init.CarbonServerManager.removePendingItem(CarbonServerManager.java:290)
    at org.wso2.carbon.core.init.PreAxis2ConfigItemListener.bundleChanged(PreAxis2ConfigItemListener.java:118)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:847)
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
    at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
[2013-12-03 11:42:05,960] ERROR - VFSTransportServiceComponent Error while initializing VFS transport management bundle
java.lang.NullPointerException
    at java.io.ByteArrayInputStream.<init>(ByteArrayInputStream.java:89)
    at org.wso2.carbon.core.transports.TransportPersistenceManager.getTransportElement(TransportPersistenceManager.java:127)
    at org.wso2.carbon.core.transports.TransportPersistenceManager.saveTransportConfiguration(TransportPersistenceManager.java:285)
    at org.wso2.carbon.transport.vfs.internal.VFSTransportServiceComponent.activate(VFSTransportServiceComponent.java:66)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.eclipse.equinox.internal.ds.model.ServiceComponent.activate(ServiceComponent.java:252)
    at org.eclipse.equinox.internal.ds.model.ServiceComponentProp.activate(ServiceComponentProp.java:146)
    at org.eclipse.equinox.internal.ds.model.ServiceComponentProp.build(ServiceComponentProp.java:346)
    at org.eclipse.equinox.internal.ds.InstanceProcess.buildComponent(InstanceProcess.java:588)
    at org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(InstanceProcess.java:196)
    at org.eclipse.equinox.internal.ds.Resolver.getEligible(Resolver.java:328)
    at org.eclipse.equinox.internal.ds.SCRManager.serviceChanged(SCRManager.java:221)
    at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:104)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:861)
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
    at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
    at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:819)
    at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:771)
    at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130)
    at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:214)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:433)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:451)
    at org.wso2.carbon.core.init.CarbonServerManager.initializeCarbon(CarbonServerManager.java:513)
    at org.wso2.carbon.core.init.CarbonServerManager.removePendingItem(CarbonServerManager.java:290)
    at org.wso2.carbon.core.init.PreAxis2ConfigItemListener.bundleChanged(PreAxis2ConfigItemListener.java:118)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:847)
    at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
    at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340) 


You can find out official WSO2 documentation for this topic at [1].


[1] http://docs.wso2.org/display/ESB460/Remote+Registry+Instance+Configuration#RemoteRegistryInstanceConfiguration-WebService-BasedRemoteInstanceConfiguration

Wednesday, November 27, 2013

Explore WSO2 Carbon admin Web services

The Carbon Management console is popular among WSO2 Product users.Without making any file level configuration changes, one can use web based admin console to interact with the Carbon installation.

As a Carbon developer one can ask, "Is there any other way to access those admin services rather than using the management console?"

Yes you can, Management functionalities inside the console UI communicate with back end web-services which you can use directly. All these web services are secured, you can access them with either HTTP Basic Authentication or session based authentication.

1. First you need to change the visibility of  admin web service WSDLs.
Open CARBON_HOME/repository/conf/carbon.xml and search for the HideAdminServiceWSDLs property.

Change the value of HideAdminServiceWSDLs property as follows,
<HideAdminServiceWSDLs>false</HideAdminServiceWSDLs>
2. Start Carbon server with –DosgiConsole parameter.
CARBON_HOME/bin$ sh wso2server.sh -DosgiConsole
3. Once server started in OSGI-Console mode just run listAdminServices command.
osgi> listAdminServices
Above command will list down all available admin services in your Carbon server.

I'm taking TenantMgtAdminService located at https://10.100.0.128:9443/admin/services/TenantMgtAdminService/ as a sample and explore this service within SoupUI.

4. Browse https://10.100.0.128:9443/admin/services/TenantMgtAdminService?wsdl

You can simply import this WSDL to SoapUI and check for all available services.

Create new soapui project with a name you want and https://10.100.0.128:9443/admin/services/TenantMgtAdminService?wsdl as the initial WSDL.



Happy Exploring !!!