// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= DevFaqLookupEventBus
:jbake-type: wiki
:jbake-tags: wiki, devfaq, needsreview
:jbake-status: published
:keywords: Apache NetBeans wiki DevFaqLookupEventBus
:description: Apache NetBeans wiki DevFaqLookupEventBus
:toc: left
:toc-title:
:syntax: true

== Using Event Bus in NetBeans

[source,java]
----

Dne Monday 26 November 2007 17:37:48 Rob Ratcliff napsal(a):
> For the bus we developed, we could subscribe by a specific type, for all
> subclasses of a type or for certain message header attributes of an
> event. We also had a bus per "session" (the GUI could display multiple
> sessions/workspaces using tabs -- equivalent to a JMS topic)  so that
> only events related to that session would be delivered. And, like I
> mentioned earlier, there was support to register as a "GUI" listener or
> a "business" listener so that events would automatically be delivered in
> the correct thread to avoid EDT lockup and rendering issues.
>
> I'd be interested in hearing what you and others think about these types
> of capabilities and how they compare to the NetBeans paradigms.
----

I've been thinking about this for a while and I believe that there is event 
bus like system in NetBeans. It is link:http://bits.netbeans.org/dev/javadoc/org-openide-util/org/openide/util/Utilities.html#actionsGlobalContext()[Utilities.actionsGlobalContext()]

We have our event bus and it is accessible via 
link:http://bits.netbeans.org/dev/javadoc/org-openide-util/org/openide/util/Utilities.html#actionsGlobalContext()[Utilities.actionsGlobalContext()]. Indeed it may not be perfect, but it plays 
exactly the role described in the presentation. Menu, Toolbar, etc. listen on 
it, while somebody else updates it.

Indeed, there could be some improvements. We do not support merging of events 
or network access, but if one really cares, there is a way to plug into the 
system. All one needs to do is to implement 
link:http://bits.netbeans.org/dev/javadoc/org-openide-util/org/openide/util/ContextGlobalProvider.html[ContextGlobalProvider]
One sample implelemention is in openide/windows and second in 
imagine.dev.java.net.

I've heard a complain that...

*> This is a central listener, not an event bus*

... however this boils down to a question: How do you envision an event bus? 
It is a place to contain events or objects that somehow appear in the system. 
It allows anyone to selectively listen on what is happening in link:https://spar.dev.java.net/source/browse/spar/trunk/code/plugins/spar/src/com/jasperpotts/spar/event/application/[the bus]

So in fact event bus is a central listener. Just like 
link:http://bits.netbeans.org/dev/javadoc/org-openide-util/org/openide/util/Utilities.html#actionsGlobalContext()[Utilities.actionsGlobalContext()].

Indeed it could be improved. Is there anyone who would like to contribute in 
improving our actionsGlobalContext? If so, what should be done?

[source,java]
----

Hi Jaroslav,

I think it'd be useful to define exactly what an event bus is (like you 
mentioned),  what use cases it supports and how NetBeans supports these 
use cases currently and how it might support these in the future.

I used an EventBus approach in my last project  for receiving 
asynchronous data events from the Network (such as position updates, 
network status events) and internal events such as service status 
(network disconnected) and other state change events such as "sensor 
network reconfigured"...essentially when it made more sense to use a hub 
and spoke communication model rather than a point-to-point.  There could 
be multiple instances of the EventBus, which used a  EDT type of model 
(dispatcher thread/queue) and supported subscriptions by type (any event 
derived from a base class)  or property of the header. 
----

Since the "Lookup Library" allows you to uncouple senders from 
receivers, and allows receivers to be notified of changes, I consider it 
as a small event bus.

I consider "local lookups" as a small event bus, where you can listen to 
different "event topics". In the previous case, it would probably be enough to dedicate on Lookup for the network events and create various types holding enough information about the events. The you could add/remove/change the content of the lookup and deliver events about such changes.

[source,java]
----

The instances 
could be looked up globally or injected into a given component. It 
supported "business" and "GUI"  subscriptions to automatically deliver 
the event in the correct thread. If I did it again,  I'm  thinking I'd 
use a JMS style API that supported a Hibernate style OQL subscription.
(I have some more details here: 
http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-3723&amp;yr=2007&amp;track=2)

The EventBus talk given at JavaOne 2006 had some great use case examples:
EventBus
https://eventbus.dev.java.net/HopOnTheEventBus-Web.ppt

These frameworks provide some other use cases and API examples:

D-Bus
http://www.freedesktop.org/wiki/Software/dbus
http://www.freedesktop.org/wiki/IntroductionToDBus

JUIPiter
 http://juipiter.sourceforge.net

Bradlee Johnson's ReflectionBus
 http://sourceforge.net/projects/werx/

Jasper-Potts - Why Spaghetti Is Not Tasty: Architecting Full-Scale 
Swing Apps, 2007 JavaOne Conference, TS-3316
http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-3316&amp;yr=2007&amp;track=2

(Also see the JMS API and the OMG COS Notification Service API.)

I don't have much time to spend a lot of time coding on the side right 
now, but I'd be happy to help define requirements and use cases if that 
would be useful to you.

Thanks!
Rob
----

=== Apache Migration Information

The content in this page was kindly donated by Oracle Corp. to the
Apache Software Foundation.

This page was exported from link:http://wiki.netbeans.org/DevFaqLookupEventBus[http://wiki.netbeans.org/DevFaqLookupEventBus] , 
that was last modified by NetBeans user Admin 
on 2009-11-06T15:51:59Z.


*NOTE:* This document was automatically converted to the AsciiDoc format on 2018-02-07, and needs to be reviewed.
