« Return to Thread: Send NotificationEvent from additional Axis2 WS

SV: Send NotificationEvent from additional Axis2 WS

by Lenni Madsen :: Rate this Message:

Reply to Author | View in Thread

The sample is just a sample that for the sake of the sample continues to
produce messages at a given interval. In short it's a proof of concept that
the messages can be sent and received.

Now if we want to do something a bit more advanced to for example to have a
central NotificationProducer that all the other WSRF compliant services can
call, this might be a way:

package org.extended.test;

import javax.xml.namespace.QName;

import org.apache.muse.core.Resource;
import org.apache.muse.core.ResourceManager;
import org.apache.muse.util.xml.XmlUtils;
import org.apache.muse.ws.addressing.EndpointReference;
import org.apache.muse.ws.addressing.soap.SoapFault;
import org.apache.muse.ws.dm.muws.events.Component;
import org.apache.muse.ws.dm.muws.events.ComponentAddress;
import org.apache.muse.ws.dm.muws.events.ManagementEvent;
import org.apache.muse.ws.dm.muws.events.Situation;
import org.apache.muse.ws.dm.muws.events.WefConstants;
import org.apache.muse.ws.dm.muws.events.WefFactory;
import org.apache.muse.ws.dm.muws.events.impl.SimpleWefFactory;
import org.apache.muse.ws.dm.muws.impl.AbstractManageabilityCapability;
import org.apache.muse.ws.notification.NotificationProducer;
import org.apache.muse.ws.notification.WsnConstants;
import org.w3c.dom.Element;

public class MyCapability extends AbstractManageabilityCapability implements
IMyCapability
{
       
        private static final QName _TOPIC_NAME = new QName(NAMESPACE_URI,
"RuntimeEvent", PREFIX);
        private WefFactory factory;
        private ManagementEvent event;
        private NotificationProducer runtimeNotification;
       
    /**
         * Only internal objects are guaranteed to be instantiated, do not
depend on objects/Capabilities outside this Capability
         */
        public void initialize() throws SoapFault {
                super.initialize();
                Element[] elements =
getResource().getEndpointReference().getParameters();
                System.out.println("Element Length: "+elements.length);
                for(int i = 0; i < elements.length; i++){
                        System.out.println("Override initialization() for
"+elements[i].getFirstChild().getNodeValue());
                }
                _ServerName = "Extended";
        }
        /**
         * External capabilities are instantiated and can be used
         */
        public void initializeCompleted() throws SoapFault {
                super.initializeCompleted();
                Element[] elements =
getResource().getEndpointReference().getParameters();
                for(int i = 0; i < elements.length; i++){
                        System.out.println("Override
initializationCompleted() for "+elements[i].getFirstChild().getNodeValue());
                }
                runtimeNotification =
(NotificationProducer)getResource().getCapability(WsnConstants.PRODUCER_URI)
;
                // add list of Topics if needed
                runtimeNotification.addTopic(_TOPIC_NAME);
        }
        /**
         * External capabilities are instantiated and can be used (last
chance)
         */
        public void prepareShutdown() throws SoapFault{
                super.prepareShutdown();
                Element[] elements =
getResource().getEndpointReference().getParameters();
                for(int i = 0; i < elements.length; i++){
                        System.out.println("Override prepareShutdown() for
"+elements[i].getFirstChild().getNodeValue());
                }
        }
        /**
         * Only internal objects are guarentied to be instantiated, do not
depend on objects/Capabilities outside this Capability
         */
        public void shutdown() throws SoapFault{
                super.shutdown();
                Element[] elements =
getResource().getEndpointReference().getParameters();
                for(int i = 0; i < elements.length; i++){
                        System.out.println("Override shutown() for
"+elements[i].getFirstChild().getNodeValue());
                }
        }
       
     private String[] _TestProperty;

     public String[] getTestProperty()
     {
         return _TestProperty;
     }

     public void setTestProperty(String[] param0)
     {
         _TestProperty = param0;
     }
   
        public Element runtimeEventOperation(){
// WefFactory();
                Element toPublish = MemoryFree();
                try{
                        getLog().info("Sending message to consumers...");
                       
                        runtimeNotification.publish(_PDP_TOPIC_NAME,
toPublish);
// runtimeNotification.publish(_PDP_TOPIC_NAME, event);
                }catch (Throwable error){
                        error.printStackTrace();
                }
//     return event.toXML();
                return toPublish;
    }
   
        private Element MemoryFree(){
                Element ExtendedElement = XmlUtils.createElement(
                                new QName(
                                                "someURI",
                                                "SomeName",
                                                "Some"
                                                ),
                                        30.56
                                );
                return ExtendedElement;
        }
       
private void WefFactory(){
   
    factory = new SimpleWefFactory();
    event = factory.createEvent();
   
    Component reporter = factory.createComponent();
    ComponentAddress reporterAddress =
factory.createComponentAddress(getResource().getEndpointReference().toXML())
;
    reporter.setAddress(reporterAddress);
    reporter.setName(WefConstants.REPORTER_COMP_QNAME);
    System.out.println("reporterAddress:
"+XmlUtils.toString(getResource().getEndpointReference().toXML()));
    Component source = factory.createComponent();
    ComponentAddress sourceAddress =
factory.createComponentAddress(getResource().getEndpointReference().toXML())
;
    source.setAddress(sourceAddress);
    source.setName(WefConstants.SOURCE_COMP_QNAME);
    System.out.println("sourceAddress:
"+XmlUtils.toString(getResource().getEndpointReference().toXML()));
   
    Situation situation = factory.createSituation();
 
situation.setCategoryType(WefConstants.AVAILABILITY_SITUATION_QNAME);
    situation.setPriority(Situation.HIGH_PRIORITY);
    situation.setSeverity(Situation.UNKNOWN_SEVERITY);
    situation.setMessage("Something important has happened in the
"+getServerName()+"!");
    event.setReporter(reporter);
    event.setSource(source);
    event.setSituation(situation);
    event.addExtendedElement(
    new QName("SomeURI",
    "SomeName", "tns"), 30.56);
//     event.addExtendedElement(Element xml);
    }
     
    private static final QName[] _PROPERTIES = new QName[]
    {
        new QName(NAMESPACE_URI, "ServerName", PREFIX),
        new QName(NAMESPACE_URI, "MessageInterval", PREFIX),
        new QName(NAMESPACE_URI, "TestProperty", PREFIX)
    };

    public QName[] getPropertyNames()
    {
        return _PROPERTIES;
    }
   
    private String _ServerName = "WsExtended";
    private int _MessageInterval = 0;

    public String getServerName()
    {
        return _ServerName;
    }

    public void setServerName(String param0)
    {
        _ServerName = param0;
    }

    public int getMessageInterval()
    {
        return _MessageInterval;
    }

    public void setMessageInterval(int param0)
    {
        _MessageInterval = param0;
    }
   
}

Please note the code is not complete as it's sampled from a work in
progress, though it does contain a working NotificationProducer that allows
for other WSRF services to use it.

I didn't add the needed WSDL-file as I assumed you knew how to generate
those and declare any needed public available functions (in this case
runtimeEventOperation ).

/Lenni

"Cake is not a dual-use food stuff"
-----Oprindelig meddelelse-----
Fra: Makla [mailto:dennisfr1986@...]
Sendt: 29. oktober 2008 12:04
Til: muse-user@...
Emne: Send NotificationEvent from additional Axis2 WS


Hello,

i have the following situation. A J2me client shall be able to notify a
NotificationProducerWS with certain events.
The NotificationProducer then publishes the event to all subscribed
listeners.
In the WSN Consumer/Producer sample, there is only a producer publishing
events every 10secs to its subscribers, no matter whether anything has
happened or not.
But I want a second (non-emuse) WS sending an event (incl. some data as for
instance a float value) to the producing notification WS. The producer then
pushes the notification message to the listeners.The
subscription/publication is no problem.
I was considering adding a method in the WSN-Producer implementation
(MyCapabilityImpl) that hands over the data and sets a flag for publication.
But how may i do this? and how may i access the Muse WS from outside and
invoke a method in it?

any help is much appreciated (urgent)
--
View this message in context:
http://www.nabble.com/Send-NotificationEvent-from-additional-Axis2-WS-tp2022
4782p20224782.html
Sent from the Muse User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: muse-user-unsubscribe@...
For additional commands, e-mail: muse-user-help@...



---------------------------------------------------------------------
To unsubscribe, e-mail: muse-user-unsubscribe@...
For additional commands, e-mail: muse-user-help@...

 « Return to Thread: Send NotificationEvent from additional Axis2 WS