What is the InfoBus?

The InfoBus provides for dynamic exchange of data between Java components.

What is the function of the InfoBus?
What does the InfoBus do?
Overview of the InfoBus architecture
Elements of the InfoBus architecture
InfoBus FAQ
InfoBus Glossary

What is the function of the InfoBus?

The wide adoption of the Java programming language by the Internet community creates an opportunity for developers to create a new class of interactive Web applications. The language and environment, including the JavaBeans specification, provide mechanisms for the creation and management of small components whose functions represent the building blocks used in these Web applications. (The term "component" refers to both Java applets, available in JDK 1.0.2, and to JavaBeans, available in JDK 1.1.)

The JavaBeans specification additionally provides powerful mechanisms, such as events and bound properties for directly interconnecting components. The InfoBus, in turn, provides compatible extensions for dynamic data interchange required for the Web and other end-user applications.

What does the InfoBus do?

The InfoBus offers a solution to the problem of interconnecting components. InfoBus architecture is simple to use yet powerful enough to handle real work flow for multiple components on a Web page. The InfoBus defines a small number of interfaces between InfoBus compatible components, and specifies the protocol for interface use.

The InfoBus lets Web developers create a new class of dynamic applications in which data exchange is based on information content. For example, a single database access component can offer the InfoBus information from a wide variety of databases. The information on the InfoBus is dynamically tagged by its content (for example; employee name, sales region, available inventory, and so on). Data consumers, such as charting or reporting components, can receive data based on these dynamic tags. The InfoBus also provides mechanisms for transmitting highly structured data, such as keyed rows in a collection.

As a member of the InfoBus, any component can exchange information with any other component in a structured way. Simple items like strings and numbers and complex items like lists, arrays, and tables can all be passed over the InfoBus. For example, a component could provide a user interface that allows users to select an item, such as an account number, and publish the selected item on the InfoBus. In response, a second component, listening for the account number, could look up information from an external database and publish a table of results over the InfoBus. Finally, a third component, such as a spreadsheet, could access this results table and display it or use it for further analysis.





Overview of the InfoBus architecture

Developers build InfoBus applications by presenting a set of cooperating components in a design surface. This is typically an HTML document or Web page. The components communicate via the InfoBus thus making it possible to divide the application into manageable pieces. Just as Java interfaces are simple and clear contracts between a producer and a consumer, no complex negotiation is required.

InfoBus interfaces allow application designers to create "data flows" between cooperating components. In contrast to an event/response model where the semantics of an interaction depend upon understanding a applet-specific event and responding to that event with applet-specific callbacks, the InfoBus interfaces have very few events and an invariant set of method calls for all applets. The semantics of the data flow are based on interpreting the contents of the data that flows across the InfoBus interfaces as opposed to responding to names of parameters from events or names or parameters of callbacks.

Components that make up an InfoBus application can be classified in three types:


Note: An individual applet can simultaneously be both a data producer and a data consumer. Data flows between applets in named packets known as data items.

The InfoBus is similar to a hardware bus. Multiple consumers can receive and use data published by a producer, and a consumer can easily obtain data from multiple producers. In fact, a request for data can elicit multiple responses. Multiple conversations can occur simultaneously without requiring anything special from the participating components.

Elements of the InfoBus architecture

The InfoBus supports a stylized protocol for data exchange between InfoBus components consisting of the following major elements:


These interfaces give the data consumer choices about how to navigate through the data provided by producers. An example of an interface is the KeyedAccess interface, that represents a set of name/value pairs. KeyedAccess extends CollectionAccess. Where CollectionAccess provides a basic way to iterate over elements in a collection, KeyedAccess allows consumers to retrieve values by name. It also allows the consumer to obtain the list of names.

Producers choose the most appropriate access type and publish the data as an item of this type, while consumers may use the data as the type specified or as a supertype. For example, a spreadsheet component might publish a named range as an ArrayAccess data item. One consumer might process this data using ArrayAccess because that is the best match for its needs, while another consumer would choose the supertype CollectionAccess.


InfoBus FAQ

Q. JavaBeans has mechanisms like "bound properties" for data transfer between components. Why is the InfoBus necessary?
A. JavaBeans mechanisms, such as bound properties, are very useful in cases where the type of data to be communicated can be hard-coded into the source and target components. The InfoBus adds additional features required for more dynamic data interchange. These can be cases where communication is driven by the content of the data and where the nature of the data to be exchanged is determined at runtime.

Q. How does the InfoBus relate to JavaBeans?
A. The InfoBus specification (realized in eSuite applets) is complementary to and extends the JavaBeans specification by providing a set of enhanced interfaces that JavaBeans components can use to share and exchange dynamic data.

Q. Can both Java applets and JavaBeans use the InfoBus?
A. Yes.

Q. Is the InfoBus implemented in pure Java?
A. Yes. There is no native code in the InfoBus; the same implementation runs on all Java platforms.

Q. What is the relation between the InfoBus and IIOP (Internet Inter-Object-Request-Broker Protocol)?
A. While the InfoBus is primarily intended for communication among components in the same JVM (Java Virtual Machine), one can envision a component which supports IIOP, ICAP (Internet Calendar Access Protocol,) or HTTP (HyperText Transmission Protocol) across the wire to obtain data which it publishes on the InfoBus.
For example, a component which understands ICAP could obtain a personal calendar and a group calendar from a data repository and publish both items on the InfoBus.

Q. What is the relation between the InfoBus and RMI (Remote Method Invocation)?
A. The InfoBus architecture addresses applets talking to one another in a single JVM not across multiple JVMs; while RMI is intended for communication across JVMs (different Java Virtual Machines across the network). As for IIOP, one can envision an InfoBus component which uses RMI to talk to something on another JVM and then publishes the data on the InfoBus.
Additionally, RMI could be used to allow components in different security classes to communicate within the same JVM.

InfoBus Glossary

DataItem The basic unit of transfer. A dataitem can be - among other things - a number, string, an image, or an array.
DataProducer A component that acts as data-source. A DataProducer announces the availability of data, and responds to requests for data-items.
DataConsumer A component that requests and uses data. DataConsumers "listen" for availability - or revocation - of data-items, and then request the data. DataConsumers can also listen for data-changed events.
DataController A component that acts as an intermediary -- or "traffic cop" -- between producers and consumers. DataControllers represent an advanced InfoBus feature.