So I've been working with some embed ability features, and was reminded of a feature that I think is very cool, but so far not used very much. It's called solara, and Guy talked about it some when he had this blog. Since it's been a few years, I thought it might be a worthwhile to dust off one of his old articles, and remind everyone about the ability to embed a webserver inside of Informix.

Back in July I reported that Solano - the Informix Dynamic Server feature that supports hosting a Java server from within IDS - was documented in the 10.00.xC5 Documentation notes, and made a vague commitment to come up with some example code to show how to use it.

The key to understanding how to use Solano is in this sentence from around the middle of the article:

Note that it is the addition of the database name and user credentials to the standard server-side JDBC direct connection string that tells IDS this is a Solano application that can run unattended.

I'm interested to know what anyone thinks of this technology and where you see it being useful. Does this article provide an understanding of what the feature is or would you like a better explanation?

The next Solano project I'd like to try is to implement a Secure Sockets Layer (SSL) server as a Solano application to enable browser-to-database public key encryption with very little configuration overhead. If other network ports into the data server and machine are disabled this could result in a highly secure database application.[Read More]

Solano has been in Informix Dynamic Server since around 9.30 and is the best IDS feature that no-one has heard of. (Ok there may be lots of better features no-one has heard of but lets not get bogged down in epistemology.) I wasn't holding my breath since I didn't provide a business case or customer request, just the argument that it's a potentially useful feature people should know about.

Dynamic Server has the ability to host a JAVA application server, such as an EJB container or custom HTTP server,within the database server by using a Solano-style database server connection string. For example:

jdbc:informix-direct:/stores_demo:user=user;password=passwd;

If you use a Solano-style connection string, a Java UDR can run in the data server and communicate with both the database server and its own client connections (for example by listening on a port and communicating with web browsers). This can lead to performance benefits and greatly extends the functionality of Dynamic Server.

So what does that mean?

It means that you can use Krakatoa (aka J/Foundation) to run a Java application that doesn't return, such as a webserver or application server, inside IDS. For example if you define a Java method that launches your app server and map it to a user defined routine, you can execute that routine to start the server and the application can listen on its own port, running in the IDS address space, and make internal database connections to the database of its choice. Another method (or the same one with a different argument) can be mapped to shut the server down.

This may not appeal to application developers used to the 3 tier client - app server - db server model but in some circumstances it can be useful. For one thing network overhead between the application server and data server is eliminated. Deployment can be simplified; you can write a self-contained application that can be installed by running an SQL script, rather than relying on installing and maintaining a third party application server. Security can be improved, for example you could reduce possible attack vectors by disabling socket connections into the data server and having all database access go via the Solano application which makes internal database connections. The most obvious disadvantages to this kind of application would be that you may not want to write your own application server, and having all your client network connections going to the data server may not fit your performance model, scalability is untested as far as I know.

At this point I should probably come up with some example code to show how this works, and contribute to the official documentation to make it more expansive. Will endeavour to do both of these in the near future.[Read More]