Hi Soumadeep
pls see my in line comments
Soumadeep wrote:
> Hi,
>
> One thing I completely agree with Sanjiva is that this has been
> dragged unnecessarily for this long. Let me emphasize here one thing,
> that the intension is not to replace the concepts of data binding as
> used by XMLBeans which is again an Apache project or trying to
> re-invent what has been written. To this effect enough reasons have
> been provided as to why this approach was taken. For convenience let
> me give one of the use cases and reasons for which SynapseObject was
> proposed:
>
> Reasons:
> 1) Java Properties class lets you handle name-value pairs in a very
> good way but when it comes to representing complex objects it becomes
> very difficult.
Why do you want to use java properties ?
Java property can handle both simple and complex type ,
System.getProperties().put(Objcet key , Object value)
so the value can be anything.
> 2) Using the concept of data binding introduces a very rigid and tight
> coupling of data and schema. So if the schema changes the underlying
> data handling mechanism needs to be changed (which includes the
> beans/classes to hold the complex data structure)
if the schema going to be change I think we have to anyway change the
code base , no matter if you use common model.
> 3) Intelligent search features are either driven by xpath/xqueries for
> pure XML or embedded logic if beans are used, SynapseObject has
> inbuilt search features by which you can perform complex searches
yes , if you use BeanUtill then you wont be have these feature :(
> 4) The reason people use Java Properties class is because name-value
> pairs can be shared by other class without any dependency.
> SynapseObject is more like a Properties Class with added features to
> handle Complex Objects and also allow search features.
>
using Java property you still can do that, may be it wrong but no one is
stopping doing that.
>
> Uses Cases:
> A) Data-Sharing between mediators: Consumers need to be identified,
> once it's identified the information could be shared by the SLA
> mediator which depending on a consumer will set the priority. Below is
> the pseudo code of how this can be achieved using SynapseObject and
> how datasharing would become easy.
>
> Background Info:
> -----------------------
> ConsumerIdentification mediator needs to identify a client by the
> following ways:
> 1) IP {eg. 192.168.5.*}
> 2) IP Range {eg. 192.168.5.20- 192.168.5.30}
> 3) WS-SEC auth token
> 4) HTTP auth token
> 5) certificate
> (Other factors that need to be considered whether the incoming message
> was first encrypted and then signed or was it signed and then encrypted).
> Let's consider 1) IP
>
> Using SynapseObject:
> ConsumerIdentification
> --------------------------------
>
> xml frag:
> <?xml version='1.0' encoding='windows-1252'?>
> <SynapseObject name="ci">
> <SynapseObject name="consumer0">
> <Attribute name="CONSUMER_TYPE" type="String">GOLD</Attribute>
> <Attribute name="IP_ADDRESS_FROM" type="String">192.168.6.0</Attribute>
> <Attribute name="IP_ADDRESS_TO" type="String">192.168.6.255</Attribute>
> <Attribute name="HTTP_AUTH_USERNAME" type="String">john</Attribute>
> <Attribute name="WS_SEC_USERNAME" type="String">john</Attribute>
> <SynapseObject name="assignedService">
> <Attribute name="serviceid1" type="String">stockQuote1</Attribute>
> </SynapseObject>
> </SynapseObject>
> <SynapseObject name="consumer1">
> <Attribute name="CONSUMER_TYPE" type="String">SILVER</Attribute>
> <Attribute name="IP_ADDRESS_FROM"
> type="String">192.168.6.255</Attribute>
> <Attribute name="IP_ADDRESS_TO" type="String">192.167.6.255</Attribute>
> <Attribute name="HTTP_AUTH_USERNAME" type="String">mary</Attribute>
> <Attribute name="WS_SEC_USERNAME" type="String">mary</Attribute>
> <SynapseObject name="assignedService">
> <Attribute name="serviceid1" type="String">stockQuote</Attribute>
> <Attribute name="ip" type="String">192</Attribute>
> </SynapseObject>
> </SynapseObject>
> </SynapseObject>
>
> in the ci mediator code fragment
>
> // the the requester ip
> ip = {get the remote ip from the messageContext/SynapseContext }
>
> //Identify if the consumer is there and get appropriate details and
> store the consumer related details in the messageContext, one more
> things to note is that storing shared data is by the mediator name
> itself eg. ci
> SynapseObject obj =
> consumerIdentification.findSynapseObjectByAttributeValueStartingWith(ip);
> messageContext.setProperty(consumerIdentification.getName(),obj);
> obj will contain all the required values if identified!
>
> SLA
> ------
>
> xml Fragment:
>
> <SynapseObject name="SLA">
> <SynapseObject name="consumer0">
> <SynapseObject name="Service0">
> <Attribute name="EPR"
> type="String">http://www.webservicex.net/stockquote.asmx</Atrribute>
> <Attribute name="priority" type="Integer">0</Attribute>
> </SynapseObject>
> <SynapseObject name="Service1">
> <Attribute name="EPR"
> type="String">http://www.webservicex.net/findZIPCode.asmx</Atrribute>
> <Attribute name="priority" type="Integer">1</Attribute>
> </SynapseObject>
> </SynapseObject>
> </SynapseObject>
>
> in the SLA Mediator code fragment
>
> //As there is a dependency between the SLA mediator and CI the SLA
> mediator will pick information for its dependency (Note: we also
> proposed a concept
> //of MediatorContext which will have dependency and other information
> for a particular mediator)
>
> //Get the identified consumer from the messagecontext
> SynapseObject consumerIdentification =
> (SynapseObject)messageContext.getProperty("ci");
>
> // get the consumer name and consumer type
> String consumerName = consumerIdentification.getName();
> String consumerType = consumerIdentification.getString("CONSUMER_TYPE");
>
> //find the sla details for the identified consumer
> SynapseObject consumer =
> sla.findSynapseObjectByAttributeValue(consumerName);
> String fromAddress = (String)synapseMessageContext.getTo();
> SynapseObject service =
> consumer.findSynapseObjectByAttributeValue(fromAddress );
>
> // The priority value would be used by the SLA mediator to forward the
> request to the provider depending on the priority.
> String priority = service.getString("priority");
>
> Regards
> Soumadeep
>
> -----Original Message-----
> *From:* Saminda Abeyruwan [mailto:[EMAIL PROTECTED]
> *Sent:* Saturday, March 18, 2006 6:59 PM
> *To:* [email protected]
> *Subject:* Re: SynapseObject - Reminder...
>
> Hi Devs,
>
> These are my concern regarding SynapseObject,
>
> If the following XML is considered wrt SynapseObject semantics,
>
> <SynapseObject name="sla">
> <attribute name="service"
> type="STRING">http://myhost:myport/Service</attribute>
> <SynapseObject name="consumer">
> <attribute name="ip" type="STRING">192.9.2.11
> <http://192.9.2.11></attribute>
> </SynapseObject>
> </SynapseObject>
>
> which is similar to,
>
> <sla>
> <service> http://myhost:myport/Service </service>
> <consumer>
> <ip>192.9.2.11 <http://192.9.2.11></ip>
> </consumer>
> </sla>
>
> Now if we have Java beans as follows,
>
> public class sla {
> private String service;
> private Consumer consumer;
>
> //getter and setters
> }
>
> public class Consumer {
> private String ip;
>
> //getter and setters
> }
>
> and using the Axis2's
> org.apache.axis2.databinding.utils.BeanUtil.getPullParser(Object
> beanObject, QName beanName);
>
> i can get a XMLStreamReader and build the OMElement i need. And if
> i have prior XML, using
> Object []
> org.apache.axis2.databinding.utils.BeanUtil.deserialize(OMElement
> response, Object [] javaTypes); i can fill the bean object.
>
> So if I'm a Mediator author, using BeanUtil i can manipulate XML
> with Zero training.
>
> Now if my XML is schema complaint, using XSD2Java i can generate
> Beans and using XX.parse() method i can fill the beans.
>
> So what is done by SynapseObject is already done by Axis2's
> BeanUtil and XSD2Java and they can do much more. So IMHO we do
> not need to reinvent the wheel with SynapseObject.
>
> Those are my concerns.
>
> Thank you
>
> Saminda
>
>
>
> On 3/17/06, *Sanjiva Weerawarana* <[EMAIL PROTECTED]
> <mailto:[EMAIL PROTECTED]>> wrote:
>
> On Mon, 2006-03-27 at 18:44 +0530, Vikas wrote:
> > Hi,
> >
> > This is regarding the Synapse object proposed by me and
> Soumadeep...
> >
> > For convenience I am putting below the links for reference:
> >
> <http://mail-archives.apache.org/mod_mbox/ws-synapse-dev/200602.mbox/%
> > [EMAIL PROTECTED] %3e>
> > and the source code has been available in the Scratch
> >
>
> <http://svn.apache.org/repos/asf/incubator/synapse/trunk/scratch/infravio/synapse-SO
>
> <http://svn.apache.org/repos/asf/incubator/synapse/trunk/scratch/infravio/synapse-SO>>
> >
> > I feel that it an effective utility and have made use of it
> in a all
> > the mediators that I would like to commit . It sure has made
> handling
> > mediator's config data easier..
> > Would be checking in the cleaned up code for SynapseObject
> as an
> > extension...Which I guess is OK.
> >
> > Please let me know if anyone has any concerns about it??
>
> I do .. I will write an explanatory reply tomrrow my time ..
> sorry for
> keeping quiet; I've been reading much of this thread but just
> haven't
> had the time to jump in.
>
> I *will* dive in tomorrow (later today my time really). I'm
> afraid its
> going to have lots of -1s against SynapseObject features :( ..
> just to
> give you a warning of where its going.
>
> Sanjiva.
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail:
> [EMAIL PROTECTED]
> <mailto:[EMAIL PROTECTED]>
>
>
--
Thanks,
Deepal
................................................................
~Future is Open~
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]