Also refer to [1] under *Installing and configuring the databases* section 3. b.
The documentation shows the MySQL specific relaxAutoCommit=true There is no mention of the <defaultAutoCommit> config. This works since the example uses MySQL but it does not communicate the important generic configuration that will work with all DB's [1] - https://docs.wso2.org/display/CLUSTER420/Clustering+API+Manager On Mon, May 12, 2014 at 9:55 AM, Uvindra Dias Jayasinha <[email protected]>wrote: > Probably a good idea to have <defaultAutoCommit> configuration as part of > the existing data sources existing configs, then its obvious to anyone > looking at the configuration that Auto Commit can be toggled from this. > Currently unless you have prior knowledge of it, its not obvious that such > a configuration exists. > > Also why isnt it available by default and always set to false in all data > sources? There is no reason to have auto commit turned on in this case. > > > > On Mon, May 12, 2014 at 3:30 AM, Sumedha Rubasinghe <[email protected]>wrote: > >> >> >> >> On Fri, May 9, 2014 at 10:36 PM, Isuru Perera <[email protected]> wrote: >> >>> AFAIK, relaxAutoCommit=true is applicable to only to MySQL. I'm not sure >>> it will work for PostgreSQL >>> >>> With relaxAutoCommit=true, we just suppress the exception in MySQL. >>> >>> Ideally we should disable the auto commit from the data source >>> configuration. >>> >>> Try adding >>> <defaultAutoCommit>false</defaultAutoCommit>. >>> >>> I'm not sure about the impact this will have in components other than >>> API Manager. If other components rely on Auto Commit, there will be issues. >>> >>> APIM Team, how should this be handled in with other databases, such as >>> PostgreSQL >>> >> >> We are not depending on autocommit within our DAO logic. We have explicit >> transaction commit blocks. (This also applies to Registry and UM). >> Hence autocommit should always be set to false as Nuwan has given. >> >> >> >> >>> Docs Team, Important configurations such as defaultAutoCommit are >>> missing in Carbon docs [1]. We need to add all configs, other than the >>> elements we have master-datasources.xml by default. >>> >>> [1] >>> https://docs.wso2.org/display/Carbon420/Configuring+master-datasources.xml >>> >>> >>> On Fri, May 9, 2014 at 5:37 AM, Uvindra Dias Jayasinha <[email protected] >>> > wrote: >>> >>>> This is because auto commit is turned on by default in your >>>> installation. >>>> >>>> You need to append "relaxAutoCommit=true" to the end of the DB url in >>>> the master-datasources.xml file. Here is what an example with MySQL would >>>> look like, >>>> >>>> <datasource> >>>> <name>WSO2AM_DB</name> >>>> <description>The datasource used for API Manager >>>> database</description> >>>> <jndiConfig> >>>> <name>jdbc/WSO2AM_DB</name> >>>> </jndiConfig> >>>> <definition type="RDBMS"> >>>> <configuration> >>>> <url>j >>>> dbc:mysql://localhost:3306/WSO2AM_DB?autoReconnect=true& >>>> *relaxAutoCommit=true*</url> >>>> <username>wso2carbon</username> >>>> <password>wso2carbon</password> >>>> >>>> <driverClassName>com.mysql.jdbc.Driver</driverClassName> >>>> <maxActive>50</maxActive> >>>> <maxWait>60000</maxWait> >>>> <testOnBorrow>true</testOnBorrow> >>>> <validationQuery>SELECT 1</validationQuery> >>>> <validationInterval>30000</validationInterval> >>>> </configuration> >>>> </definition> >>>> </datasource> >>>> >>>> Add the same entry to your DB URL >>>> >>>> >>>> >>>> On Fri, May 9, 2014 at 5:49 PM, Shavantha Weerasinghe < >>>> [email protected]> wrote: >>>> >>>>> Hi All >>>>> >>>>> The below exception is thrown when I attempt to create an API on >>>>> APIM140 connected to postgress database >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> [2014-05-09 17:46:15,721] ERROR - ApiMgtDAO Error while adding the >>>>> API: org.wso2.carbon.apimgt.api.model.APIIdentifier@6a10eaec to the >>>>> database >>>>> org.postgresql.util.PSQLException: Cannot commit when autoCommit is >>>>> enabled. >>>>> at >>>>> org.postgresql.jdbc2.AbstractJdbc2Connection.commit(AbstractJdbc2Connection.java:705) >>>>> at sun.reflect.GeneratedMethodAccessor28.invoke(Unknown Source) >>>>> at >>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) >>>>> at java.lang.reflect.Method.invoke(Method.java:597) >>>>> at >>>>> org.apache.tomcat.jdbc.pool.ProxyConnection.invoke(ProxyConnection.java:126) >>>>> at >>>>> org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:109) >>>>> at >>>>> org.wso2.carbon.ndatasource.rdbms.ConnectionRollbackOnReturnInterceptor.invoke(ConnectionRollbackOnReturnInterceptor.java:51) >>>>> at >>>>> org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:109) >>>>> at >>>>> org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor.invoke(AbstractCreateStatementInterceptor.java:71) >>>>> at >>>>> org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:109) >>>>> at >>>>> org.apache.tomcat.jdbc.pool.interceptor.ConnectionState.invoke(ConnectionState.java:153) >>>>> at >>>>> org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:109) >>>>> at >>>>> org.apache.tomcat.jdbc.pool.TrapException.invoke(TrapException.java:41) >>>>> at >>>>> org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:109) >>>>> at >>>>> org.apache.tomcat.jdbc.pool.DisposableConnectionFacade.invoke(DisposableConnectionFacade.java:80) >>>>> at $Proxy13.commit(Unknown Source) >>>>> at >>>>> org.wso2.carbon.apimgt.impl.dao.ApiMgtDAO.addAPI(ApiMgtDAO.java:3564) >>>>> at >>>>> org.wso2.carbon.apimgt.impl.APIProviderImpl.addAPI(APIProviderImpl.java:372) >>>>> at >>>>> org.wso2.carbon.apimgt.impl.UserAwareAPIProvider.addAPI(UserAwareAPIProvider.java:45) >>>>> at >>>>> org.wso2.carbon.apimgt.hostobjects.APIProviderHostObject.jsFunction_addAPI(APIProviderHostObject.java:397) >>>>> 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.call1(OptRuntime.java:66) >>>>> at >>>>> org.jaggeryjs.rhino.publisher.modules.api.c3._c1(/publisher/modules/api/add.jag:6) >>>>> at >>>>> org.jaggeryjs.rhino.publisher.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.jaggeryjs.rhino.publisher.modules.api.c0._c1(/publisher/modules/api/module.jag:5) >>>>> at >>>>> org.jaggeryjs.rhino.publisher.modules.api.c0.call(/publisher/modules/api/module.jag) >>>>> at >>>>> org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:66) >>>>> at >>>>> org.jaggeryjs.rhino.publisher.site.blocks.item_add.ajax.c0._c1(/publisher/site/blocks/item-add/ajax/add.jag:70) >>>>> at >>>>> org.jaggeryjs.rhino.publisher.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.jaggeryjs.rhino.publisher.site.blocks.item_add.ajax.c0._c0(/publisher/site/blocks/item-add/ajax/add.jag:4) >>>>> at >>>>> org.jaggeryjs.rhino.publisher.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.jaggeryjs.rhino.publisher.site.blocks.item_add.ajax.c0.call(/publisher/site/blocks/item-add/ajax/add.jag) >>>>> at >>>>> org.jaggeryjs.rhino.publisher.site.blocks.item_add.ajax.c0.exec(/publisher/site/blocks/item-add/ajax/add.jag) >>>>> at >>>>> org.jaggeryjs.scriptengine.engine.RhinoEngine.execScript(RhinoEngine.java:441) >>>>> at >>>>> org.jaggeryjs.scriptengine.engine.RhinoEngine.exec(RhinoEngine.java:191) >>>>> at >>>>> org.jaggeryjs.jaggery.core.manager.WebAppManager.execute(WebAppManager.java:269) >>>>> at >>>>> org.jaggeryjs.jaggery.core.JaggeryServlet.doPost(JaggeryServlet.java:29) >>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:755) >>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) >>>>> 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:222) >>>>> 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:171) >>>>> at >>>>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) >>>>> at >>>>> org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:177) >>>>> at >>>>> org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:161) >>>>> at >>>>> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) >>>>> at >>>>> org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:57) >>>>> 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:1004) >>>>> at >>>>> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) >>>>> 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) >>>>> [2014-05-09 17:46:15,726] ERROR - APIProviderHostObject Error while >>>>> adding the API- test28-1.0.0 >>>>> org.wso2.carbon.apimgt.api.APIManagementException: Error in adding API >>>>> :test28 >>>>> at >>>>> org.wso2.carbon.apimgt.impl.APIProviderImpl.addAPI(APIProviderImpl.java:374) >>>>> at >>>>> org.wso2.carbon.apimgt.impl.UserAwareAPIProvider.addAPI(UserAwareAPIProvider.java:45) >>>>> at >>>>> org.wso2.carbon.apimgt.hostobjects.APIProviderHostObject.jsFunction_addAPI(APIProviderHostObject.java:397) >>>>> 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.call1(OptRuntime.java:66) >>>>> at >>>>> org.jaggeryjs.rhino.publisher.modules.api.c3._c1(/publisher/modules/api/add.jag:6) >>>>> at >>>>> org.jaggeryjs.rhino.publisher.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.jaggeryjs.rhino.publisher.modules.api.c0._c1(/publisher/modules/api/module.jag:5) >>>>> at >>>>> org.jaggeryjs.rhino.publisher.modules.api.c0.call(/publisher/modules/api/module.jag) >>>>> at >>>>> org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:66) >>>>> at >>>>> org.jaggeryjs.rhino.publisher.site.blocks.item_add.ajax.c0._c1(/publisher/site/blocks/item-add/ajax/add.jag:70) >>>>> at >>>>> org.jaggeryjs.rhino.publisher.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.jaggeryjs.rhino.publisher.site.blocks.item_add.ajax.c0._c0(/publisher/site/blocks/item-add/ajax/add.jag:4) >>>>> at >>>>> org.jaggeryjs.rhino.publisher.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.jaggeryjs.rhino.publisher.site.blocks.item_add.ajax.c0.call(/publisher/site/blocks/item-add/ajax/add.jag) >>>>> at >>>>> org.jaggeryjs.rhino.publisher.site.blocks.item_add.ajax.c0.exec(/publisher/site/blocks/item-add/ajax/add.jag) >>>>> at >>>>> org.jaggeryjs.scriptengine.engine.RhinoEngine.execScript(RhinoEngine.java:441) >>>>> at >>>>> org.jaggeryjs.scriptengine.engine.RhinoEngine.exec(RhinoEngine.java:191) >>>>> at >>>>> org.jaggeryjs.jaggery.core.manager.WebAppManager.execute(WebAppManager.java:269) >>>>> at >>>>> org.jaggeryjs.jaggery.core.JaggeryServlet.doPost(JaggeryServlet.java:29) >>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:755) >>>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) >>>>> 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:222) >>>>> 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:171) >>>>> at >>>>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) >>>>> at >>>>> org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:177) >>>>> at >>>>> org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:161) >>>>> at >>>>> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) >>>>> at >>>>> org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:57) >>>>> 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:1004) >>>>> at >>>>> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) >>>>> 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.apimgt.api.APIManagementException: Error >>>>> while adding the API: >>>>> org.wso2.carbon.apimgt.api.model.APIIdentifier@6a10eaec to the >>>>> database >>>>> at >>>>> org.wso2.carbon.apimgt.impl.dao.ApiMgtDAO.handleException(ApiMgtDAO.java:3911) >>>>> at >>>>> org.wso2.carbon.apimgt.impl.dao.ApiMgtDAO.addAPI(ApiMgtDAO.java:3566) >>>>> at >>>>> org.wso2.carbon.apimgt.impl.APIProviderImpl.addAPI(APIProviderImpl.java:372) >>>>> ... 52 more >>>>> Caused by: org.postgresql.util.PSQLException: Cannot commit when >>>>> autoCommit is enabled. >>>>> at >>>>> org.postgresql.jdbc2.AbstractJdbc2Connection.commit(AbstractJdbc2Connection.java:705) >>>>> at sun.reflect.GeneratedMethodAccessor28.invoke(Unknown Source) >>>>> at >>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) >>>>> at java.lang.reflect.Method.invoke(Method.java:597) >>>>> at >>>>> org.apache.tomcat.jdbc.pool.ProxyConnection.invoke(ProxyConnection.java:126) >>>>> at >>>>> org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:109) >>>>> at >>>>> org.wso2.carbon.ndatasource.rdbms.ConnectionRollbackOnReturnInterceptor.invoke(ConnectionRollbackOnReturnInterceptor.java:51) >>>>> at >>>>> org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:109) >>>>> at >>>>> org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor.invoke(AbstractCreateStatementInterceptor.java:71) >>>>> at >>>>> org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:109) >>>>> at >>>>> org.apache.tomcat.jdbc.pool.interceptor.ConnectionState.invoke(ConnectionState.java:153) >>>>> at >>>>> org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:109) >>>>> at >>>>> org.apache.tomcat.jdbc.pool.TrapException.invoke(TrapException.java:41) >>>>> at >>>>> org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:109) >>>>> at >>>>> org.apache.tomcat.jdbc.pool.DisposableConnectionFacade.invoke(DisposableConnectionFacade.java:80) >>>>> at $Proxy13.commit(Unknown Source) >>>>> at >>>>> org.wso2.carbon.apimgt.impl.dao.ApiMgtDAO.addAPI(ApiMgtDAO.java:3564) >>>>> ... 53 more >>>>> [2014-05-09 17:46:15,729] ERROR - add:jag >>>>> "org.wso2.carbon.apimgt.api.APIManagementException: Error while adding the >>>>> API- test28-1.0.0" >>>>> >>>>> Shavantha Weerasinghe >>>>> Senior Software Engineer QA >>>>> WSO2, Inc. >>>>> lean.enterprise.middleware. >>>>> http://wso2.com >>>>> http://wso2.org >>>>> Tel : 94 11 214 5345 >>>>> Fax :94 11 2145300 >>>>> >>>>> >>>>> _______________________________________________ >>>>> Dev mailing list >>>>> [email protected] >>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev >>>>> >>>>> >>>> >>>> >>>> -- >>>> Regards, >>>> Uvindra >>>> >>>> Mobile: 777733962 >>>> >>>> _______________________________________________ >>>> Dev mailing list >>>> [email protected] >>>> http://wso2.org/cgi-bin/mailman/listinfo/dev >>>> >>>> >>> >>> >>> -- >>> Isuru Perera >>> Senior Software Engineer | WSO2, Inc. | http://wso2.com/ >>> Lean . Enterprise . Middleware >>> >>> about.me/chrishantha >>> >> >> >> >> -- >> /sumedha >> m: +94 773017743 >> b : bit.ly/sumedha >> > > > > -- > Regards, > Uvindra > > Mobile: 777733962 > -- Regards, Uvindra Mobile: 777733962
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
