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.
The article even includes source code for those who want to try this out. -Mark
Administrating and Developing with Informix
Correspondendo a: solano X
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.
Today I'm pleased to make good on that promise in the form of a developerWorks tutorial describing how to set up an RSS server running inside IDS: Cut out the Middle-Man: Use Informix Dynamic Server with J/Foundation to host a Java application service.
The key to understanding how to use Solano is in this sentence from around the middle of the article:
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]
A few months ago I logged a bug requesting that Solano be documented.
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.
When a new interim version of IDS is released I'm sure the first thing you do is check the Documentation Notes for the J/Foundation Developer's Guide right? but for some reason I only just noticed that a reference to Solano makes an appearance in the 10.00.xC5 docnotes...
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:
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]