The ErraiBus framework provides a standardized mechanism using asyncronous messaging (AJAX) within GWT applications.

This package contains all of the necessary APIs to use the framework.

ErraiBus uses the CommandMessage/ConversationMessage paradigm for all communication across the bus. The programming model is essentially PubSub (publish/subscribe) at it's core. But one of the distinct aspects of ErraiBus is that the model is consistent on both the server and the client.

An Example Server-side Service:

``

        @Service
        public class HelloWorld implements MessageCallback {
            public void callback(CommandMessage message) {
                System.out.println("Hello, World!");
            }
        }

The above example service shows a very simple server-side service. The `@Service` annotation is used by the framework for auto-discovery of the service. By default, unless otherwise specified, the service will take on the name of the class it is annotating, in this case: `HelloWorld`.

Example client-side code, demonstrating use of HelloWorld service:

``

        public class HelloWorld implements EntryPoint {
            /**
             * Get an instance of the MessageBus
             */
            private MessageBus bus = ErraiBus.get();

            public void onModuleLoad() {
                Button clickMe = new Button("Click Me!");

                /**
                 * Register a click handler for the button.
                 */
                clickMe.addClickHandler(new ClickHandler() {
                    public void onClick(ClickEvent event) {
                        /**
                         * Send a message to the 'HelloWorld' service.
                         */
                        CommandMessage.create()
                                .toSubject("HelloWorld")
                                .sendNowWith(bus);
                   }
                });

                /**
                 * Just add the button to the RootPanel in the DOM.
                 */
                RootPanel.get().add(clickMe);
            }
        }