Hi Pamod,

Sry for the ambiguity :), I asked whether MB 3.0.0 supports this? I
couldn't get multiple subscriptions to work. When I try to subscribe to
multiple topics.

client.subscribe("topic1");
client.subscribe("topic2");

I got the following error, Am I missing something here?

ERROR {org.wso2.andes.kernel.disruptor.LogExceptionHandler} -  [ Sequence:
10463 ] Exception occurred while processing inbound events.
org.wso2.andes.store.AndesDataIntegrityViolationException: Error occurred
while storing queue information  queue name:carbon:subscriberid0129951
at
org.wso2.andes.store.rdbms.RDBMSStoreUtils.convertBySQLException(RDBMSStoreUtils.java:149)
at
org.wso2.andes.store.rdbms.RDBMSStoreUtils.convertSQLException(RDBMSStoreUtils.java:118)
at
org.wso2.andes.store.rdbms.RDBMSAndesContextStoreImpl.storeQueueInformation(RDBMSAndesContextStoreImpl.java:783)
at
org.wso2.andes.store.FailureObservingAndesContextStore.storeQueueInformation(FailureObservingAndesContextStore.java:326)
at
org.wso2.andes.kernel.AMQPConstructStore.addQueue(AMQPConstructStore.java:114)
at
org.wso2.andes.kernel.AndesContextInformationManager.createQueue(AndesContextInformationManager.java:148)
at
org.wso2.andes.kernel.disruptor.inbound.InboundQueueEvent.updateState(InboundQueueEvent.java:134)
at
org.wso2.andes.kernel.disruptor.inbound.InboundEventContainer.updateState(InboundEventContainer.java:167)
at
org.wso2.andes.kernel.disruptor.inbound.StateEventHandler.onEvent(StateEventHandler.java:77)
at
org.wso2.andes.kernel.disruptor.inbound.StateEventHandler.onEvent(StateEventHandler.java:42)
at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:128)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:
Duplicate entry 'carbon:subscriberid0129951' for key 'PRIMARY'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:408)
at com.mysql.jdbc.Util.getInstance(Util.java:383)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1049)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4226)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4158)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2615)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2776)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2840)
at
com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2082)
at
com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2334)
at
com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2262)
at
com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2246)
at
org.wso2.andes.store.rdbms.RDBMSAndesContextStoreImpl.storeQueueInformation(RDBMSAndesContextStoreImpl.java:777)
... 11 more
[2015-10-03 17:07:08,605] ERROR
{org.wso2.andes.mqtt.connectors.PersistenceStoreConnector} -  Error
occurred while opening subscription
org.wso2.andes.kernel.AndesException: Error occurred while checking if
queue: carbon:subscriberid0129951 is added
at
org.wso2.andes.kernel.disruptor.inbound.InboundQueueEvent.waitForCompletion(InboundQueueEvent.java:278)
at org.wso2.andes.kernel.Andes.createQueue(Andes.java:357)
at
org.wso2.andes.mqtt.connectors.PersistenceStoreConnector.addSubscriber(PersistenceStoreConnector.java:164)
at
org.wso2.andes.mqtt.MQTTopicManager.registerTopicSubscriptionInCluster(MQTTopicManager.java:409)
at
org.wso2.andes.mqtt.MQTTopicManager.addTopicSubscription(MQTTopicManager.java:177)
at
org.dna.mqtt.wso2.AndesMQTTBridge.onTopicSubscription(AndesMQTTBridge.java:168)
at
org.dna.mqtt.moquette.messaging.spi.impl.ProtocolProcessor.processSubscribe(ProtocolProcessor.java:800)
at
org.dna.mqtt.moquette.messaging.spi.impl.SimpleMessaging.onEvent(SimpleMessaging.java:186)
at
org.dna.mqtt.moquette.messaging.spi.impl.SimpleMessaging.onEvent(SimpleMessaging.java:47)
at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:128)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.util.concurrent.TimeoutException: Timeout waiting for task.
at
com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:269)
at
com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:96)
at
org.wso2.andes.kernel.disruptor.inbound.InboundQueueEvent.waitForCompletion(InboundQueueEvent.java:269)
... 12 more
[2015-10-03 17:07:08,622]  INFO {org.wso2.andes.kernel.MessagingEngine} -
 Purged messages of destination carbon:subscriberid0129951
[2015-10-03 17:07:08,651]  INFO
{org.wso2.andes.subscription.SubscriptionStore} -  Local Subscription
DELETED [topicYC1]ID=carbon:subscriberid0129951@NODEyasassri-ThinkPad-T540p/
127.0.1.1/T=1443872227597/D=true/X=true/O=/E=amq.direct/ET=/EUD=0/S=true
[2015-10-03 17:07:08,651]  INFO
{org.wso2.andes.kernel.AndesContextInformationManager} -  Delete queue :
carbon:subscriberid0129951
[2015-10-03 17:07:08,652]  INFO
{org.wso2.andes.subscription.SubscriptionStore} -  Local subscription
DISCONNECTED [topicYC2]ID=subscriberid0129951@NODEyasassri-ThinkPad-T540p/
127.0.1.1/T=1443872228606/D=true/X=true/O=/E=amq.direct/ET=/EUD=0/S=true
[2015-10-03 17:07:08,652]  WARN
{org.wso2.andes.subscription.SubscriptionStore} -  Cannot disconnect
non-existing subscription
[2015-10-03 17:07:08,652] ERROR
{org.wso2.andes.kernel.slot.OrphanedSlotHandler} -  Deleting or
disconnection a subscription which was not added previously
[2015-10-03 17:07:08,652] ERROR {org.wso2.andes.mqtt.MQTTopicManager} -
 Error while adding the subscriber to the cluster
org.wso2.andes.mqtt.MQTTException: Error occurred while opening
subscription
at
org.wso2.andes.mqtt.connectors.PersistenceStoreConnector.addSubscriber(PersistenceStoreConnector.java:191)
at
org.wso2.andes.mqtt.MQTTopicManager.registerTopicSubscriptionInCluster(MQTTopicManager.java:409)
at
org.wso2.andes.mqtt.MQTTopicManager.addTopicSubscription(MQTTopicManager.java:177)
at
org.dna.mqtt.wso2.AndesMQTTBridge.onTopicSubscription(AndesMQTTBridge.java:168)
at
org.dna.mqtt.moquette.messaging.spi.impl.ProtocolProcessor.processSubscribe(ProtocolProcessor.java:800)
at
org.dna.mqtt.moquette.messaging.spi.impl.SimpleMessaging.onEvent(SimpleMessaging.java:186)
at
org.dna.mqtt.moquette.messaging.spi.impl.SimpleMessaging.onEvent(SimpleMessaging.java:47)
at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:128)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.wso2.andes.kernel.AndesException: Error occurred while
checking if queue: carbon:subscriberid0129951 is added
at
org.wso2.andes.kernel.disruptor.inbound.InboundQueueEvent.waitForCompletion(InboundQueueEvent.java:278)
at org.wso2.andes.kernel.Andes.createQueue(Andes.java:357)
at
org.wso2.andes.mqtt.connectors.PersistenceStoreConnector.addSubscriber(PersistenceStoreConnector.java:164)
... 10 more
Caused by: java.util.concurrent.TimeoutException: Timeout waiting for task.
at
com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:269)
at
com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:96)
at
org.wso2.andes.kernel.disruptor.inbound.InboundQueueEvent.waitForCompletion(InboundQueueEvent.java:269)
... 12 more
[2015-10-03 17:07:08,653] ERROR {org.dna.mqtt.wso2.AndesMQTTBridge} -
 Error occurred while subscription is initiated for topic : topicYC2 and
session id :subscriberid0129951
org.wso2.andes.mqtt.MQTTException: Error occurred while opening
subscription
at
org.wso2.andes.mqtt.connectors.PersistenceStoreConnector.addSubscriber(PersistenceStoreConnector.java:191)
at
org.wso2.andes.mqtt.MQTTopicManager.registerTopicSubscriptionInCluster(MQTTopicManager.java:409)
at
org.wso2.andes.mqtt.MQTTopicManager.addTopicSubscription(MQTTopicManager.java:177)
at
org.dna.mqtt.wso2.AndesMQTTBridge.onTopicSubscription(AndesMQTTBridge.java:168)
at
org.dna.mqtt.moquette.messaging.spi.impl.ProtocolProcessor.processSubscribe(ProtocolProcessor.java:800)
at
org.dna.mqtt.moquette.messaging.spi.impl.SimpleMessaging.onEvent(SimpleMessaging.java:186)
at
org.dna.mqtt.moquette.messaging.spi.impl.SimpleMessaging.onEvent(SimpleMessaging.java:47)
at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:128)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.wso2.andes.kernel.AndesException: Error occurred while
checking if queue: carbon:subscriberid0129951 is added
at
org.wso2.andes.kernel.disruptor.inbound.InboundQueueEvent.waitForCompletion(InboundQueueEvent.java:278)
at org.wso2.andes.kernel.Andes.createQueue(Andes.java:357)
at
org.wso2.andes.mqtt.connectors.PersistenceStoreConnector.addSubscriber(PersistenceStoreConnector.java:164)
... 10 more
Caused by: java.util.concurrent.TimeoutException: Timeout waiting for task.
at
com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:269)
at
com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:96)
at
org.wso2.andes.kernel.disruptor.inbound.InboundQueueEvent.waitForCompletion(InboundQueueEvent.java:269)
... 12 more


With Regards,

On Sat, Oct 3, 2015 at 4:55 PM, Pamod Sylvester <[email protected]> wrote:

> Hi Yasassri,
>
> According to the 3.1 specification its allowed to have multiple
> subscriptions with the single connection,
>
> In the SUBSCRIBE section under payload it specifies the following,
>
> "The payload of a SUBSCRIBE message contains a list of topic names to
> which the client wants to subscribe"
>
> Also we have a test case for this in the Paho interop test suite for this
> [1]. I couldn't run this recently but you should be able to verify against
> it on the functional behavior.
>
> Also ideally we need to port the test cases to our integration tests if
> something is missing WDYT ?
>
> @Pumudu/Ramith i am +1 for the approach and prioritizing 3.1.1
> specification.
>
> [1] https://wiki.eclipse.org/File:Mqtt-test.zip
>
> Thanks,
> Pamod
>
> On Sat, Oct 3, 2015 at 4:25 PM, Yasassri Ratnayake <[email protected]>
> wrote:
>
>> Hi Pamod,
>>
>> Do we allow multiple topic subscriptions with the same ClientID? As per
>> my observation we do not allow this.
>>
>> So if we do not allow this, there is no point in keeping a stale
>> connection.
>>
>> With Regards,
>>
>> On Sat, Oct 3, 2015 at 3:55 PM, Pumudu Ruhunage <[email protected]> wrote:
>>
>>> Hi All,
>>>
>>> @pamod, I also agree disconnecting is not the ideal solution. just
>>> thought from client side, since it's not getting any indication of not
>>> subscribing to the topic.
>>>
>>> Then implementation will be as follows.
>>>
>>> MQTT 3.1    - No error code send to client.
>>> MQTT 3.1.1 - Send error code 0x80 to client.
>>>
>>> Thanks,
>>> Pumudu
>>>
>>> On Sat, Oct 3, 2015 at 3:44 PM, Ramith Jayasinghe <[email protected]>
>>> wrote:
>>>
>>>> I think whats more relevant is to make v 3.1.1 case correct.
>>>>
>>>>
>>>> On Sat, Oct 3, 2015 at 2:03 PM, Pamod Sylvester <[email protected]> wrote:
>>>>
>>>>> Both versions of the protocol are supported at the moment AFAIK.
>>>>>
>>>>> So for 3.1.1 sending the error code is adequate. As mentioned in the
>>>>> previous mail there can be several topic subscriptions in one connection.
>>>>> So disconnection might not be the ideal solution IMO. WDYT ?
>>>>>
>>>>>
>>>>> On Saturday, October 3, 2015, Pumudu Ruhunage <[email protected]> wrote:
>>>>>
>>>>>> Hi All,
>>>>>>
>>>>>> Since we have to support both protocols we need implement both
>>>>>> behaviors based on protocols? right ?
>>>>>> IMO for 3.1 we need to indicate that it's not subscribed to the topic
>>>>>> by disconnection if it's not subscribed. otherwise it gives false
>>>>>> impression that client successfully subscribed to given topic.
>>>>>>
>>>>>> So can we agree on following implementation?
>>>>>> MQTT 3.1    - No error code send to client. Disconnect client
>>>>>> from broker.
>>>>>> MQTT 3.1.1 - Send error code 0x80 to client. (Is error code enough ?
>>>>>> should we disconnect client from broker ?)
>>>>>>
>>>>>> WDYT ?
>>>>>>
>>>>>> Thanks,
>>>>>> Pumudu
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Sat, Oct 3, 2015 at 10:18 AM, Pamod Sylvester <[email protected]>
>>>>>> wrote:
>>>>>>
>>>>>>> The CONNECT and SUBSCRIBE are two different command messages. The
>>>>>>> subscription phase comes after the connection.
>>>>>>>
>>>>>>> Also the other fact is a single connection could involve multiple
>>>>>>> topic subscriptions. So lets say if a given tenant sends a list of topic
>>>>>>> subscriptions there could be subscriptions which the tenant could be
>>>>>>> authorised among that list. So closing/refusing the entire connection 
>>>>>>> might
>>>>>>> not be appropriate in this case.
>>>>>>>
>>>>>>> - 0x05 (Connection Refused: not authorized) is sent as an
>>>>>>> acknowledgement for CONNECT message (CONNACK).  i.e a given client has
>>>>>>> provided unauthorised credentials etc.
>>>>>>>
>>>>>>> During this phase the subscription will not occur, we only could
>>>>>>> validate whether a given tenants credentials are correct or not.
>>>>>>>
>>>>>>> - When the subscription happens based on my understanding of the
>>>>>>> spec it has passed the CONNACK stage. The only way we could indicate an
>>>>>>> error related to subscription is through SUBACK.
>>>>>>>
>>>>>>>   # The MQTT 3.1 specification has a limitation where error codes
>>>>>>> cannot be sent with SUBACK. Hence for 3.1 spec having subscription 
>>>>>>> failed
>>>>>>> in silent mode is expected behaviour.
>>>>>>>
>>>>>>> You could find a similar discussion on [1]. Based on [1] what
>>>>>>> they've done is hacked the client and the server to accept error codes 
>>>>>>> for
>>>>>>> 3.1 specification. This will not be clean and will not interop with 
>>>>>>> other
>>>>>>> clients (even if we could hack the server to send error codes, the 
>>>>>>> clients
>>>>>>> which has implemented according to 3.1 specification will not accept the
>>>>>>> error message).
>>>>>>>
>>>>>>> Another option is to initiate a disconnection from the broker to
>>>>>>> avoid stale connections. But then again as mentioned in the beginning if
>>>>>>> there're list of subscriptions for a connection, even the authorised
>>>>>>> subscriptions would not be able to consume.
>>>>>>>
>>>>>>>   # The MQTT 3.1.1 specification there's an error code introduced
>>>>>>> 0x80 for forbidden subscriptions. So that should be the way we should
>>>>>>> ideally use for indication of an error IMHO. But it'll be available in
>>>>>>> 3.1.1.
>>>>>>>
>>>>>>>
>>>>>>> [1] https://issues.jboss.org/browse/ENTMQ-990
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Sat, Oct 3, 2015 at 7:06 AM, Hasitha Hiranya <[email protected]>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> Yes, Connection Refused, not authorized is the best we can do.
>>>>>>>>
>>>>>>>> @Pamod, any batter alternative?
>>>>>>>>
>>>>>>>> Thanks!
>>>>>>>>
>>>>>>>> On Fri, Oct 2, 2015 at 10:55 PM, Yasassri Ratnayake <
>>>>>>>> [email protected]> wrote:
>>>>>>>>
>>>>>>>>> Hi Pumudu,
>>>>>>>>>
>>>>>>>>> MQTT spec doesn't talk about a permission model, So IMO the
>>>>>>>>> closest error we can propagate to the client is "0x05 Connection 
>>>>>>>>> Refused,
>>>>>>>>> not authorized".
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> With Regards,
>>>>>>>>>
>>>>>>>>> On Fri, Oct 2, 2015 at 6:17 PM, Pumudu Ruhunage <[email protected]>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Hi All,
>>>>>>>>>>
>>>>>>>>>> If a tenant don't have permission to subscribe to a given topic
>>>>>>>>>> (tenant 'a.com' try to subscribe to tenant 'b.com') currently it
>>>>>>>>>> will keep connected even though it's not subscribed, because user
>>>>>>>>>> authentication was successful. This is misleading to subscriber as no
>>>>>>>>>> return code sent and it's actively connected to broker.
>>>>>>>>>> AFAIK mqtt don't define how to handle tenancy scenarios in it's
>>>>>>>>>> spec. Couldn't find a definition in MQTT spec 3.1.0/3.1.1 on how to 
>>>>>>>>>> reject
>>>>>>>>>> if permission denied to subscribe to a given topic(due to tenancy).
>>>>>>>>>>
>>>>>>>>>> One option to handle this scenario is to send return code 5 
>>>>>>>>>> (Connection
>>>>>>>>>> Refused, not authorized) to client if it doesn't have permission
>>>>>>>>>> to subscribe to given topic. This way client will disconnect if it 
>>>>>>>>>> don't
>>>>>>>>>> have permission to subscribe. Is this acceptable or are there any
>>>>>>>>>> alternatives to handle this scenario?
>>>>>>>>>>
>>>>>>>>>> jira https://wso2.org/jira/browse/MB-1409
>>>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>>> Pumudu
>>>>>>>>>> --
>>>>>>>>>> Pumudu Ruhunage
>>>>>>>>>> Associate Software Engineer | WSO2 Inc
>>>>>>>>>> M: +94 779 664493  | http://wso2.com
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Dev mailing list
>>>>>>>>>> [email protected]
>>>>>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Yasassri Ratnayake
>>>>>>>>> Software Engineer - QA
>>>>>>>>> WSO2 Inc ; http://wso2.com
>>>>>>>>> lean.enterprise.middleware
>>>>>>>>> *Mobile : +94715933168 <%2B94715933168>*
>>>>>>>>> *Blogs : http://yasassriratnayake.blogspot.com
>>>>>>>>> <http://yasassriratnayake.blogspot.com/>*
>>>>>>>>> *            http://wso2logs.blogspot.com
>>>>>>>>> <http://wso2logs.blogspot.com>*
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Dev mailing list
>>>>>>>>> [email protected]
>>>>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> *Hasitha Abeykoon*
>>>>>>>> Senior Software Engineer; WSO2, Inc.; http://wso2.com
>>>>>>>> *cell:* *+94 719363063*
>>>>>>>> *blog: **abeykoon.blogspot.com* <http://abeykoon.blogspot.com>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> *Pamod Sylvester *
>>>>>>>
>>>>>>> *WSO2 Inc.; http://wso2.com <http://wso2.com>*
>>>>>>> cell: +94 77 7779495
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Pumudu Ruhunage
>>>>>> Associate Software Engineer | WSO2 Inc
>>>>>> M: +94 779 664493  | http://wso2.com
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> *Pamod Sylvester *
>>>>>
>>>>> *WSO2 Inc.; http://wso2.com <http://wso2.com>*
>>>>> cell: +94 77 7779495
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Dev mailing list
>>>>> [email protected]
>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Ramith Jayasinghe
>>>> Technical Lead
>>>> WSO2 Inc., http://wso2.com
>>>> lean.enterprise.middleware
>>>>
>>>> E: [email protected]
>>>> P: +94 777542851
>>>>
>>>>
>>>
>>>
>>> --
>>> Pumudu Ruhunage
>>> Associate Software Engineer | WSO2 Inc
>>> M: +94 779 664493  | http://wso2.com
>>>
>>> _______________________________________________
>>> Dev mailing list
>>> [email protected]
>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>
>>>
>>
>>
>> --
>> Yasassri Ratnayake
>> Software Engineer - QA
>> WSO2 Inc ; http://wso2.com
>> lean.enterprise.middleware
>> *Mobile : +94715933168 <%2B94715933168>*
>> *Blogs : http://yasassriratnayake.blogspot.com
>> <http://yasassriratnayake.blogspot.com/>*
>> *            http://wso2logs.blogspot.com <http://wso2logs.blogspot.com>*
>>
>
>
>
> --
> *Pamod Sylvester *
>
> *WSO2 Inc.; http://wso2.com <http://wso2.com>*
> cell: +94 77 7779495
>



-- 
Yasassri Ratnayake
Software Engineer - QA
WSO2 Inc ; http://wso2.com
lean.enterprise.middleware
*Mobile : +94715933168*
*Blogs : http://yasassriratnayake.blogspot.com
<http://yasassriratnayake.blogspot.com/>*
*            http://wso2logs.blogspot.com <http://wso2logs.blogspot.com>*
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to