[prev in list] [next in list] [prev in thread] [next in thread] 

List:       esb-java-dev
Subject:    Re: [Carbon-dev] ResourceNotFoundException thrown when resourceExists() is true
From:       Senaka Fernando <senaka () wso2 ! com>
Date:       2012-01-31 21:16:27
Message-ID: CAPniqXJCxs6w3DUFpn7+T6E7TNX=pnjBGGUh3F42SvNSac-scw () mail ! gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


Hi Shankar,

I believe that we got the wrong impression out of this discussion. What I
initially suggested is that Pradeeban check whether caching is properly
setup.

If no distributed/replicated caching is available, the result is cached
locally in each node (the two nodes don't communicate with each other), and
even if you delete from the one side the other side will not know that
since the caches are not replicated (and the second node won't invalidate
its copy due to this reason). The second node will realize that the
resource is gone only when the cache timesouts.

Thanks,
Senaka.

On Tue, Jan 31, 2012 at 9:47 AM, Selvaratnam Uthaiyashankar <
shankar@wso2.com> wrote:

> Hi Senaka,
> 
> Does that mean, configRegistry.resourceExists(serviceResourcePath)
> takes from cache and resource =
> configRegistry.get(serviceResourcePath); takes from database? That
> doesn't sound right to me. If this is the case, why we are caching
> only the path, but not the resource?
> 
> If above two succeed when the resource is not actually in the
> database, or above two failed when the resource is in the database,
> then it is due to the caching. If one of the above succeed and the
> other fails, then we need to fix it.
> 
> Shankar
> 
> On Sun, Jan 29, 2012 at 3:10 PM, Senaka Fernando <senaka@wso2.com> wrote:
> > Hi Dimuthu,
> > 
> > Well that probably explains my point. If you test something across two
> nodes
> > you need to turn off caching in registry or properly setup distributed or
> > replicated caching. If not each node caches locally, and will not sync
> until
> > timeout.
> > 
> > Thanks,
> > Senaka.
> > 
> > 
> > On Thursday, January 26, 2012, Dimuthu Leelarathne <dimuthul@wso2.com>
> > wrote:
> > > Hi Senaka,
> > > 
> > > On Thu, Jan 26, 2012 at 5:26 AM, Senaka Fernando <senaka@wso2.com>
> wrote:
> > > > 
> > > > Hi Pradeeban,
> > > > 
> > > > Probably, due to caching not properly setup.
> > > > 
> > > 
> > > AFAIK registry reads from database when it is not in the cache. From my
> > > experience Registry worked perfectly when multicasting ports were
> closed in
> > > the switch as well.
> > > 
> > > thanks,
> > > dimuthu
> > > 
> > > > 
> > > > Thanks,
> > > > Senaka.
> > > > 
> > > > On Wed, Jan 25, 2012 at 11:39 PM, Kathiravelu Pradeeban
> > > > <pradeeban@wso2.com> wrote:
> > > > 
> > > > The deployment was with the SVN based deployment synchronizer. Ghost
> > > > deployer is disabled.
> > > > 
> > > > Regards,
> > > > Pradeeban.
> > > > 
> > > > On Wed, Jan 25, 2012 at 7:43 PM, Kathiravelu Pradeeban
> > > > <pradeeban@wso2.com> wrote:
> > > > 
> > > > Hi,
> > > > Azeez and I were testing a Stratos deployment with 2 nodes of
> Appserver.
> > > > We did a minor modification in the getService() of
> ServicePersistenceManager
> > > > as below.
> > > > 
> > > > Then we uploaded a service; accessed it from two browsers; and deleted
> > > > it.
> > > > Interestingly the highlighted code-segment is executed, and prints
> true,
> > > > in the terminal of the other node.
> > > > 
> > > > That means, the resourceExists, but the ResourceNotFoundException is
> > > > thrown. Can someone explains this behavior?
> > > > 
> > > > 
> > > > public Resource getService(AxisService axisService) throws
> Exception
> > > > {
> > > > try {
> > > > String serviceResourcePath =
> > > > PersistenceUtils.getResourcePath(axisService);
> > > > if (configRegistry.resourceExists(serviceResourcePath)) {
> > > > Resource resource = null;
> > > > try {
> > > > resource = configRegistry.get(serviceResourcePath);
> > > > } catch (ResourceNotFoundException e) {
> > > > 
> > > > System.out.println("++++++++++++++++++++++++++++++++++" +
> > > > configRegistry.resourceExists(serviceResourcePath));
> > > > 
> > > > if(configRegistry.resourceExists(serviceResourcePath)){
> > > > throw e;
> > > > }
> > > > }
> > > > ....
> > > > 
> > > > }
> > > > 
> > > > 
> > > > Complete log for the interested:
> > > > Node 1:
> > > > [2012-01-25 05:52:04,562] @3000.abw [6451] [WSO2 Stratos Application
> > > > Server] INFO {org.wso2.carbon.service.mgt.ServiceAdmin} -  Undeploying
> Web
> > > > service:
> > > > /mnt/
> 209.126.198.68/wso2stratos-as-1.5.2/repository/tenants/6451/axis2services/Chad.aar
> > > > [2012-01-25 05:52:10,101]  INFO
> > > > {org.apache.axis2.deployment.DeploymentEngine} -
> > > > org.apache.axis2.deployment.DeploymentException: The Chad service
> group name
> > > > is not valid.
> > > > 
> > > > 
> > > > Node2:
> > > > ++++++++++++++++++++++++++++++++++true
> > > > [2012-01-25 05:51:57,467] @3000.abw [6451] [WSO2 Stratos Application
> > > > Server]ERROR
> {org.wso2.carbon.core.persistence.AbstractPersistenceManager}
> > > > -  Could not get the Service resource from Config Registry
> > > > org.wso2.carbon.registry.core.exceptions.ResourceNotFoundException:
> > > > Resource does not exist at path
> > > > /_system/config/repository/axis2/service-groups/Chad/services/Chad
> > > > at
> > > > 
> org.wso2.carbon.registry.core.jdbc.handlers.builtin.MountHandler.get(MountHandler.java:426)
> 
> > > > at
> > > > 
> org.wso2.carbon.registry.core.jdbc.handlers.HandlerManager.get(HandlerManager.java:2378)
> 
> > > > at
> > > > 
> org.wso2.carbon.registry.core.jdbc.handlers.UserDefinedHandlerManager.get(UserDefinedHandlerManager.java:200)
> 
> > > > at
> > > > 
> org.wso2.carbon.registry.core.jdbc.handlers.HandlerLifecycleManager.get(HandlerLifecycleManager.java:814)
> 
> > > > at
> > > > 
> org.wso2.carbon.registry.core.jdbc.EmbeddedRegistry.get(EmbeddedRegistry.java:512)
> > > > at
> > > > 
> org.wso2.carbon.registry.core.caching.CacheBackedRegistry.get(CacheBackedRegistry.java:133)
> 
> > > > at
> > > > 
> org.wso2.carbon.registry.core.session.UserRegistry.get(UserRegistry.java:528)
> > > > at
> > > > 
> org.wso2.carbon.core.persistence.ServicePersistenceManager.getService(ServicePersistenceManager.java:89)
> 
> > > > at
> > > > 
> org.wso2.carbon.core.deployment.DeploymentInterceptor.serviceUpdate(DeploymentInterceptor.java:254)
> 
> > > > at
> > > > 
> org.apache.axis2.engine.AxisConfiguration.notifyObservers(AxisConfiguration.java:652)
> 
> > > > at
> > > > 
> org.apache.axis2.engine.AxisConfiguration.removeServiceGroup(AxisConfiguration.java:516)
> 
> > > > at
> > > > 
> org.apache.axis2.deployment.ServiceDeployer.undeploy(ServiceDeployer.java:188)
> > > > 
> > > > 
> > > > _______________________________________________
> > > > Carbon-dev mailing list
> > > > Carbon-dev@wso2.org
> > > > http://mail.wso2.org/cgi-bin/mailman/listinfo/carbon-dev
> > > > 
> > > 
> > > 
> > > 
> > > --
> > > Dimuthu Leelarathne
> > > Technical Lead
> > > 
> > > WSO2, Inc. (http://wso2.com)
> > > email: dimuthul@wso2.com
> > > 
> > > Lean . Enterprise . Middleware
> > > 
> > 
> > --
> > Senaka Fernando
> > Product Manager - WSO2 Governance Registry;
> > Associate 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
> > 
> > 
> > _______________________________________________
> > Carbon-dev mailing list
> > Carbon-dev@wso2.org
> > http://mail.wso2.org/cgi-bin/mailman/listinfo/carbon-dev
> > 
> 
> 
> 
> --
> S.Uthaiyashankar
> Senior Architect & Senior Manager
> WSO2 Inc.
> http://wso2.com/ - "lean . enterprise . middleware"
> 
> Phone: +94 714897591
> _______________________________________________
> Carbon-dev mailing list
> Carbon-dev@wso2.org
> http://mail.wso2.org/cgi-bin/mailman/listinfo/carbon-dev
> 



-- 
*Senaka Fernando*
Product Manager - WSO2 Governance Registry;
Associate 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


[Attachment #5 (text/html)]

Hi Shankar,<br><br>I believe that we got the wrong impression out of this discussion. \
What I initially suggested is that Pradeeban check whether caching is properly setup. \
<br><br>If no distributed/replicated caching is available, the result is cached \
locally in each node (the two nodes don&#39;t communicate with each other), and even \
if you delete from the one side the other side will not know that since the caches \
are not replicated (and the second node won&#39;t invalidate its copy due to this \
reason). The second node will realize that the resource is gone only when the cache \
timesouts.<br>

<br>Thanks,<br>Senaka.<br><br><div class="gmail_quote">On Tue, Jan 31, 2012 at 9:47 \
AM, Selvaratnam Uthaiyashankar <span dir="ltr">&lt;<a \
href="mailto:shankar@wso2.com">shankar@wso2.com</a>&gt;</span> wrote:<br><blockquote \
class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid \
rgb(204,204,204);padding-left:1ex">

Hi Senaka,<br>
<br>
Does that mean, configRegistry.resourceExists(serviceResourcePath)<br>
takes from cache and resource =<br>
configRegistry.get(serviceResourcePath); takes from database? That<br>
doesn&#39;t sound right to me. If this is the case, why we are caching<br>
only the path, but not the resource?<br>
<br>
If above two succeed when the resource is not actually in the<br>
database, or above two failed when the resource is in the database,<br>
then it is due to the caching. If one of the above succeed and the<br>
other fails, then we need to fix it.<br>
<br>
Shankar<br>
<div><div class="h5"><br>
On Sun, Jan 29, 2012 at 3:10 PM, Senaka Fernando &lt;<a \
href="mailto:senaka@wso2.com">senaka@wso2.com</a>&gt; wrote:<br> &gt; Hi Dimuthu,<br>
&gt;<br>
&gt; Well that probably explains my point. If you test something across two nodes<br>
&gt; you need to turn off caching in registry or properly setup distributed or<br>
&gt; replicated caching. If not each node caches locally, and will not sync until<br>
&gt; timeout.<br>
&gt;<br>
&gt; Thanks,<br>
&gt; Senaka.<br>
&gt;<br>
&gt;<br>
&gt; On Thursday, January 26, 2012, Dimuthu Leelarathne &lt;<a \
href="mailto:dimuthul@wso2.com">dimuthul@wso2.com</a>&gt;<br> &gt; wrote:<br>
&gt;&gt; Hi Senaka,<br>
&gt;&gt;<br>
&gt;&gt; On Thu, Jan 26, 2012 at 5:26 AM, Senaka Fernando &lt;<a \
href="mailto:senaka@wso2.com">senaka@wso2.com</a>&gt; wrote:<br> &gt;&gt;&gt;<br>
&gt;&gt;&gt; Hi Pradeeban,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Probably, due to caching not properly setup.<br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; AFAIK registry reads from database when it is not in the cache. From my<br>
&gt;&gt; experience Registry worked perfectly when multicasting ports were closed \
in<br> &gt;&gt; the switch as well.<br>
&gt;&gt;<br>
&gt;&gt; thanks,<br>
&gt;&gt; dimuthu<br>
&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Thanks,<br>
&gt;&gt;&gt; Senaka.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Wed, Jan 25, 2012 at 11:39 PM, Kathiravelu Pradeeban<br>
&gt;&gt;&gt; &lt;<a href="mailto:pradeeban@wso2.com">pradeeban@wso2.com</a>&gt; \
wrote:<br> &gt;&gt;&gt;<br>
&gt;&gt;&gt; The deployment was with the SVN based deployment synchronizer. Ghost<br>
&gt;&gt;&gt; deployer is disabled.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Regards,<br>
&gt;&gt;&gt; Pradeeban.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Wed, Jan 25, 2012 at 7:43 PM, Kathiravelu Pradeeban<br>
&gt;&gt;&gt; &lt;<a href="mailto:pradeeban@wso2.com">pradeeban@wso2.com</a>&gt; \
wrote:<br> &gt;&gt;&gt;<br>
&gt;&gt;&gt; Hi,<br>
&gt;&gt;&gt; Azeez and I were testing a Stratos deployment with 2 nodes of \
Appserver.<br> &gt;&gt;&gt; We did a minor modification in the getService() of \
ServicePersistenceManager<br> &gt;&gt;&gt; as below.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Then we uploaded a service; accessed it from two browsers; and \
deleted<br> &gt;&gt;&gt; it.<br>
&gt;&gt;&gt; Interestingly the highlighted code-segment is executed, and prints \
true,<br> &gt;&gt;&gt; in the terminal of the other node.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; That means, the resourceExists, but the ResourceNotFoundException is<br>
&gt;&gt;&gt; thrown. Can someone explains this behavior?<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;     public Resource getService(AxisService axisService) throws \
Exception<br> &gt;&gt;&gt; {<br>
&gt;&gt;&gt;         try {<br>
&gt;&gt;&gt;             String serviceResourcePath =<br>
&gt;&gt;&gt; PersistenceUtils.getResourcePath(axisService);<br>
&gt;&gt;&gt;             if (configRegistry.resourceExists(serviceResourcePath)) \
{<br> &gt;&gt;&gt;                 Resource resource = null;<br>
&gt;&gt;&gt;                 try {<br>
&gt;&gt;&gt;                     resource = \
configRegistry.get(serviceResourcePath);<br> &gt;&gt;&gt;                 } catch \
(ResourceNotFoundException e) {<br> &gt;&gt;&gt;<br>
&gt;&gt;&gt; System.out.println(&quot;++++++++++++++++++++++++++++++++++&quot; +<br>
&gt;&gt;&gt; configRegistry.resourceExists(serviceResourcePath));<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; if(configRegistry.resourceExists(serviceResourcePath)){<br>
&gt;&gt;&gt;                         throw e;<br>
&gt;&gt;&gt;                     }<br>
&gt;&gt;&gt;                 }<br>
&gt;&gt;&gt; ....<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;     }<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Complete log for the interested:<br>
&gt;&gt;&gt; Node 1:<br>
&gt;&gt;&gt; <a href="tel:%5B2012-01-25%2005" value="+12012012505">[2012-01-25 \
05</a>:52:04,562] @3000.abw [6451] [WSO2 Stratos Application<br> &gt;&gt;&gt; Server] \
INFO {org.wso2.carbon.service.mgt.ServiceAdmin} -  Undeploying Web<br> &gt;&gt;&gt; \
service:<br> &gt;&gt;&gt; /mnt/<a \
href="http://209.126.198.68/wso2stratos-as-1.5.2/repository/tenants/6451/axis2services/Chad.aar" \
target="_blank">209.126.198.68/wso2stratos-as-1.5.2/repository/tenants/6451/axis2services/Chad.aar</a><br>



&gt;&gt;&gt; <a href="tel:%5B2012-01-25%2005" value="+12012012505">[2012-01-25 \
05</a>:52:10,101]  INFO<br> &gt;&gt;&gt; \
{org.apache.axis2.deployment.DeploymentEngine} -<br> &gt;&gt;&gt; \
org.apache.axis2.deployment.DeploymentException: The Chad service group name<br> \
&gt;&gt;&gt; is not valid.<br> &gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Node2:<br>
&gt;&gt;&gt; ++++++++++++++++++++++++++++++++++true<br>
&gt;&gt;&gt; <a href="tel:%5B2012-01-25%2005" value="+12012012505">[2012-01-25 \
05</a>:51:57,467] @3000.abw [6451] [WSO2 Stratos Application<br> &gt;&gt;&gt; \
Server]ERROR {org.wso2.carbon.core.persistence.AbstractPersistenceManager}<br> \
&gt;&gt;&gt; -  Could not get the Service resource from Config Registry<br> \
&gt;&gt;&gt; org.wso2.carbon.registry.core.exceptions.ResourceNotFoundException:<br> \
&gt;&gt;&gt; Resource does not exist at path<br> &gt;&gt;&gt; \
/_system/config/repository/axis2/service-groups/Chad/services/Chad<br> &gt;&gt;&gt;   \
at<br> &gt;&gt;&gt; org.wso2.carbon.registry.core.jdbc.handlers.builtin.MountHandler.get(MountHandler.java:426)<br>
 &gt;&gt;&gt;     at<br>
&gt;&gt;&gt; org.wso2.carbon.registry.core.jdbc.handlers.HandlerManager.get(HandlerManager.java:2378)<br>
 &gt;&gt;&gt;     at<br>
&gt;&gt;&gt; org.wso2.carbon.registry.core.jdbc.handlers.UserDefinedHandlerManager.get(UserDefinedHandlerManager.java:200)<br>
 &gt;&gt;&gt;     at<br>
&gt;&gt;&gt; org.wso2.carbon.registry.core.jdbc.handlers.HandlerLifecycleManager.get(HandlerLifecycleManager.java:814)<br>
 &gt;&gt;&gt;     at<br>
&gt;&gt;&gt; org.wso2.carbon.registry.core.jdbc.EmbeddedRegistry.get(EmbeddedRegistry.java:512)<br>
 &gt;&gt;&gt;     at<br>
&gt;&gt;&gt; org.wso2.carbon.registry.core.caching.CacheBackedRegistry.get(CacheBackedRegistry.java:133)<br>
 &gt;&gt;&gt;     at<br>
&gt;&gt;&gt; org.wso2.carbon.registry.core.session.UserRegistry.get(UserRegistry.java:528)<br>
 &gt;&gt;&gt;     at<br>
&gt;&gt;&gt; org.wso2.carbon.core.persistence.ServicePersistenceManager.getService(ServicePersistenceManager.java:89)<br>
 &gt;&gt;&gt;     at<br>
&gt;&gt;&gt; org.wso2.carbon.core.deployment.DeploymentInterceptor.serviceUpdate(DeploymentInterceptor.java:254)<br>
 &gt;&gt;&gt;     at<br>
&gt;&gt;&gt; org.apache.axis2.engine.AxisConfiguration.notifyObservers(AxisConfiguration.java:652)<br>
 &gt;&gt;&gt;     at<br>
&gt;&gt;&gt; org.apache.axis2.engine.AxisConfiguration.removeServiceGroup(AxisConfiguration.java:516)<br>
 &gt;&gt;&gt;     at<br>
&gt;&gt;&gt; org.apache.axis2.deployment.ServiceDeployer.undeploy(ServiceDeployer.java:188)<br>
 &gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; Carbon-dev mailing list<br>
&gt;&gt;&gt; <a href="mailto:Carbon-dev@wso2.org">Carbon-dev@wso2.org</a><br>
&gt;&gt;&gt; <a href="http://mail.wso2.org/cgi-bin/mailman/listinfo/carbon-dev" \
target="_blank">http://mail.wso2.org/cgi-bin/mailman/listinfo/carbon-dev</a><br> \
&gt;&gt;&gt;<br> &gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; Dimuthu Leelarathne<br>
&gt;&gt; Technical Lead<br>
&gt;&gt;<br>
&gt;&gt; WSO2, Inc. (<a href="http://wso2.com" \
target="_blank">http://wso2.com</a>)<br> &gt;&gt; email: <a \
href="mailto:dimuthul@wso2.com">dimuthul@wso2.com</a><br> &gt;&gt;<br>
&gt;&gt; Lean . Enterprise . Middleware<br>
&gt;&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Senaka Fernando<br>
&gt; Product Manager - WSO2 Governance Registry;<br>
&gt; Associate Technical Lead; WSO2 Inc.; <a href="http://wso2.com" \
target="_blank">http://wso2.com</a><br> &gt; Member; Apache Software Foundation; <a \
href="http://apache.org" target="_blank">http://apache.org</a><br> &gt;<br>
&gt; E-mail: senaka AT <a href="http://wso2.com" target="_blank">wso2.com</a><br>
&gt; P: <a href="tel:%2B1%20408%20754%207388" value="+14087547388">+1 408 754 \
7388</a>; ext: 51736; M: <a href="tel:%2B94%2077%20322%201818" \
value="+94773221818">+94 77 322 1818</a><br> &gt; Linked-In: <a \
href="http://linkedin.com/in/senakafernando" \
target="_blank">http://linkedin.com/in/senakafernando</a><br> &gt;<br>
&gt; Lean . Enterprise . Middleware<br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Carbon-dev mailing list<br>
&gt; <a href="mailto:Carbon-dev@wso2.org">Carbon-dev@wso2.org</a><br>
&gt; <a href="http://mail.wso2.org/cgi-bin/mailman/listinfo/carbon-dev" \
target="_blank">http://mail.wso2.org/cgi-bin/mailman/listinfo/carbon-dev</a><br> \
&gt;<br> <br>
<br>
<br>
--<br>
</div></div>S.Uthaiyashankar<br>
Senior Architect &amp; Senior Manager<br>
WSO2 Inc.<br>
<a href="http://wso2.com/" target="_blank">http://wso2.com/</a> - &quot;lean . \
enterprise . middleware&quot;<br> <br>
Phone: <a href="tel:%2B94%20714897591" value="+94714897591">+94 714897591</a><br>
<div class="HOEnZb"><div \
class="h5">_______________________________________________<br> Carbon-dev mailing \
list<br> <a href="mailto:Carbon-dev@wso2.org">Carbon-dev@wso2.org</a><br>
<a href="http://mail.wso2.org/cgi-bin/mailman/listinfo/carbon-dev" \
target="_blank">http://mail.wso2.org/cgi-bin/mailman/listinfo/carbon-dev</a><br> \
</div></div></blockquote></div><br><br clear="all"><br>-- <br><font \
style="font-family:garamond,serif;color:rgb(0,0,0)" size="2"><b>Senaka \
Fernando</b></font><br style="font-family:garamond,serif;color:rgb(102,102,102)">

<span style="font-family:garamond,serif;color:rgb(51,51,51)"><font size="1">Product \
Manager - WSO2 Governance Registry; <br></font></span><span \
style="font-family:garamond,serif;color:rgb(51,51,51)"><font size="1">Associate \
Technical Lead; </font></span><span \
style="font-family:garamond,serif;color:rgb(51,51,51)"><font size="1">WSO2 Inc.; <a \
href="http://wso2.com" target="_blank">http://wso2.com</a></font></span><i \
style="font-family:garamond,serif;color:rgb(51,51,51)"><font size="1"><br>

Member; Apache Software Foundation; <a href="http://apache.org" \
target="_blank">http://apache.org</a><br><br>E-mail: senaka AT <a \
href="http://wso2.com" target="_blank">wso2.com</a><br></font></i><i \
style="font-family:garamond,serif;color:rgb(51,51,51)"><font size="1">P: +1 408 754 \
7388; ext: 51736</font></i>; <i \
style="font-family:garamond,serif;color:rgb(51,51,51)"><font size="1">M: +94 77 322 \
1818<br>

Linked-In: <a href="http://linkedin.com/in/senakafernando" \
target="_blank">http://linkedin.com/in/senakafernando</a><br><br></font></i><span \
style="font-family:garamond,serif;color:rgb(51,51,51)"><font size="1">Lean . \
Enterprise . Middleware</font></span><br>

<br>



_______________________________________________
Carbon-dev mailing list
Carbon-dev@wso2.org
http://mail.wso2.org/cgi-bin/mailman/listinfo/carbon-dev


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic