On Sat, Jul 14, 2012 at 6:07 AM, Senaka Fernando <[email protected]> wrote:
> Hi all, > > Can we also simulate the handlers that get executed in AM and G-Reg to get > an understanding of whether there are any differences. Denis has reported > some other issues too, which made me wonder. > So far this is the behavior I've experienced: 1. Creating simple APIs, modifying them and publishing them always works without any issues 2. Creating APIs with WSDLs can make things go bad (basically the problems mentioned here by Charitha) - This can happen regardless of the underlying DB engine and using mounts or not 3. Creating APIs can make things go bad if the registry is mounted - Now I haven't encountered this personally. I'll run some tests on the Beta2 branch and see if this is for real. Denis mentioned that his issue occurred on a trunk build, which as we all know may have not been up-to-date. Thanks, Hiranya > > Thanks, > Senaka. > > > On Fri, Jul 13, 2012 at 10:24 AM, Sumedha Rubasinghe <[email protected]>wrote: > >> >> >> On Fri, Jul 13, 2012 at 7:46 PM, Sumedha Rubasinghe <[email protected]>wrote: >> >>> On Fri, Jul 13, 2012 at 7:36 PM, Sumedha Rubasinghe <[email protected]>wrote: >>> >>>> >>>> >>>> On Fri, Jul 13, 2012 at 7:25 PM, Senaka Fernando <[email protected]>wrote: >>>> >>>>> Hi Janaka, >>>>> >>>>> Does this have any connection with the way in which UUID >>>>> setting/fetching happens. Because that's something that happens when >>>>> adding >>>>> a WSDL. Also, doesn't this get reproduced on G-Reg? Why only on AM? >>>>> >>>> >>>> API Manager just uses WS API to add an WSDL. So it should be easy to >>>> reproduce this. Janaka is doing that. >>>> >>> >>> Sorry. What I said is incorrect. We are directly using WSDLManager to >>> add WSDL. >>> >> >> >> https://svn.wso2.org/repos/wso2/branches/apimgt/1.0.0-beta2/platform/components/apimgt/org.wso2.carbon.apimgt.impl/src/main/java/org/wso2/carbon/apimgt/impl/utils/APIUtil.java >> >> Search for 'createWSDL' >> >> >> >>>> >>>>> >>>>> Thanks, >>>>> Senaka. >>>>> >>>>> >>>>> On Fri, Jul 13, 2012 at 9:47 AM, Sumedha Rubasinghe >>>>> <[email protected]>wrote: >>>>> >>>>>> G-Reg team, >>>>>> Can we check the table access order again? >>>>>> The problem is only appearing when adding a WSDL. So I suspect the >>>>>> logic in WSDL media type handler. >>>>>> >>>>>> >>>>>> >>>>>> On Fri, Jul 13, 2012 at 7:08 PM, Charitha Kankanamge < >>>>>> [email protected]> wrote: >>>>>> >>>>>>> This is very simple to reproduce and an absolute blocker in >>>>>>> standalone H2 based deployment because if API provider mistakenly give >>>>>>> inaccessible or wrong WSDL url, whole registry becomes unusable. >>>>>>> >>>>>>> 1. In API manager, login to API publisher app >>>>>>> 2. Add a new API with a WSDL and make sure to specify a wsdl which >>>>>>> is not accessible >>>>>>> 3. Submit the form, you will get an error >>>>>>> 4. Now, correct the WSDL url and resubmit. >>>>>>> >>>>>>> Registry will be dead locked. After this, you will not be able to do >>>>>>> any registry related task. >>>>>>> >>>>>>> TID: [-1234] [WSO2 API Manager] [2012-07-13 18:48:34,054] ERROR >>>>>>> {org.wso2.carbon.governance.api.util.GovernanceUtils} - Error in >>>>>>> getting >>>>>>> the result for media type: application/vnd.wso2.registry-ext-type+xml. >>>>>>> {org.wso2.carbon.governance.api.util.GovernanceUtils} >>>>>>> org.wso2.carbon.registry.core.exceptions.RegistryException: Timeout >>>>>>> trying to lock table "REG_RESOURCE"; SQL statement: >>>>>>> SELECT DISTINCT REG_PATH_ID, REG_NAME FROM REG_RESOURCE WHERE >>>>>>> (REG_RESOURCE.REG_TENANT_ID=?) AND REG_MEDIA_TYPE=? [50200-140] >>>>>>> at >>>>>>> org.wso2.carbon.registry.core.jdbc.dataaccess.SQLQueryProcessor.executeQuery(SQLQueryProcessor.java:240) >>>>>>> at >>>>>>> org.wso2.carbon.registry.core.jdbc.queries.QueryProcessorManager.executeQuery(QueryProcessorManager.java:137) >>>>>>> at >>>>>>> org.wso2.carbon.registry.core.jdbc.EmbeddedRegistry.executeQuery(EmbeddedRegistry.java:2271) >>>>>>> at >>>>>>> org.wso2.carbon.registry.core.caching.CacheBackedRegistry.executeQuery(CacheBackedRegistry.java:305) >>>>>>> at >>>>>>> org.wso2.carbon.registry.core.session.UserRegistry.executeQuery(UserRegistry.java:1246) >>>>>>> at >>>>>>> org.wso2.carbon.governance.api.util.GovernanceUtils.getResultPaths(GovernanceUtils.java:171) >>>>>>> at >>>>>>> org.wso2.carbon.governance.api.util.GovernanceUtils.findGovernanceArtifacts(GovernanceUtils.java:114) >>>>>>> at >>>>>>> org.wso2.carbon.governance.api.util.GovernanceUtils.findGovernanceArtifactConfigurations(GovernanceUtils.java:383) >>>>>>> at >>>>>>> org.wso2.carbon.governance.api.util.GovernanceUtils.findGovernanceArtifactConfiguration(GovernanceUtils.java:144) >>>>>>> at >>>>>>> org.wso2.carbon.governance.api.generic.GenericArtifactManager.<init>(GenericArtifactManager.java:83) >>>>>>> at >>>>>>> org.wso2.carbon.apimgt.impl.AbstractAPIManager.isContextExist(AbstractAPIManager.java:260) >>>>>>> at >>>>>>> org.wso2.carbon.apimgt.hostobjects.APIProviderHostObject.jsFunction_isContextExist(APIProviderHostObject.java:1213) >>>>>>> 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.mozilla.javascript.MemberBox.invoke(MemberBox.java:160) >>>>>>> at >>>>>>> org.mozilla.javascript.FunctionObject.call(FunctionObject.java:411) >>>>>>> at >>>>>>> org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:76) >>>>>>> at >>>>>>> org.wso2.carbon.rhino.modules.api.c3._c2(/publisher/modules/api/add.jag:31) >>>>>>> at >>>>>>> org.wso2.carbon.rhino.modules.api.c3.call(/publisher/modules/api/add.jag) >>>>>>> at >>>>>>> org.mozilla.javascript.ScriptRuntime.applyOrCall(ScriptRuntime.java:2347) >>>>>>> at >>>>>>> org.mozilla.javascript.BaseFunction.execIdCall(BaseFunction.java:272) >>>>>>> at >>>>>>> org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:127) >>>>>>> at >>>>>>> org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:76) >>>>>>> at >>>>>>> org.wso2.carbon.rhino.modules.api.c0._c3(/publisher/modules/api/module.jag:12) >>>>>>> at >>>>>>> org.wso2.carbon.rhino.modules.api.c0.call(/publisher/modules/api/module.jag) >>>>>>> at >>>>>>> org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:76) >>>>>>> at >>>>>>> org.wso2.carbon.rhino.site.blocks.item_add.ajax.c0._c1(/publisher/site/blocks/item-add/ajax/add.jag:73) >>>>>>> at >>>>>>> org.wso2.carbon.rhino.site.blocks.item_add.ajax.c0.call(/publisher/site/blocks/item-add/ajax/add.jag) >>>>>>> at >>>>>>> org.mozilla.javascript.optimizer.OptRuntime.call0(OptRuntime.java:57) >>>>>>> at >>>>>>> org.wso2.carbon.rhino.site.blocks.item_add.ajax.c0._c0(/publisher/site/blocks/item-add/ajax/add.jag:4) >>>>>>> at >>>>>>> org.wso2.carbon.rhino.site.blocks.item_add.ajax.c0.call(/publisher/site/blocks/item-add/ajax/add.jag) >>>>>>> at >>>>>>> org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:401) >>>>>>> at >>>>>>> org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3003) >>>>>>> at >>>>>>> org.wso2.carbon.rhino.site.blocks.item_add.ajax.c0.call(/publisher/site/blocks/item-add/ajax/add.jag) >>>>>>> at >>>>>>> org.wso2.carbon.rhino.site.blocks.item_add.ajax.c0.exec(/publisher/site/blocks/item-add/ajax/add.jag) >>>>>>> at >>>>>>> org.jaggeryjs.scriptengine.engine.RhinoEngine.execScript(RhinoEngine.java:443) >>>>>>> at >>>>>>> org.jaggeryjs.scriptengine.engine.RhinoEngine.exec(RhinoEngine.java:202) >>>>>>> at >>>>>>> org.jaggeryjs.jaggery.core.manager.WebAppManager.execute(WebAppManager.java:223) >>>>>>> at >>>>>>> org.jaggeryjs.jaggery.core.JaggeryServlet.doPost(JaggeryServlet.java:51) >>>>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) >>>>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) >>>>>>> at >>>>>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) >>>>>>> at >>>>>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) >>>>>>> at >>>>>>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) >>>>>>> at >>>>>>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) >>>>>>> at >>>>>>> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) >>>>>>> at >>>>>>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) >>>>>>> at >>>>>>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) >>>>>>> at >>>>>>> org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:133) >>>>>>> at >>>>>>> org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:156) >>>>>>> at >>>>>>> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) >>>>>>> at >>>>>>> org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:49) >>>>>>> at >>>>>>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) >>>>>>> at >>>>>>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) >>>>>>> at >>>>>>> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001) >>>>>>> at >>>>>>> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579) >>>>>>> at >>>>>>> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1653) >>>>>>> at >>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) >>>>>>> at >>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) >>>>>>> at java.lang.Thread.run(Thread.java:662) >>>>>>> TID: [-1234] [WSO2 API Manager] [2012-07-13 18:48:34,074] ERROR >>>>>>> {org.wso2.carbon.apimgt.impl.UserAwareAPIProvider} - Failed to check >>>>>>> context availability : /aaa >>>>>>> {org.wso2.carbon.apimgt.impl.UserAwareAPIProvider} >>>>>>> org.wso2.carbon.governance.api.exception.GovernanceException: Unable >>>>>>> to obtain governance artifact configuration >>>>>>> at >>>>>>> org.wso2.carbon.governance.api.generic.GenericArtifactManager.<init>(GenericArtifactManager.java:93) >>>>>>> at >>>>>>> org.wso2.carbon.apimgt.impl.AbstractAPIManager.isContextExist(AbstractAPIManager.java:260) >>>>>>> at >>>>>>> org.wso2.carbon.apimgt.hostobjects.APIProviderHostObject.jsFunction_isContextExist(APIProviderHostObject.java:1213) >>>>>>> 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.mozilla.javascript.MemberBox.invoke(MemberBox.java:160) >>>>>>> at >>>>>>> org.mozilla.javascript.FunctionObject.call(FunctionObject.java:411) >>>>>>> at >>>>>>> org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:76) >>>>>>> at >>>>>>> org.wso2.carbon.rhino.modules.api.c3._c2(/publisher/modules/api/add.jag:31) >>>>>>> at >>>>>>> org.wso2.carbon.rhino.modules.api.c3.call(/publisher/modules/api/add.jag) >>>>>>> at >>>>>>> org.mozilla.javascript.ScriptRuntime.applyOrCall(ScriptRuntime.java:2347) >>>>>>> at >>>>>>> org.mozilla.javascript.BaseFunction.execIdCall(BaseFunction.java:272) >>>>>>> at >>>>>>> org.mozilla.javascript.IdFunctionObject.call(IdFunctionObject.java:127) >>>>>>> at >>>>>>> org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:76) >>>>>>> at >>>>>>> org.wso2.carbon.rhino.modules.api.c0._c3(/publisher/modules/api/module.jag:12) >>>>>>> at >>>>>>> org.wso2.carbon.rhino.modules.api.c0.call(/publisher/modules/api/module.jag) >>>>>>> at >>>>>>> org.mozilla.javascript.optimizer.OptRuntime.call2(OptRuntime.java:76) >>>>>>> at >>>>>>> org.wso2.carbon.rhino.site.blocks.item_add.ajax.c0._c1(/publisher/site/blocks/item-add/ajax/add.jag:73) >>>>>>> at >>>>>>> org.wso2.carbon.rhino.site.blocks.item_add.ajax.c0.call(/publisher/site/blocks/item-add/ajax/add.jag) >>>>>>> at >>>>>>> org.mozilla.javascript.optimizer.OptRuntime.call0(OptRuntime.java:57) >>>>>>> at >>>>>>> org.wso2.carbon.rhino.site.blocks.item_add.ajax.c0._c0(/publisher/site/blocks/item-add/ajax/add.jag:4) >>>>>>> at >>>>>>> org.wso2.carbon.rhino.site.blocks.item_add.ajax.c0.call(/publisher/site/blocks/item-add/ajax/add.jag) >>>>>>> at >>>>>>> org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:401) >>>>>>> at >>>>>>> org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3003) >>>>>>> at >>>>>>> org.wso2.carbon.rhino.site.blocks.item_add.ajax.c0.call(/publisher/site/blocks/item-add/ajax/add.jag) >>>>>>> at >>>>>>> org.wso2.carbon.rhino.site.blocks.item_add.ajax.c0.exec(/publisher/site/blocks/item-add/ajax/add.jag) >>>>>>> at >>>>>>> org.jaggeryjs.scriptengine.engine.RhinoEngine.execScript(RhinoEngine.java:443) >>>>>>> at >>>>>>> org.jaggeryjs.scriptengine.engine.RhinoEngine.exec(RhinoEngine.java:202) >>>>>>> at >>>>>>> org.jaggeryjs.jaggery.core.manager.WebAppManager.execute(WebAppManager.java:223) >>>>>>> at >>>>>>> org.jaggeryjs.jaggery.core.JaggeryServlet.doPost(JaggeryServlet.java:51) >>>>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) >>>>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) >>>>>>> at >>>>>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) >>>>>>> at >>>>>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) >>>>>>> at >>>>>>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) >>>>>>> at >>>>>>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) >>>>>>> at >>>>>>> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) >>>>>>> at >>>>>>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) >>>>>>> at >>>>>>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) >>>>>>> at >>>>>>> org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:133) >>>>>>> at >>>>>>> org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:156) >>>>>>> at >>>>>>> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) >>>>>>> at >>>>>>> org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:49) >>>>>>> at >>>>>>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) >>>>>>> at >>>>>>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) >>>>>>> at >>>>>>> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001) >>>>>>> at >>>>>>> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579) >>>>>>> at >>>>>>> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1653) >>>>>>> at >>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) >>>>>>> at >>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) >>>>>>> at java.lang.Thread.run(Thread.java:662) >>>>>>> Caused by: >>>>>>> org.wso2.carbon.governance.api.exception.GovernanceException: Error in >>>>>>> getting the result for media type: >>>>>>> application/vnd.wso2.registry-ext-type+xml. >>>>>>> at >>>>>>> org.wso2.carbon.governance.api.util.GovernanceUtils.getResultPaths(GovernanceUtils.java:175) >>>>>>> at >>>>>>> org.wso2.carbon.governance.api.util.GovernanceUtils.findGovernanceArtifacts(GovernanceUtils.java:114) >>>>>>> at >>>>>>> org.wso2.carbon.governance.api.util.GovernanceUtils.findGovernanceArtifactConfigurations(GovernanceUtils.java:383) >>>>>>> at >>>>>>> org.wso2.carbon.governance.api.util.GovernanceUtils.findGovernanceArtifactConfiguration(GovernanceUtils.java:144) >>>>>>> at >>>>>>> org.wso2.carbon.governance.api.generic.GenericArtifactManager.<init>(GenericArtifactManager.java:83) >>>>>>> ... 52 more >>>>>>> Caused by: >>>>>>> org.wso2.carbon.registry.core.exceptions.RegistryException: Timeout >>>>>>> trying >>>>>>> to lock table "REG_RESOURCE"; SQL statement: >>>>>>> SELECT DISTINCT REG_PATH_ID, REG_NAME FROM REG_RESOURCE WHERE >>>>>>> (REG_RESOURCE.REG_TENANT_ID=?) AND REG_MEDIA_TYPE=? [50200-140] >>>>>>> at >>>>>>> org.wso2.carbon.registry.core.jdbc.dataaccess.SQLQueryProcessor.executeQuery(SQLQueryProcessor.java:240) >>>>>>> at >>>>>>> org.wso2.carbon.registry.core.jdbc.queries.QueryProcessorManager.executeQuery(QueryProcessorManager.java:137) >>>>>>> at >>>>>>> org.wso2.carbon.registry.core.jdbc.EmbeddedRegistry.executeQuery(EmbeddedRegistry.java:2271) >>>>>>> at >>>>>>> org.wso2.carbon.registry.core.caching.CacheBackedRegistry.executeQuery(CacheBackedRegistry.java:305) >>>>>>> at >>>>>>> org.wso2.carbon.registry.core.session.UserRegistry.executeQuery(UserRegistry.java:1246) >>>>>>> at >>>>>>> org.wso2.carbon.governance.api.util.GovernanceUtils.getResultPaths(GovernanceUtils.java:171) >>>>>>> ... 56 more >>>>>>> >>>>>>> >>>>>>> Apparently, this seems to be a known issue and reported multiple >>>>>>> times(e.g: https://wso2.org/jira/browse/CARBON-11409), the >>>>>>> suggested workaround is to use mysql. However, in API manager scenario, >>>>>>> the >>>>>>> error is very prominent. >>>>>>> >>>>>>> >>>>>>> _______________________________________________ >>>>>>> Dev mailing list >>>>>>> [email protected] >>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> /sumedha >>>>>> +94 773017743 >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> *Senaka Fernando* >>>>> Member - Integration Technologies Management Committee; >>>>> Technical Lead; WSO2 Inc.; http://wso2.com* >>>>> Member; Apache Software Foundation; http://apache.org >>>>> >>>>> E-mail: senaka AT wso2.com >>>>> **P: +1 408 754 7388; ext: 51736*; *M: +94 77 322 1818 >>>>> Linked-In: http://linkedin.com/in/senakafernando >>>>> >>>>> *Lean . Enterprise . Middleware >>>>> >>>>> >>>> >>>> >>>> -- >>>> /sumedha >>>> +94 773017743 >>>> >>> >>> >>> >>> -- >>> /sumedha >>> +94 773017743 >>> >> >> >> >> -- >> /sumedha >> +94 773017743 >> > > > > -- > *Senaka Fernando* > Member - Integration Technologies Management Committee; > Technical Lead; WSO2 Inc.; http://wso2.com* > Member; Apache Software Foundation; http://apache.org > > E-mail: senaka AT wso2.com > **P: +1 408 754 7388; ext: 51736*; *M: +94 77 322 1818 > Linked-In: http://linkedin.com/in/senakafernando > > *Lean . Enterprise . Middleware > > -- Hiranya Jayathilaka Senior Technical Lead; WSO2 Inc.; http://wso2.org E-mail: [email protected]; Mobile: +94 77 633 3491 Blog: http://techfeast-hiranya.blogspot.com
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
