tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Eggers <its_toas...@yahoo.com>
Subject Re: Problem with tomcat 7 and java ld_library_path under centos 6 using IANYWHERE JDBC DRIVER
Date Thu, 09 Aug 2012 22:21:58 GMT
On 8/9/2012 3:06 PM, Martin Gainty wrote:
>
> Mark
>
> did
> JAVA_OPTS="-Djava.library.path=directory-with-libdbodbc12.so"
> export JAVA_OPTS
> work?
>
> What does Sybase say?
> Martin
> ______________________________________________

>
>> Date: Thu, 9 Aug 2012 07:53:19 -0700
>> From: its_toasted@yahoo.com
>> To: users@tomcat.apache.org
>> Subject: Re: Problem with tomcat 7 and java ld_library_path under centos 6 using
IANYWHERE JDBC DRIVER
>>
>> Moving this back on the list.
>>
>> In general it's a good idea to keep the discussion (and the solution) on
>> the mailing list. That way everyone benefits (and everyone can help).
>>
>> Comments are surrounded with ==== COMMENT ====
>>
>> On 8/9/2012 4:18 AM, CHRISTOS STAVRINOU wrote:
>>> Thank you for your answer that solved the problem. But now I get the
>>> error below that
>>>
>>> [Sybase][ODBC Driver Manager] Unable to load resource file
>>>
>>> I can't understand what happens and how to fix it.
>>>
>>> Please help if you have any answer.
>>>
>>> Thanks a lot.
>>>
>>> org.apache.jasper.JasperException: javax.servlet.ServletException:
>>> java.sql.SQLException: [Sybase][ODBC Driver Manager] Unable to load
>>> resource file
>>> 	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:548)
>>> 	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:456)
>>> 	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
>>> 	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
>>> 	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
>>>
>>> root cause
>>>
>>> javax.servlet.ServletException: java.sql.SQLException: [Sybase][ODBC
>>> Driver Manager] Unable to load resource file
>>> 	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:911)
>>> 	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:840)
>>> 	org.apache.jsp.sybread_jsp._jspService(sybread_jsp.java:157)
>>> 	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
>>> 	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
>>> 	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
>>> 	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
>>> 	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
>>> 	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
>>>
>>> root cause
>>>
>>> java.sql.SQLException: [Sybase][ODBC Driver Manager] Unable to load
>>> resource file
>>> 	ianywhere.ml.jdbcodbc.jdbc3.IDriver.makeODBCConnection(Native Method)
>>> 	ianywhere.ml.jdbcodbc.jdbc3.IDriver.connect(IDriver.java:768)
>>> 	java.sql.DriverManager.getConnection(DriverManager.java:579)
>>> 	java.sql.DriverManager.getConnection(DriverManager.java:221)
>>> 	org.apache.jsp.sybread_jsp._jspService(sybread_jsp.java:95)
>>> 	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
>>> 	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
>>> 	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
>>> 	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
>>> 	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
>>> 	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
>>>
>>
>> ==== COMMENT ====
>>
>> This looks like you are placing the SQL inside of a JSP page. In
>> general, this is not best practice. I am not sure that this list is the
>> place to discuss DAO (data access object) architecture, although the
>> following blog post by Christopher Schultz is quite instructive:
>>
>> http://blog.christopherschultz.net/index.php/2009/03/16/properly-handling-pooled-jdbc-connections/
>>
>> ==== COMMENT ====
>>
>>> On Wed, Aug 8, 2012 at 7:46 PM, Mark Eggers <its_toasted@yahoo.com> wrote:
>>>> On 8/8/2012 6:06 AM, CHRISTOS STAVRINOU wrote:
>>>>>
>>>>> Problem with tomcat 7 and java ld_library_path under centos 6 using
>>>>> IANYWHERE JDBC DRIVER
>>>>>
>>>>> At what path I must copy the file dbjodbc12.so? What is the correct
>>>>> configuration?
>>>>>
>>>>> How I can configure the java.library.path under under centos 6 and
>>>>> tomcat 7 in order to fix the problem?
>>>>>
>>>>> Please help me. If you have any answers please email me to
>>>>> stavrinc@gmail.com
>>>>>
>>>>> Thanks in advance
>>>>>
>>>>> The connection string is as follows:
>>>>>
>>>>> "jdbc:ianywhere:driver=libdbodbc12.so;ENG=host;DBN=database"
>>
>> ==== COMMENT ====
>>
>> According to a discussion on the SQL Anywhere forum, you no longer need
>> to put driver and DBN=database (shouldn't that be DSN=database) in the
>> connection string.
>>
>> However, they're using sajdbc4.jar -> sybase.jdbc4.sqlanywhere.IDriver
>> and you appear to be using the jdbc3 driver?
>>
>> Here's the discussion link:
>>
>> http://sqlanywhere-forum.sybase.com/questions/8551/sybasejdbc4sqlanywhereidriver-problems-java-hangs-when-connecting
>>
>> ==== COMMENT ====
>>
>>>>> But when running the program, I get the following exception (with the
>>>>> relevant stack trace) -
>>>>> Exception in thread "main" java.lang.UnsatisfiedLinkError: no
>>>>> dbjodbc12 in java.library.path
>>>>>                   at
>>>>> java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)
>>>>>                   at java.lang.Runtime.loadLibrary0(Runtime.java:823)
>>>>>                   at java.lang.System.loadLibrary(System.java:1030)
>>>>>                   at
>>>>> ianywhere.ml.jdbcodbc.IDriver.try_load(IDriver.java:247)
>>>>>                   at
>>>>> ianywhere.ml.jdbcodbc.IDriver.<clinit>(IDriver.java:216)
>>>>>                   at java.lang.Class.forName0(Native Method)
>>>>>                   at java.lang.Class.forName(Class.java:169)
>>>>
>>>>
>>>> I just did a quick yum search on a CentOS 6 machine, and I guess you're
>>>> running a self-installed version of Tomcat 7 from tomcat.apache.org.
>>>>
>>>> If that's the case, you can do the following to add to your
>>>> java.library.path.
>>>>
>>>> 1. Create a file called setenv.sh in $CATALINA_BASE/bin
>>>> 2. Add the following lines
>>>>
>>>>      JAVA_OPTS="-Djava.library.path=directory-with-libdbodbc12.so"
>>>>      export JAVA_OPTS
>>>>
>>>> 3. Restart Tomcat
>>>>
>>>> Technically you could place this in CATALINA_OPTS instead, and the path
>>>> would only be available to Tomcat (and not the separate shutdown JVM). For
>>>> memory parameters, this is important. For java.library.path, probably not
as
>>>> much.
>>>>
>>>> If you've installed Tomcat 7 from a third party RPM, then you'll have to
>>>> find the bin directory and create the file as above. Hopefully the packager
>>>> didn't alter catalina.sh so that it doesn't parse setenv.sh.
>>>>
>>>> I've not tried this since I use pure Java drivers for databases, and have
>>>> not used this database. I do load the APR native library this way.
>>
>> ==== COMMENT ====
>>
>> I don't know where you've placed the dbjodbc12.so and corresponding JAR
>> file. Here are some thoughts on that.
>>
>> 1. dbjodbc12.so location
>>
>> Place this outside of your Tomcat installation. Since this is a system
>> resource, you might consider placing it in /opt/Sybase/lib or something
>> similar.
>>
>> Make sure that the file (and directory) are readable by the user running
>> your Tomcat process. In general for a directory 0755 is appropriate, and
>> for the file itself 0755 (libraries are executable?).
>>
>> Another possibility is to place the library in a system location (/lib,
>> /usr/lib, /usr/local/lib) and let ldconfig make this available. If you
>> do this, then the java.library.path should not be needed. However, that
>> will impact your entire system so it may not be what you want.
>>
>> 2. sajdbc4.jar
>>
>> I'm guessing that you're actually using sajdbc3.jar? Again, I don't know
>> since I've not worked with the Sybase database.
>>
>> At any rate, since you're doing this all in JSP (and I assume for now
>> NOT using JNDI), you need to place the appropriate JAR file in
>> WEB-INF/lib of your application.
>>
>> It should be found ONLY in the WEB-INF/lib of your application. Placing
>> the JAR file in multiple places will just lead to the issues you're seeing.
>>
>> One of these days I'm going to walk through the classloader mechanics so
>> I can understand why multiple JAR locations creates issues.
>>
>> ==== COMMENT ====
>>
>> . . . . just my two cents.
>> /mde/

Well considering I'm not the person with the original problem, and I 
don't use Sybase (also not particularly fond of web applications that 
load JNI stuff), I don't know.

I suspect that it's the combination of java.library.path and the 
database URL the original requester is using.

We'll have to see if the original person responds concerning the Sybase 
forum link I posted.

I'm sort of curious to know as well.

. . . . just my (sort of interested) 2 cents
/mde/


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Mime
View raw message