Mantis - Resin
Viewing Issue Advanced Details
1846 minor always 07-03-07 08:53 11-01-07 09:00
ferg  
ferg  
normal  
closed 3.1.1  
fixed  
none    
none 3.1.4  
0001846: JCA RAR files with native libraries
(rep by Ray Cromwell)

  I couldn't find any mention of this in the documentation, I'm using the latest Resin Pro 3.1 snap on both Linux and OSX with the same results. I have a WAR with an embedded RAR. The RAR contains a JCA component that includes a native library in its root ( libfoo.jnilib on mac, libfoo.so on Linux). The JCA code has been tested and works without the System.loadLibrary(), and the native code has been tested and loads successfully under Jetty using a non-JCA WAR that loads it directly (but requires manually placing the library in the java.library.path)

  I was hoping that by creating a JCA, native library deployment would work automatically without having to hack the LD_LIBRARY_PATH or java.library.path, since it seems that part of the reason for JCA's existence is to provide a mechanism for deploying native code in a container (apart from the inbound stuff, work api, etc)

  However, I have not been able to get Resin to load the RAR's library. It deploys properly, and non-native routines can be accessed and run from the web application, but anything which triggers the System.loadLIbrary () fails to find it. Does Resin support this functionality? If not, couldn't Resin, after unpacking the RARs automatically copy any native libs (.so/.dll/.jnilib) to the libexec directory or some other standard path that would be in the startup java.library.path? It seems some containers support this capability, and some require manual intervention.

 It would be nice to have an automated capability however, since I am planning on deploying my app to several machines across a cluster, and if I have to intervene, it means I have to remotely execute something which copies the libraries and/or reconfigures the library path, and I'd rather not have to roll-my-own hacks on each machine to deal with this. As a workaround, I could see deploying a servlet which when pinged would perform the required deployment step (copying the native libs), but that requires the servlet to have special knowledge of the unpacked directory location/name/layout, which seems hacking.

 Also, the documentation suggests that the <connector>/<resource> elements can only be in web-app, host, etc. I'm wondering if I can create a resin-ra.xml file which contains my jndi bindings, and if so, what's the root element and namespace for this file?


Notes
(0002429)
ferg   
11-01-07 09:00   
server/30g{0,1}