|
|
Line 1: |
Line 1: |
− | ==Introduction==
| + | sdsdfsdf |
− | | + | |
− | OSGi declares an EventAdmin service that is responsible for distributing events to listeners registered via the (org.osgi.service.event.EventHandler). It's possible to create distributed implementations of such services using JMS and/or other messaging frameworks for distributing messages to other OSGi frameworks.
| + | |
− | | + | |
− | [[Image:Distributedeventadmin.png]]
| + | |
− | | + | |
− | ECF's provider architecture allows the creation of a distributed EventAdmin implementation that can use a variety of wire protocols. For example, ActiveMQ/JMS 5.2 as above, or ECF generic, XMPP, JavaGroups, commercial/proprietary messaging buses, or any others that can implement the ECF Shared Object API.
| + | |
− | | + | |
− | ==Getting the Distributed EventAdmin Service==
| + | |
− | | + | |
− | First, install ECF 3.0. [http://www.eclipse.org/ecf/downloads.php Here is the download page].
| + | |
− | | + | |
− | Then get the two projects that implement the event admin example. [[Media:Example1.eventadmin.psf | This is a project set file]]. Save the project set file to your local disk and then import to get into your Eclipse workspace. For anonymous CVS access:
| + | |
− | | + | |
− | host: '''dev.eclipse.org'''
| + | |
− | | + | |
− | path: '''/cvsroot/rt'''
| + | |
− | | + | |
− | module: '''org.eclipse.ecf/server-side/bundles''', project: '''org.eclipse.ecf.remoteservice.eventadmin'''
| + | |
− | | + | |
− | module: '''org.eclipse.ecf/examples/bundles''', project: '''org.eclipse.ecf.examples.eventadmin.app'''
| + | |
− | | + | |
− | ==Running an Example Server and Clients==
| + | |
− | | + | |
− | Once these two projects are in your workspace, you can run the ECF generic based server and client by opening the product editor for the following product files:
| + | |
− | | + | |
− | '''org.eclipse.ecf.examples.eventadmin.app/EventAdmin Generic Server.product'''
| + | |
− | | + | |
− | '''org.eclipse.ecf.examples.eventadmin.app/EventAdmin Generic Client.product'''
| + | |
− | | + | |
− | [[Image:Productlaunch.png]]
| + | |
− | | + | |
− | | + | |
− | To run, click on 'Launch an Eclipse application' at the lower left.
| + | |
− | | + | |
− | If you run the EventAdmin Generic Server.product, you should get output to the console every few seconds like this:
| + | |
− | | + | |
− | <pre>
| + | |
− | handleEvent
| + | |
− | topic=defaultTopic
| + | |
− | message=message #0
| + | |
− | sender=ecftcp://localhost:3787/server
| + | |
− | handleEvent
| + | |
− | topic=defaultTopic
| + | |
− | message=message #1
| + | |
− | sender=ecftcp://localhost:3787/server
| + | |
− | ...
| + | |
− | </pre>
| + | |
− | | + | |
− | This indicates that the EventAdmin service is being accessed to send test messages every 2 seconds. Here's the code (in '''org.eclipse.ecf.examples.internal.eventadmin.app.TestSender''' class) that is making the EventAdmin.postEvent call:
| + | |
− | | + | |
− | <source lang="java">
| + | |
− | Map msgProps = new Properties();
| + | |
− | msgProps.put("message", "message #"
| + | |
− | + messageCounter++);
| + | |
− | msgProps.put("sender", sender);
| + | |
− | eventAdmin.postEvent(new Event(topic, msgProps));
| + | |
− | </source>
| + | |
− | | + | |
− | What this does is create an Event instance with values for a couple of properties (i.e. "message", and "sender"), and then call eventAdmin.postEvent(Event) to have the eventAdmin implementation deliver the message to EventHandlers.
| + | |
− | | + | |
− | The test event handler implementation is this (in '''org.eclipse.ecf.examples.internal.eventadmin.app.TestEventHandler''' class):
| + | |
− | | + | |
− | <source lang="java">
| + | |
− | public class TestEventHandler implements EventHandler {
| + | |
− | | + | |
− | public void handleEvent(Event event) {
| + | |
− | System.out.println("handleEvent\n\ttopic=" + event.getTopic()
| + | |
− | + "\n\tmessage=" + event.getProperty("message") + "\n\tsender="
| + | |
− | + event.getProperty("sender"));
| + | |
− | }
| + | |
− | | + | |
− | }
| + | |
− | </source>
| + | |
− | | + | |
− | The TestEventHandler class is registered as an instance of EventHandler upon application startup (in '''org.eclipse.ecf.examples.internal.eventadmin.app.EventAdminManagerApplication''')
| + | |
− | | + | |
− | <source lang="java">
| + | |
− | Dictionary dictionary = new Hashtable();
| + | |
− | dictionary.put(EventConstants.EVENT_TOPIC,"*"); // Needed, otherwise you don't see any events at all
| + | |
− | testEventHandlerRegistration = bundleContext.registerService(
| + | |
− | EventHandler.class.getName(), new TestEventHandler(), dictionary);
| + | |
− | </source>
| + | |
− | | + | |
− | If a EventAdmin Generic Server.product and 1 or more EventAdmin Generic Client.products are started then both the clients and the server will act as both message senders and EventHandlers (receivers), and the output will appear something like this
| + | |
− | | + | |
− | <pre>
| + | |
− | handleEvent
| + | |
− | topic=defaultTopic
| + | |
− | message=message #3
| + | |
− | sender=ecftcp://localhost:3787/server
| + | |
− | handleEvent
| + | |
− | topic=defaultTopic
| + | |
− | message=message #0
| + | |
− | sender=9POAn/uwLgZyU5krxfjDhhhAuMU=
| + | |
− | handleEvent
| + | |
− | topic=defaultTopic
| + | |
− | message=message #4
| + | |
− | sender=ecftcp://localhost:3787/server
| + | |
− | handleEvent
| + | |
− | topic=defaultTopic
| + | |
− | message=message #1
| + | |
− | sender=9POAn/uwLgZyU5krxfjDhhhAuMU=
| + | |
− | ...
| + | |
− | </pre>
| + | |
− | | + | |
− | You can see that the 'sender' is different for the server (i.e. ecftcp://localhost:3787/server) than for the client(s) (i.e. 9POAn/uwLgZyU5krxfjDhhhAuMU=). This indicates that both the server and the client are sending messages, and receiving them (delivered to the EventHandler's that have been registered).
| + | |
− | | + | |
− | See the following two classes for info on how the test server and client are structured
| + | |
− | | + | |
− | '''org.eclipse.ecf.examples.internal.eventadmin.app.EventAdminManagerApplication'''
| + | |
− | '''org.eclipse.ecf.examples.internal.eventadmin.app.EventAdminClientApplication'''
| + | |
− | | + | |
− | ==Related Documentation==
| + | |
− | | + | |
− | [[Distributed OSGi Services with ECF]]
| + | |
− | | + | |
− | [[Getting Started with ECF's RFC119 Implementation]]
| + | |
− | | + | |
− | [[Getting Started with Using the ECF Remote Services API]]
| + | |
− | | + | |
− | [[ECF API Docs]]
| + | |
− | | + | |
− | [http://www.eclipse.org/ecf/org.eclipse.ecf.docs/api/ API Javadocs]
| + | |
− | | + | |
− | | + | |
− | {{ECF}}
| + | |
− | [[Category:Eclipse Communication Framework]]
| + | |
− | [[Category:EclipseRT]]
| + | |
− | [[Category:Draft Documentation]]
| + | |