Dave Cramer wrote:

As there are two java procedural languages which are available for postgreSQL Josh asked for an explanation as to their differences. They are quite similar in that both of them run the function in a java vm, and are pre-compiled. Neither attempt to compile the code.

The biggest difference is how they connect to the java VM.

PL/Java uses Java Native Interfaces (JNI) and does a direct call into the java VM from the language handler.

PL-J uses a network protocol to connect to a java VM.


There are advantages and disadvantages to both approaches.

+ JNI is simpler, doesn't require a protocol, or an application container to manage the User Defined Functions - JNI requires that the vm runs on the server machine, and a separate vm be instantiated for every connection that calls a function. This is mitigated somewhat in java 1.5, by sharing data, however this may or may not be a Sun only feature ( does anyone know );
    either way a separate vm is required for each connection.
- startup time for the vm on the first call for the connection.
- Possible ( not as likely any more ) for the java VM to take the server down.

Using a network protocol such as a pl-j does has the following ( basically the opposite of the JNI (dis)advantages )

+ The java VM does not have to run on the server.
+ Only one vm per server
- More complex, requires a micro kernel application server to manage the UDF's currently http://loom.codehaus.org/



That's a pretty good explanation and ought to be published more widely. It's almost a pity that we couldn't have one project with a server setting saying how we want it to run.

I seem to recall hearing of a Sun gadget in the works that would let a process connect to a running VM and load classes and run them. I have been a bit out of it on Java lately - does anyone know of such a thing, or is my memory failing again?

cheers

andrew

---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster

Reply via email to