java - Modified classes are not picked by Tomcat -
i have modified few classes (like hiveconnection.class, hivedatabasemetadata.class, hiveresultsetmetadata.class, hivestatement.class) in hive-jdbc-0.13.1-cdh5.3.3.jar, , created new jar contains modified classes , named 0_modified_hive_jdbc.jar.
those classes has overriden methods throwing method not supported exception. instead created class in same name, logged message, , not throwing exception.
placed hive-jdbc-0.13.1-cdh5.3.3.jar inside tomcat/lib (because org.apache.hive.jdbc.hivedriver referred driver name jndi in server.xml)
i have placed external jars this,
/home/nages/external_jar/0_override/0_modified_hive_jdbc.jar /home/nages/external_jar/hive/hive-jdbc-0.13.1-cdh5.3.3.jar /home/nages/external_jar/others/commons-lang-2.5.jar /home/nages/external_jar/others/spring-beans-2.5.3.jar /home/nages/external_jar/others/spring-context-2.5.3.jar /home/nages/external_jar/others/spring-core-2.5.3.jar /home/nages/external_jar/others/spring-jdbc-2.5.3.jar /home/nages/external_jar/others/spring-tx-2.5.3.jar etc..
referred these jars this
file /home/nages/tomcat/conf/catalina/localhost/myapp.xml
<context reloadable="true" path="/myapp"> <loader classname="org.apache.catalina.loader.virtualwebapploader" virtualclasspath="/home/nages/external_jar/0_overrider/*.jar;/home/nages/external_jar/hive/*.jar;/home/nages/external_jar/others/*.jar;/etc/hadoop/conf/;"/> </context>
deployed application (myapp.war) in tomcat.
find.jsp presented in myapp.war.
/home/nages/tomcat/webapps/myapp/find.jsp
here piece of code presented in find.jsp
classloader loader = clazz.getclassloader(); if (loader == null){ throw new exception("class loader null."); } string filename = classname.replace('.','/')+".class"; url fileurl = loader.getresource(filename); out.println("<b>location : </b>" + fileurl);
when request org.apache.hive.jdbc.hiveconnection in find.jsp, returns,
location : jar:file:/home/nages/external_jar/0_override/0_modified_hive_jdbc.jar!/org/apache/hive/jdbc/hiveconnection.class.
inside war there java class, has following code
import org.springframework.jdbc.core.jdbctemplate; import org.springframework.jdbc.support.rowset.sqlrowset; jdbctemplate template = new jdbctemplate(getdatasource("hive")); sqlrowset sqs = template.queryforrowset(sqlquery);
i getting following exception
caused by: java.sql.sqlexception: method not supported @ org.apache.hive.jdbc.hiveresultsetmetadata.issigned(hiveresultsetmetadata.java:141) @ com.sun.rowset.cachedrowsetimpl.initmetadata(cachedrowsetimpl.java:726) @ com.sun.rowset.cachedrowsetimpl.populate(cachedrowsetimpl.java:640) @ org.springframework.jdbc.core.sqlrowsetresultsetextractor.createsqlrowset(sqlrowsetresultsetextractor.java:66) @ org.springframework.jdbc.core.sqlrowsetresultsetextractor.extractdata(sqlrowsetresultsetextractor.java:49) @ org.springframework.jdbc.core.jdbctemplate$1querystatementcallback.doinstatement(jdbctemplate.java:447) @ org.springframework.jdbc.core.jdbctemplate.execute(jdbctemplate.java:395) ... 48 more
question why not picking org.apache.hive.jdbc.hiveresultsetmetadata.class overriden jar? find.jsp says classloader picks overriden jar, whereas while executing query picks somewhere else.
java : 1.7_45u tomcat : 7.0.35
Comments
Post a Comment