It does have this operation, but there are two resource types in the 
wsn-producer sample: the producer resource and the subscription resource. 
you need to add the WSRP Set capability to the *subscription* resource's 
WSDL/definition. you can find the subscription portType in 
/wsdl/WS-BaseNotification-1_3.wsdl - you'll need to copy in the 
SetResourceProperties content.

As for your scenario, I believe what you want to do is have each consumer 
resource subscribe() with the producer, specifying their own filters each 
time. They will each get back their own subscription reference, and the 
filter will already be set to what they need. Trying to share one 
subscription among many consumer resources won't work for two reasons:

1. A WSN subscription can only have one consumer (wsnt:ConsumerReference).

2. Setting the filter and receiving notifications will not be an atomic 
operation, and the latter takes an unknown amount of time, so you have a 
big synchronization problem.

The right way to handle this is to use NotificationProducerClient in your 
ConsumerCapability.initialize() method to subscribe() using the filters 
you want. Then you don't have to filter on the consumer side - you 
subscribed with a given filter, so you know that you're going to get 
messages that meet that filter. you only need to change the filter (with 
SetResourceProperties) if a consumer resource wants to change the type of 
data its processing, not because of something another consumer resource 
has done.

Dan



dnguyen <[EMAIL PROTECTED]> wrote on 02/28/2007 06:48:07 PM:

> 
> Hi.  The wsn-producer sample has that operation in the WsResource.wsdl
> already.  I am assuming that I do not need to create one for 
wsn-consumer? 
> The scenario we are going for with the updates of the filter is that
> multiple client applications will be using this one wsn-consumer WS, 
since
> we were not sure of dynamic deployment of wsn-consumer WS for distinct
> endpoints.  Each client would specify its own filter for data, which 
would
> be passed to a "broker" (each client would also have an associated
> ConsumerCapability that will have that client's filter), which would 
then
> update the filter to the existing subscription.  Since the notify call 
would
> contain the combine data from the producer, the wsn-consumer WS would 
then
> pass the data to each ConsumerCapability to be filtered again for their
> perspective clients.
> 
> We didn't want to do the filtering twice, but we don't see another way 
at
> the moment.  Please let us know if there is a better way to do this.
> 
> Regards,
> Dong
> 
> 
> Daniel Jemiolo wrote:
> > 
> > You would need to add the WSRP Set capability (
> > http://docs.oasis-open.org/wsrf/rpw-2/Set), with impl class 
> > org.apache.muse.ws.resource.properties.set.impl.SimpleSetCapability. 
It 
> > will probably be easier if you add the WSRP SetResourceProperties 
> > operation to your WSDL and have wsdl2java handle all of the 
code/artifact 
> > generation. The SetResourceProperties WSDL content can be found in the 

> > 'wsrf' sample app (see /wsdl/WsResource.wsdl).
> > 
> > However, no one has ever tried to switch a subscription filter 
> > mid-lifecycle, and so I believe a serializer for the Filter type will 
also 
> > be needed. Let me work on this for a few minutes and assuming I can 
fix 
> > the scenario, I'll write back and have you try the nightly build 
(you'll 
> > still need to add SetResourceProperties to your WSDL).
> > 
> > Dan
> > 
> > 
> > 
> > dnguyen <[EMAIL PROTECTED]> wrote on 02/28/2007 04:39:00 PM:
> > 
> >> 
> >> I am trying to update the filter in the SubscriptionClient through 
the
> >> updateResourceProperty() method but not having any success.  I get 
the 
> > error
> >> below:
> >> 
> >> 
> >> ******************************
> >> org.apache.muse.ws.addressing.soap.SoapFault: [ID = 
> > 'ActionNotSupported']
> >> The re
> >> source at 'SubscriptionManager' does not expose an operation with the
> >> WS-Action
> >> 'http://docs.oasis-open.
> >> org/wsrf/rpw-2/SetResourceProperties/SetResourcePropertiesRequest'
> >> through any of its capabilities.
> >>         at
> >> 
> > 
org.apache.muse.core.AbstractResourceClient.invoke(AbstractResourceClient.java:279)
> >>         at
> >> 
> > 
org.apache.muse.core.AbstractResourceClient.invoke(AbstractResourceClient.java:235)
> >>         at
> >> org.apache.muse.ws.resource.remote.WsResourceClient.
> >> setResourceProperties(WsResourceClient.java:175)
> >>         at
> >> org.apache.muse.ws.resource.remote.WsResourceClient.
> >> updateResourceProperty(WsResourceClient.java:202)
> >>         at org.apache.muse.test.wsn.WsnTestClient2.main(Unknown 
Source)
> >> ************************************
> >> 
> >> 
> >> I then added this to the SubscriptionManager resource in the 
> > wsn-producer
> >> muse.xml file:
> >> 
> >> 
> >> *************************************
> >>         <capability>
> >> 
> >> 
> > 
<capability-uri>http://docs.oasis-open.org/wsrf/rpw-2/Get</capability-uri>
> >> 
> >> 
<java-capability-class>org.apache.muse.ws.resource.properties.get.impl.
> >> SimpleGetCapability</java-capability-class>
> >>         </capability>
> >> ************************************
> >> 
> >> 
> >> But I still get the same exception.  I looked in the source code for
> >> anything related to SetResourceProperties but didn't find anything 
> > helpful. 
> >> I read that the WS-N spec states that the impl can throw an exception 
in
> >> this case, but it also says this is allowed.  I am not sure if this 
is
> >> allowable in Muse, but the error message indicates it is possible by 
> > adding
> >> the correct capability.  Also, I am not sure I am doing this right. 
The
> >> example I am using is below
> >> 
> >> 
> >> *******************************
> >> package org.apache.muse.test.wsn;
> >> 
> >> import javax.xml.namespace.QName;
> >> 
> >> import java.net.InetAddress;
> >> import java.net.URI;
> >> import java.net.UnknownHostException;
> >> 
> >> import org.apache.muse.ws.addressing.EndpointReference;
> >> import 
> > org.apache.muse.ws.notification.remote.NotificationProducerClient;
> >> import org.apache.muse.ws.notification.remote.SubscriptionClient;
> >> import org.apache.muse.ws.notification.impl.*;
> >> import org.apache.muse.ws.notification.WsnConstants;
> >> import org.apache.muse.util.xml.*;
> >> 
> >> 
> >> public class WsnTestClient2
> >> {
> >>     public static URI getLocalAddress(String contextPath, int port)
> >>         throws UnknownHostException
> >>     {
> >>         String ip = InetAddress.getLocalHost().getHostAddress();
> >> 
> >>         StringBuffer address = new StringBuffer();
> >>         address.append("http://";);
> >>         address.append(ip);
> >>         address.append(':');
> >>         address.append(port);
> >> 
> >>         if (contextPath.charAt(0) != '/')
> >>             address.append('/');
> >> 
> >>         address.append(contextPath);
> >> 
> >>         return URI.create(address.toString());
> >>     }
> >> 
> >>     public static void main(String[] args)
> >>     {
> >>         try
> >>         {
> >>             //
> >>             // change these to point to different 
applications/servers
> >>             //
> >>             String webAppRoot = "/isr-producer/services";
> >>             int producer_port =
> >> Integer.parseInt(System.getProperty("producer_port","8080"));
> >>             int consumer_port =
> >> Integer.parseInt(System.getProperty("consumer_port","8080"));
> >> 
> >>             //
> >>             // create producer EPR/client, and use it to subscribe
> >>             // the consumer to all messages
> >>             //
> >> 
> >>             String contextPath = webAppRoot + "/IsrResource";
> >>             URI address = (args.length == 0) ? 
> > getLocalAddress(contextPath,
> >> producer_port) : URI.create(args[0] + contextPath);
> >>             EndpointReference epr = new EndpointReference(address);
> >> 
> >>             webAppRoot = "/isr-consumer/services";
> >>             contextPath = webAppRoot + "/IsrConsumer";
> >>             address = getLocalAddress(contextPath, consumer_port);
> >>             EndpointReference consumer = new 
EndpointReference(address);
> >> 
> >>             //
> >>             // null filter == send all messages to consumer
> >>             //
> >>             NotificationProducerClient producer = new
> >> NotificationProducerClient(epr);
> >>             producer.setTrace(true);
> >> 
> >>             SubscriptionClient subscription = null;
> >> 
> >>             while( true )
> >>             {
> >>                 System.out.println( "s - subscribe, u - unsubscribe, 
v -
> >> view, q - quit" );
> >> 
> >>                 char choice = (char)System.in.read();
> >> 
> >>                 if( choice == 's' )
> >>                 {
> >>                     subscription = producer.subscribe(consumer, null, 

> > null);
> >>                 }
> >>                 else if( choice == 'u' )
> >>                 {
> >>                     subscription.destroy();
> >>                 }
> >>                 else if( choice == 'v' )
> >>                 {
> >> 
> >> System.out.println(XmlUtils.toString(subscription.
> >> getResourceProperty(WsnConstants.FILTER_QNAME)[0]));
> >>                 }
> >>                 else if( choice == 'f' )
> >>                 {
> >>                     QName messageName = new
> >> QName("http://ws.apache.org/muse/test/wsrf";, "MyTopic", "tns");
> >> 
> >> subscription.updateResourceProperty(WsnConstants.FILTER_QNAME, new 
> > Object[]
> >> { new TopicFilter(messageName) });
> >>                 }
> >>                 else if( choice == 'q' )
> >>                 {
> >>                     break;
> >>                 }
> >>             }
> >>         }
> >> 
> >>         catch (Throwable error)
> >>         {
> >>             error.printStackTrace();
> >>         }
> >>     }
> >> }
> >> 
> >> -- 
> >> View this message in context: http://www.nabble.com/Problem-updating-
> >> subscription-resource-property.-tf3323382.html#a9239032
> >> Sent from the Muse User mailing list archive at Nabble.com.
> >> 
> >> 
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: [EMAIL PROTECTED]
> >> For additional commands, e-mail: [EMAIL PROTECTED]
> >> 
> > 
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > 
> > 
> > 
> 
> -- 
> View this message in context: http://www.nabble.com/Problem-updating-
> subscription-resource-property.-tf3323382.html#a9241004
> Sent from the Muse User mailing list archive at Nabble.com.
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to