|
View:
New views
3 Messages
—
Rating Filter:
Alert me
|
|
|
Send NotificationEvent from additional Axis2 WSHello,
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) |
|
|
SV: Send NotificationEvent from additional Axis2 WSThe 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@... |
|
|
Re: SV: Send NotificationEvent from additional Axis2 WSThanks a lot! I owe you one. Now I understand how things work out in muse..i even consider writing a tutorial about this - since there doesnt seem to be too many out there.
Makla
|
| Free embeddable forum powered by Nabble | Forum Help |