The Web 2.0 Binding
Fabric3 supports exposing channels over websockets and long-pooling using binding.web. This enables clients such as browsers to send and receive SCA events in a variety of formats, including JSON and XSM. The web binding is built on the Atmosphere library (http://atmosphere.java.net/).
The following shows how to expose a channel over websockets or long-pooling using the web binding:
<composite xmlns:f3="urn:fabric3.org"...> <channel name="ChatChannel"> <f3:binding.web/> </channel> <component name="ChatListener"> <implementation.java class="org.fabric3.samples.chat.ChatListener"/> <consumer name="chatChannel" source="ChatChannel"/> </component> </composite>
The above will expose the chat channel at http://<runtime ip>:<port>/channels/ChatChannel. When a client such as a browser connects to the endpoint, the connection will automatically be upgraded to websockets or use long-pooling depending on the client's capabilities.
Channels endpoints configured with the web binding are available over HTTP (or HTTPS if the runtime has it enabled) under the /channels path.
Connecting a consumer to the channel is done using the standard SCA eventing programming model:
@Scope("COMPOSITE") public class ChatListener { @Consumer("chatChannel") public void onMessage(Message message) { System.out.println(message.getName() + ": " + message.getMessage()); } }
When deployed in a cluster, events sent from browser clients to a channel will be replicated by default to all channel instances in a zone. To disable replication, set the @replicate attribute to false:
<channel name="MyChannel"> <f3:binding.web replicate="false"/> </channel>
The Fabric3 Samples distribution contains examples of using websockets.