A Free JAVA JNDI naming service provider and MOM system over SSL secured sockets.

Home Page>


cyJNDI Copyright (c) 2000 by Erica Andrews a.k.a. Li'L CJ.
Copyright (c) 2000 by Erica Andrews a.k.a. Li'L CJ.
cyJMS Copyright (c) 2000 by Erica Andrews
JNDIce Copyright (c) 2000 by Erica Andrews
CJ's MailerBean Copyright (c) 2000 by Erica Andrews
All rights reserved.
phrozensmoke ['at'] yahoo.com
More Of My FREE Java Software
** This software is currently UNMAINTAINED **

OverviewSystem Requirements | Package Contents | Features | LimitationsKnown Bugs | Screen-shots | DOWNLOAD | Testing | LICENSE | DISCLAIMER

What is cyJNDI-cyJMS?
The license for this application is "restricted freeware".  his application is "restricted freeware".  cyJNDI-cyJMS is FREE for non-commercial and non-profit use only, provided that the bundled package remains UNMODIFIED.  The cyJNDI-cyJMS application server is a new, robust naming service provider and message-oriented middleware (MOM) system which focuses most strongly on security and remote administration.  The server's strongest feature is its support for SSL/TLS secured sockets as well an additional lighweight encryption mechanism, which I created to ensure that transmitted data would be offered some protection even when SSL is disabled.  cyJNDI-cyJMS also provides an easy-to-use telnet-able server interface, which allows for remote monitoring and administration of the server as well as some remote administration of your namespace.  I was inspired to create cyJNDI-cyJMS out of what I consider to be a very frustrating lack of lightweight Java naming service providers and messaging systems.  The focus here is NOT to become J2EE compliant (with a full-fledged enterprise application server), but to become fully JNDI and JMS compliant. Unlike numerous other Java JNDI and JMS service providers which are almost always bundled with a huge application server, cyJNDI-cyJMS is a stand-alone namespace and MOM which does not require one to launch a monster-sized EJB/J2EE server (and most likely a database to accompany it) or a monster-size LDAP ccompany it) or a monster-size LDAP daemon.  Instead, if you need access to a JNDI and JMS service provider, you need only launch a smaller application server, as opposed to having to cope with the sometimes unnecessary overhead of launching a EJB/Servlet/JSP/JNDI/JMS/XML/Plus-a-bunch-of-other-stuff application server.  WARNING:  cyJNDI-cyJMS is still very much a work in progress, so expect a few bugs and feel free to report them to cylikon@hotmail.com .   You can check out the list of Known Bugs below.  The server comes with a very easy-to-use GUI interface for easy administration.  (I was also frustrated by the many command-line oriented JNDI and JMS systems...How lazy can a developer be!).   Currently, cyJNDI is roughly 98% JNDI 1.2.1 compliant (with some of the Spec's optional features still to be implemented), while cyJMS is about 95% JMS 1.0.2 compliant.  You can check out the list of Known Limitations below.

System Requirements:
Please ensure that you have ALL of the requirements listed below before even downloading and attempting to run cyJNDI-JMS:
- 24MB of memory or better should do just>- 24MB of memory or better should do just fine: The server is VERY lightweight.  (32MB+ for SSL recommended)
- A J2EE/1.2 Java Virtual Machine or better. Sun's JDK/SDK 1.3 is highly suggested.
- The Java Naming and Directory (JNDI) API classes (javax.naming.)  version 1.2.1 or better
- The Java Messaging Service (JMS) API classes (javax.naming.) version 1.0.2 or better
- The Java Secure Sockets Extension (JSSE) classes, version 1.0.1 or better.
- The JavaMail API classes (javax.mail.), version 1.1.3 or better
- The Java Activation Framework API classes (javax.activation), any recent version
- The Java Cryptography Extension API classyptography Extension API classes (javax.crypto), any recent version

NOTE: ALL of these API libraries are REQUIRED, even if you don't intend to use the SSL Secure Sockets or the remote terminal's e-mail feature.  For information on how to properly install  and configure the JSSE extension,  and how to find and choose an SSL security provider, check out these pages at Sun:

You will also need an SSL security provider if you wish to run the application server in SSL-enabled mode.  I recommend using the SSL provider supplied by Sun (bundled with the JSSE); however, any standard, JSSE-compliant SSL provider should work.  Procuring and configuring an SSL provider is beyond the scope of this overview, and, therefore, your own responsibility.

Include In This Package:
- cyJNDI naming service  version 1.0b with SSL support and other added encryption
- cyJMS messaging system version 1.0a
- JNDIce JNDI administration tool version 1.3b  (check out this page for more information on JNDIce, and a stand-alone   version.)
- Built-in and stand-alone terminal/telnet application for accessing your cyJNDI server both in SSL or non-SSL mode
- Built-in Topic and Queue browser

- Built-in Topic and Queue deployment tool
- A server activity monitor
- A setup program
- A Mailer bean which can send your log files to any email address you specify at the telnet-able terminal.
- Optional use of SSL/TLS secured sockets, on both the client and server side.  (Enabled by default)
- Programmed entirely in Java
- A CONSOLE-FREE application server (No more having to stare at a black console window and read some lazy programmer's System.out.print's and printStackTrace calls)
- Low-memory usage (24MB or more should serve you just fine, 32MB+ recommended for SSL).
- Control over the server's port   (The default is 21472)
- "Arial,Helvetica">- Control over the number of simultaneous connections.
- A persistent, heirarchal namespace, allowing JNDI-bound objects to survive a server crash (Persistence is optional, enabled by default.  The persistence does NOT require the use of a database, saving  overhead.)
- A fast JMS messaging service with minimal thread blocking. The only methods that block are TopicSubscriber.receive() and the QueueReceiver.receive() methods and their variations.  Unlike most other JMS services. a call to Connection.start() or Session.run() will never cause a thread in your application to block.  The JMS 1.0.2 spec does not require any methods besides receive() and receive(long timeout) to block, so there is no overhead from other methods blocking.  You will NEVER have to call Connection.start(), Session.run(), and Subscriber/Receiver.receive() in separate threads, making development a snap.
- cyJMS supports both publish-subscribe (Topics)  messaging and point-to-point messaging (Queues)
- cyJMS messaging  persistence does NOT require the use of a database: saves overhead.

- Support for URLS in Initial Contexts
- The cyJNDI server is actually telnet-able.  If the server is not using SSL you can telnet to the port with any telnet client.  If SSL is being used, you may use the SSL-compatible telnet client included in the package.
- The ability to allow all connections, allow only selected connections, or block selected connections.
- Extensive logging of all server activities, including major errors and possible security incidents (failed logins)
- The ability to monitor client and administrative connections in real-time  (or disable the monitoring)
- Support of JNDI authentication   (mandatory as a security measure)
- Support for JMS authentication   (optional)
- EXTENSIVE and THOROUGH JNDI namespace exploration (with the builtespace exploration
(with the built-in version of JNDIce)
- EXTENSIVE and THOROUGH JMS message browsing with full Topic and Queue browsing
- cyJMS supports 5 of the JMS spec's optional JMSX message properties: JMSXUserID, JMSXAppID, JMSXGroupID, JMSXGroupSeq, JMSXRcvTimestamp
- Partial (almost complete) support for message selectors.
- Optional timed garbage collection
- A clean and easy-to-use GUI interface for deploying Topics and Queues, monitoring server activity, and exploring and administering the namespace.
- An easy to use Setup program to make configuring you cyJNDI-cyJMS simple, without having to deal with command lines, properties files, and other aggravating details.
- A telnet-able remote adminstration interface which includes the ability to:
 - Change usernames anfont size=-1> - Change usernames and passwords remotely
-  Read system alerts about any potential security incidents or system errors.
- Have your cyJNDI-cyJMS log files mailed to any email address you specify (to facilitate remote monitoring)
- See who is currently logged on, either as an adminstrator or client
- List objects bound to your cyJNDI namespace (and their classes)
- Conduct lookups on objects bound to the namespace (and their classes)
- Unbind objects from the namespace
- List information about your system'formation about your system's setup
- And much, much more.


The Complete interface:

cyJNDI-cyJMS: provides easy browsing of Topics and Queues, including extensive information about the history of the Topic or Queue, its Subscribers/Receiver, any message selectors, and the messages available.
Shown here, a Topic named "test", and a Queue named "testQ":

cyJNDI-cyJMS also allows for browsing published or queued messages in great detail:

Deployment of new cyJMS Topics and Queues is very easy with the built-in deplyJMS Topics and Queues is very easy with the built-in deployment tool, eliminating the need for dealing with command lines, pesky properties files, etc.


You can also explore your cyJNDI namespace extensively with the built-in version of JNDIce included in the package. Here, you will find all of your non-temporary Topics and Queues listed in the namespace

Download cyJNDI-cyJMS version 1.0 beta:
By downloading and/or using cyJNDI-cyJMS, you agree to the license and disclaimer.

Download cyJNDI-cyJMS application server, including all client classes and documentation  ( ~576 KB, .zip format)

After downloading, read the cyHelp.html file in the \docs\&nbsptml file in the \docs\  sub-directory for information on installation and getting started.

cyJNDI-cyJMS was tested on several Windows computers running Win 95/98, with a memory range of 24MB -128MB, using Sun's JDK 1.2 and 1.3.  This application has also been tested extensively in JPython 1.1.  This application is VERY new and has not yet been tested on any other platforms or Java virtual machines.  cyJNDI-cyJMS will most likely be tested on Linux very shortly, after which, I will post any new findings to this page.

Known Limitations:

- First and foremost, this application server is very NEW, so think of this distribution as a preview of what's to come, as opposed to a final release.  Expect some bugs and things like that.  Feedback and bug reports are welcome, of course.

- For now, cyJNDI is only a Naming service provider (as opposed to a Naming AND Directory service provider). So, there is currently no support for javax.naming.directory development or javax.naming.event development.  Support r javax.naming.event development.  Support for directories and events is optional according to the 1.2.1 spec; however, directory support, search capabilities, and event support are planned for the VERY near future.  I expect to have full directory and searching support within the next couple of weeks and event support within, say, 3-4 weeks (whenever I find the time).

- The third limitation is regarding cyJMS:  There is extensive support for message selectors, particularly the most common SQL-92 keywords.  However, a few of the keywords required by the JMS 1.0.2 spec have not yet been implemented. These include: BETWEEN, NOT BETWEEN, IN, and NOT IN.  These keywords are probably the least commonly used, and can easily be replaced in your message selector syntax by other keywords such as:   bankAccount > 5 AND bankAccount <25      instead of   bankAccount BETWEEN 5 AND 25

- This last one is not really a "limitation" so much as it is a fact of life:  Please be aware that connections (both client and server-side) which use SSL/TLS secured sockets will be initially slower than non-secure connections.  This delay is due to the standard SSL "handshake" conducted when a connection first begins.  These delays are STANDARD with SSL.&nbspThese delays are STANDARD with SSL.   Handshakes can take anywhere between 2 and 15  additional seconds or more depending on the speed of your server, your server's load, and other factors. Of course, you have the option of enabling or disabling SSL as you see fit.  However, if the data you are passing in the cyJNDI-cyJMS system is in any way "mission critical" or otherwise sensitive, you are strongly advised to use SSL secured sockets to protect yourself from individuals "spying" on your connections.  If you choose not to use SSL, your connections should be fairly safe since, an added layer of  lightweight encryption I created, which does not affect the speed of connections, is always in place.

Known Bugs:

- JPYTHON users:  If you use cyJMS from the JPython prompt or a JPython program, you may experience a problem sending ObjectMessages.  This problem usually occurs when setObject() is called.  When a ObjectMessage is sent in which the object value is NOT null, you may receive a ClassNotFoundException for "org.python.core.PyJavaInstance".  Even if you do somehow add "org.python.core.PyJavaInstance" to your classpath and get rid of the ClassNotFoundException, you will probably encounter a NotSerializableExcwill probably encounter a NotSerializableException directed at the object you supplied to setObject() and "org.python.core.PyJavaInstance" .  This bug only seems to occur when an ObjectMessage is SENT.  I have encountered no problems receiving ObjectMessages in JPython.  It appears that somehow an instance of "org.python.core.PyJavaInstance" is getting "stuffed" into the sent Object.   Note: I did not encounter this problem sending any type of message and calling Message.setObjectProperty("myObject", Object o).  So, this could be an EASY work-around in JPython.  The bug is specific to SENDING non-NULL objects in ObjectMessage using Message.setObject(Object o).  This problem also is specific to JPython as far as I have seen (version 1.1).  If you see this error any place else, send a bug report.

- JPYTHON users:<=-1>- JPYTHON users:  If you use cyJNDI from the JPython prompt or a JPython program, you may experience a NameNotFoundException with Subcontext.lookupLink(Name name).  This bug seems to arise when a SUB-context's lookupLink() method is called using a Name instead of a String.  You will encounter a NameNotFoundException, even though you know that the object is definitely bound to the namespace. This problem seems to be specific to JPython and SUB-contexts, when lookupLink(Name name) is called instead of lookupLink(String name). This bug also only affects SUB-contexts, not regular contexts.  I am working on a fix for this bug, so check back often. If you spot this bug in another place besides where I have described, send a bug report.  The work around is to call Subcontext.lookupLink(String name) instead of looking up a Name, CompoundName, or CompositeName.

License and Copyright: 

cyJNDI Copyright 2000 by Erica Andrews a.k.a. Li'L CJ.
cyJMS Copyright 2000 by Erica Andrews
JNDIce Copyright 2000 by ica">JNDIce Copyright 2000 by Erica Andrews
CJ's MailerBean Copyright 2000 by Erica Andrews
All rights reserved.

This application is RESTRICTED FREEWARE.
This application is NOT OPEN SOURCE.

The author of this application hereby grants the public unlimited *personal* use of this software provided it is *not* used for any commercial purposes or ventures whatsoever, is *not* used for any sort of profit, either directly or indirectly, and *no* portion of this software is modified in any way. No disassembly, decompilation, or other dealings with any source code from this software are permitted.  This software may not be used  by for-profit organizations/individuals, or used on computers or other ls, or used on computers or other data systems owned  by corporations or other for-profit organizations, without the express, written consent of the author.  Any use of this software which is not consistent with the aforementioned terms, without the  written consent of the author, constitutes unauthorized, fraudulent misuse of the software, punishable in a court of law. By  downloading and/or using this software, you agree to the terms above as well as the disclaimer.


By using this software, you acknowledge that this software is distributed on an as-is basis, without any warrantee of any kind, and
agree that the author of this software will not, under any circumstances, be held responsible for any damages, losses, or inconveniences derived from the use of this software.