220 likes | 394 Views
OpenJMS. An Open Source Implementation of the JMS Specification. Jim Alateras Intalio Inc. Contents. JMS Specification History of OpenJMS Existing Architecture Work In Progress Deployment Development Environment Current Release Future Direction Q & A. JMS Specifications.
E N D
OpenJMS An Open Source Implementation of the JMS Specification Jim Alateras Intalio Inc.
Contents JMS Specification History of OpenJMS Existing Architecture Work In Progress Deployment Development Environment Current Release Future Direction Q & A
JMS Specifications Two Messaging Models - Queues and Topics Persistent and Non-Persistent Message Delivery Five Message Types - Text, Byte, Object, Map and Stream Synchronous and Asynchronous message consumption Selectors, priority, QueueBrowser Local and distributed transactions
JMS Specifications - Queues Sender publishers to the Queue and Receiver consumers Supports multiple senders/receivers per queue Message Ordering Undefined Delivery semantics for > 1receiver Non-persistent messages delivered at most once Persistent messages delivered exactly once
JMS Specifications - Topics Publisher publishes and Subscribers consumes Multiple publishers/subscribers per topic Subscriber each receives own copy of messages Priority effects message delivery order Persistent and non-persistent delivery semantics
JMS Providers JMS Providers distribute JMS compliant components/products 21 vendors have a JMS offering Four Open Source offerings including OpenJMS, ObjectCube, Joram and spyderMQ A number of commercial products including MQSeries, FioranoMQ and SonicMQ No compliance test suite available to compare the various offerings No industry benchmarks to compare performance
History of OpenJMS Sponsored by the Exolab Group (OpenOrb, OpenEJB) Started in Feb-2000 3 core developers based in Melbourne V0.1 released in May-2000 (pub-sub, p2p, non-persistent, rmi) V0.2 released in Jun-2000 (jdbc-based persistence, gui, application, testharness) V0.3 released in Aug-2000 (tcp, temporary destinations, database caching, selectors) V0.4 released in Oct-2000 (bug fixes, initial queue browser, more client test coverage) V0.5 released in Dec-2000 (wild card sub, queue browser and flow control)
OpenJMS Architecture Service based adaptive architecture Initial focus was on time-to-market and features (RMI and JDBM) Subsequently released more widely used adaptors (TCP, JDBC) Failed to initially architect for availability and scalability Second iteration is focusing on failover, clustering and load balancing In the end the architecture was quite tolerable to change.
OpenJMS Configuration XML based configuration file generated from Castor tool Server configuration <element name="ServerConfiguration"> <complexType content="empty" > <attribute name="serverClass" type="string" maxOccurs="1"/> <attribute name="clusterName" type="string" minOccurs="0" maxOccurs="1" /> <attribute name="jmsServerName" type="string" maxOccurs="1"/> <attribute name="jmsAdminServerName" type="string" maxOccurs="1"/> </complexType> </element <PersistenceAdapterConfiguration minConsumerListSize="10000" minMessageListSize="40000" persistentType="RDBMS" driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:oci8:@test" userName="jim" password="ab1234" retries="5" timeout ="2000" /> Administered Destinations Participants and Authentication Persistent adaptors
JNDI Integration Client uses JNDI to lookup factories and destinations Run an embedded JNDI provider Connect to an external JNDI provider Automatic object registration at start-up
Administration GUI Initial Administration GUI deployed with v0.2 New Administration GUI available in v0.6 Create administered destinations Register durable subscribers Start and stop the server Purge persistent messages for a destination
Stateless Connections (WIP) Original server maintained stateful client information Compicates failover and dynamic load balancing New architecture moves to stateless Client information is now part of the request context Facilitates failover since client is not tied to a particular server Facilitates dynamic load balancing
OpenJMS Clustering (WIP) OpenJMS will support clustering Servers in the cluster share the same resources Multicast channel for inter server comms Client uses multicast channel for connection Client failover confined to the cluster Clients load balanced within the cluster You can configure multiple independent clusters
Security (WIP) Security is not specified by the JMS Specifications OpenJMS uses JAAS for Authorization and Authentication Authentication is based on participants Participants are associated with an authentication data source Authorization is fine grained and based on destinations, participants and actions Supported actions are publish, consumer, browse and administer. Security can be turned off
Deployment Standalone Server Configuration Symmetric Federated Configuration Asymmetric Federated Configuration Cluster Configuration
Development Environment Jakarta ANT as the project build tool JTF (but will move to Junit for unit testing) OpenExec for load and performance tests Bugzilla for bug management Castor’s SourceGen for configuration ANTLR for selectors A host of open source libraries including log4j and Tyrex
Current Release Publish-Subscribe and Point-to-Point Persistent and Non-Persistent Message Delivery Message Selectors, Priority and QueueBrowser Synchronous and asynchronous message consumption Administration GUI Stand alone or embeddable server Local transactions Test cases and extensive examples
Future Direction Refactored messaging core New administration GUI IIOP and SSL support Clustering and federation support Explicit support for XML messaging Improved performance of the messaging core Complete ASF support which includes session pools and XA.
Resources OpenJMS http://openjms.exolab.org JMS Specifications http://java.sun.com/products/jms Castor, Tyrex http://www.exolab.org ANTLR http://www.antlr.org Jakarta ANT and Log4j http://jakarta.apache.org JUnit http://www.junit.org Open Source Initiative http://www.opensource.org