Is This Content Helpful?
We're glad to know this article was helpful.
When using the ArcSDE Java API in an environment with multiple classloaders; for example servlet container, the following error occurs:
"java.lang.UnsatisfiedLinkError: Native Library jsg83.dll already loaded in another classloader"
The error may be returned in a Web client or a log file associated with the container; for example, Tomcat or ServletExec.
The ArcSDE Java API uses Java classes in the jsde83_sdk.jar that call the native library, jsg83.dll or .so on Unix platforms, in the $SDEHOME/bin directory. Due to a limitation of the JVM classloader, these Java classes should only be loaded once per process. See the Related Information article below for additional information on this issue.
With a servlet or EJB container, often managed by an application server, classes or jars can be placed in a location that loads them only once, accessible by any Web application managed by the container process. As an example, using Tomcat add the jsde83_sdk.jar to a pre-defined repository for jars; for example, /usr/tomcat/lib that makes them available to the container process as a whole - and by default exposed to a single classloader.
For ServletExec AS, add the jsde83_sdk.jar to the pre-defined repository; for example, C:\Program Files\New Atlanta\ServletExec AS\lib and add a reference to it in the StartServletExec.bat file. The path to the jsg*.dll, pe*.dll, sdejavautil.dll, and sg*.dll libraries, usually in the $SDEHOME/bin directory, must also be added to the PATH for the environment in which the servlet container is running. On a Unix platform the shared libraries are libjsg*.so, pe*.so, libsdejavautil.so, and sg*.so. The '*' represents the version of the ArcSDE client libraries.