MOM - xmlBlaster

MOM을 Java로 구현한 xmlBlaster가 감동을 주는군요. http://xmlblaster.org에서 필요한 자료만 추려 보았습니다. 성격이 급하신 분들은 Cool demosReplication Demo를 먼저 보시는 것도 좋은 접근이 되겠군요. XMLParser로 Xerces를 사용하기 때문에, C++ Client를 빌드하기 위해서는 xerces-c-src_2_7_0.tar.gz가 필요합니다.

XmlBlaster is MOM (Message oriented Middleware) with a lot of features.

XmlBlaster is a publish/subscribe and point to point 100% Java based MOM server (message-oriented middleware) which exchanges messages between publishers and subscribers. The message is described with XML-encoded meta information. Messages may contain everything, GIF images, Java objects, Python scripts, XML data, a word document, plain text - just anything.

Communication with the server is based on socket, CORBA (using JacORB), RMI, XmlRpc, HTTP or email, clients are free to choose their preferred protocol. Other protocols like SOAP may be plugged in.

Subscribers can use XPath expressions to filter the messages they wish to receive.

This is the publish/subscribe middleware server you have needed many times before, now available for free to glue together your distributed client/server application.

The xmlBlaster server is pure Java and under LGPL.
PHP, Perl, Python, C, C++, C#, Visual Basic.net, Flash, J2ME, Java (applications, servlets, applets) client samples are delivered in the xmlBlaster distribution.

You should be ready to go with your preferred development language.

XmlBlaster provides a browser callback framework, allowing browsers (Mozilla, MSIE, Netscape) to receive instant callbacks over a persistent http connection.

Features:

  • Free for private,commercial,education use (LGPL - License)
  • Message Orientated Middleware (MOM) with Publish/Subscribe and PointToPoint (PtP) support
  • Multi platform support (server is pure Java)
  • Multi protocol support (CORBA, RMI, XmlRpc, raw socket, EMAIL, native access)
  • Language neutral (clients for C++/C, Java, Python, PHP, Javascript, Perl, C#, Visual Basic.net ...)
  • Client side persistent queuing with C/C++/Java/ActiveX/Javascript
  • Extensible (XML based QoS)
  • Queryable Topics (Topic access with XPath)
  • Mime based full text search (currently plugins for regular expressions and XPath)
  • JMS conforming SQL key/value query support (SQL92)
  • Security system independend (currently plugins for LDAP and crypt-passwd), supports authentication, authorization and message interceptors
  • Persistence plugin architecture (currently plugins for Oracle, MS-SQLServer, Postgres, Firebird and others)

Wow! Tell me more!

Every Dad (Distributed application developer) needs a Mom (Message oriented middleware). Architecture
http://www.xmlblaster.org/architecture.jpg
Plugin overview

When a publisher sends a message toxmlBlaster it passes several plugins until it is rejected by a pluginor savely stored in the server.

When a subscriber subscribes on atopic, the message is passed with a callback to the subscriber,traversing several plugins before it is delivered.

The grafic below gives you an overviewof such a message flow. Please click on the plugin symbol to get moreinformation about the plugin and how to code and register a specificplugin yourself.

The grey plugins are mandatory, youneed to registered a plugin, otherwise a default plugin is chosen.

The green plugins are optional, theyare registered on startup. The mime plugins are activated dependingon the message mime type, the dispatch plugin is activated on demandby a client on login.

The brown plugins allow to control theclustering behavior, they are mandatory if clustering is switched on.

Administrative pluginsLogging pluginCluster supportDispatcher pluginCallback queue pluginMIME access filter pluginQueue/MsgStore pluginPublish pluginSecurity (authentication/authorization) pluginSecurity pluginProtocol pluginSecurity pluginProtocol plugin


Administrative pluginsLogging pluginCluster supportDispatcher pluginCallback queue pluginMIME access filter pluginQueue/MsgStore pluginPublish pluginSecurity (authentication/authorization) pluginSecurity pluginProtocol pluginSecurity pluginProtocol plugin
Fig:Message flow in the server (click on plugins for detailedinformation)


Client features

The following table shows on the columns different implementationlanguages for the clients and on the rows the different features aredisplayed. If a certain feature is already implemented, a green tickis written into the corresponding cell. In case the feature is notimplemented yet (or if the language does not allow this kind offeature) a red cross is drawn. For features under implementation agreen arrow is drawn.

Feature

Java

C++

C

Javascript
(Rhino)

Perl

Python

PHP

C#

Visual Basic
.net

Flash

protocol.corba



/

/



/


/

/

none

protocol.socket

/

/

/





/

/

none

protocol.xmlrpc

/


/



/


/

/

yes

protocol.rmi

/







/

/

none

client.browser.xmlrpc


/






/

/

none

failsafe reconnect

/







/

/

none

invocation recorder

/







/

/

none

callback update

/


/




yes

/

/

none

client cache

/



/

/

/

/

/

/

none

burst mode

/







/

/

none

protocol abstraction

/







/

/

none

synchroneous get

/


/





/

/

yes

publish/subscribe

/


/





/

/

yes

PtP / PtX

/


/





/

/

yes

client persistent queue

/



*

/

/

/

/

/

/

none

Performance

Message throughput per second

Publishing ten thousand small messages to xmlBlaster, which updates the messages to one subscribed client. The published and updated messages are acknowledged:

672 messages per second

on a AMD-K7 600 MHz, both client and server on the same machine running Linux 2.4.4 using JRockit 3.1 JVM with JacORB 1.3.30 CORBA lib.

The java virtual machine options are set to -Xms18M -Xmx32M:
   java -server -Xms18M -Xmx32M org.xmlBlaster.Main
   java -Xms18M -Xmx32M org.xmlBlaster.test.stress.LoadTestSub

The socket connections eat up most of the cpuload, thereafter XML parsing is expensive. The xmlBlaster code itself only consumes little of the processing time.

Green threads and native threads have more or less the same performance.

For other java virtual machines see the Volano Report.

When running the above test with different protocols, JacORB seems to beat the others:

Protocol Performance Comparison
Fig: Performance comparison of different protocols used in xmlBlaster, message throughput in percent to the winner.


Current state
Client
Pushing client callbacks on the same socket connection, allows to tunnel firewalls more ....
Client
more ...
Application

e.g. Application Logic

E-Mail
CORBA
RMI
HTTP
XmlRpc
SOCKET
SOAP
Native

Engine
Query
(XQL, SQL not scheduled)
Message Unit
  • Key
  • Content
  • QoS
Persistence (database)
Transaction
  • JINI Transactions
  • XA
  • OTS (Corba Transactions Service)
Cluster
  • Load balancing
  • Failover
  • Logical separation
Read requirement
MIME based plugins
QoS features
Authentication
  • Login
  • Logout
  • Certificate
See org.xmlBlaster.authentication.plugins
Authorization
  • ACL
See org.xmlBlaster.authentication.plugins
Remote Administration

XmlBlaster allows remote administration over a plugin framework.
Current plugins cover:
  1. JMX access
  2. telnet access
  3. An SNMP view on states and messages
  4. Message based remote administration

Mapping
RDBMS
Password plugin
LDAP plugin

 
Download
Full SVN snapshot: all sources, docs, libraries (big).

If you develop with xmlBlaster, checkout from subversion. This is the most current snapshot and usually as stable as the official releases.


http://www.xmlBlaster.org/xmlBlaster_REL_1_2.tgz 27 MB (26782285 Bytes)

http://www.xmlBlaster.org/xmlBlaster_REL_1_2.tar.bz2 26 MB (26003984 Bytes)

http://www.xmlBlaster.org/xmlBlaster_REL_1_2.zip 28 MB (28169871 Bytes)


Posted by BlogZin

Response
,