FEATURES
--------
o Subscribe can have a timeout

o Erase variant which respects existing subscriptions

o Client request can inhibit the session refresh

o Security demo with Bit Cypher: http://www.alphaworks.ibm.com/tech/abc?open

o Change to Sun coding convention: http://checkstyle.sourceforge.net/

o Handle QueueProperty.java similar to CbQueueProperty.java in ConnectQos.java

o XmlBlaster internal statistic overview with http://www.object-refinery.com/jfreechart/

o SMS protocol driver with http://www.imail.gr/jsmsengine/index.php

o Transaction support, based on:
    Java(tm) Transaction Service (JTS) 1.0 Specification.
    JTS specifies the implementation of a Transaction Manager which
    supports the Java(tm) Transaction API (JTA) 1.0 Specification.
    http://java.sun.com/products/jts/

o Embeed RDBMS http://axion.tigris.org/features.html

o SOAP support
  RMI-SOAP gateway: http://www.sys-con.com/java/articleprint.cfm?id=1479
  Or embeed SOAP: http://www.soapanywhere.org/saw/index.jsp
     (uses mixture of LGPL and APACHE)
   http://www.w3.org/TR/SOAP/
   http://www.soap-wrc.com
   http://www.alphaWorks.ibm.com/tech/soap4j
   http://msdn.microsoft.com/xml/general/toolkit_intro.asp
   http://msdn.microsoft.com/msdnmag/issues/0300/soap/soap.asp (tutorial)
   http://windows.oreilly.com/news/soapreview_0600.html (IBM versus M$ comparison)

o Use http://xdoclet.sourceforge.net/ for our xmlBlaster.war (web archive)

o Use xdoc http://jakarta.apache.org/site/jakarta-site2.htm for homepage

o xmlBlaster mirroring / object persistence with object persistence
  - http://www.prevayler.org/wiki.jsp?topic=StartingPoints

o Embed BeanShell or Javascript scripting

o Journaled Communication (History)
  For auditing/logging and play back of events (error recovery).

o Allowing compound messages

o Choosing the port for the server/callback server (e.g. XmlRpc):
  Java has a feature whereby you can specify Port 0 when opening a
  ServerSocket which results in opening the Socket on "any available
  port".  This can be very convenient when the port does not need to be
  predefined.

o JMX integration

o Client should be able to query which subscriptions he has


JDBC persistence
----------------

o I_Entry.isStored() should be removed
  Used by CacheQueueInterceptorPlugin.java only.

o peek() only reads RAM queue, but with history queue we like
  to browse swapped messages as well

o If reference queues are RAM based and MsgUnitStore is
  JDBC based and persistent message are processed:
  After a server crash the reference counter is outdated

o unsecure login -> verify if no security whole is possible

o CacheQueueInterceptorPlugin.java:469
  - transient.put is not necessary for transient size == 0
  - take() with exceeding (if condition) is wrong

o XMlBlasterAccess.leaveServer() should do a
  dispatchManager.shutdown

o queue/history/maxEntriesCache=1 can't be reconfigured.
  It must be deleted and new created to change

o Add I_Map change() to testsuite


PERFORMANCE
-----------

o Normalizing the DOM tree

o Profiling http://www.optimizeit.com/ or http://www.klg.com/ - JProbe or whatever

o Evaluate other query engines for better performance, see
  http://www-db.research.bell-labs.com/user/simeon/xquery.html

o Performance analysis with garbage collector http://wireless.java.sun.com/midp/articles/garbage/
  - Port to http://gongolo.usr.dsi.unimi.it/~vigna/fastUtil/?
  - Port to use Piccolo SAX parser ?
  - http://www.thoughtcrime.org/profiler.html


TEST
----

o Add automatic testssuite for C++, Perl, PHP


AUTHENTICATE / AUTHORIZATION
----------------------------

o xmlBlaster.idl
    * rename AuthServer to AuthenticationService
    * rename Server to xmlBlaster

o Authorization (ACL access control lists)
    Our ACL should be XML based, so its possible to
    query who may do what through XPath on Client meta informations which
    are XML based, simple approach:

    [User]  [Action]  [Data]
    Martin  read      marketing-paper
    Joe     write     homepage-layout

    User:   may be any user based information like role, group, property etc. (XPath query)
    Action: read, write, erase, change
    Data:   Any data in xmlBlaster (XPath query)

