Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Tomcat不会选择修改过的类_Java_Tomcat_Tomcat7_Classloader_Spring Jdbc - Fatal编程技术网

Java Tomcat不会选择修改过的类

Java Tomcat不会选择修改过的类,java,tomcat,tomcat7,classloader,spring-jdbc,Java,Tomcat,Tomcat7,Classloader,Spring Jdbc,我在hive-jdbc-0.13.1-cdh5.3.3.jar中修改了几个类(如HiveConnection.class、HiveDatabaseMetaData.class、HiveResultSetMetaData.class、HiveStatement.class),并创建了一个只包含修改过的类的新jar,并将其命名为0\u modified\u hive\u jdbc.jar 这些类有一些重写的方法,这些方法引发了不支持的方法异常。相反,我们用相同的名称创建了类,我们记录了消息,并没有引

我在hive-jdbc-0.13.1-cdh5.3.3.jar中修改了几个类(如HiveConnection.class、HiveDatabaseMetaData.class、HiveResultSetMetaData.class、HiveStatement.class),并创建了一个只包含修改过的类的新jar,并将其命名为0\u modified\u hive\u jdbc.jar

这些类有一些重写的方法,这些方法引发了不支持的方法异常。相反,我们用相同的名称创建了类,我们记录了消息,并没有引发异常

放置在tomcat/lib中的hive-jdbc-0.13.1-cdh5.3.3.jar(因为org.apache.hive.jdbc.HiveDriver在server.xml中被称为JNDI的驱动程序名)

我把所有的外部罐子都放在这里

/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..
像这样提到这些罐子

文件/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>
我得到了以下例外

Caused by: java.sql.SQLException: Method not supported
        at org.apache.hive.jdbc.HiveResultSetMetaData.isSigned(HiveResultSetMetaData.java:141)
        at com.sun.rowset.CachedRowSetImpl.initMetaData(CachedRowSetImpl.java:726)
        at com.sun.rowset.CachedRowSetImpl.populate(CachedRowSetImpl.java:640)
        at org.springframework.jdbc.core.SqlRowSetResultSetExtractor.createSqlRowSet(SqlRowSetResultSetExtractor.java:66)
        at org.springframework.jdbc.core.SqlRowSetResultSetExtractor.extractData(SqlRowSetResultSetExtractor.java:49)
        at org.springframework.jdbc.core.JdbcTemplate$1QueryStatementCallback.doInStatement(JdbcTemplate.java:447)
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:395)
        ... 48 more
问题是为什么它不从覆盖的jar中选择org.apache.hive.jdbc.HiveResultSetMetaData.class?jsp表示类加载器从覆盖的jar中选取该类,而在执行查询时,它从其他地方选取该类

爪哇:1.7_45u
tomcat:7.0.35

可能是Hive使用自己的类加载器只查看自己的jar内部。您是否尝试过将重写的类物理地放在hive jar中,替换原来的类?这很有效,但我不想这样做。可能是hive正在使用自己的类装入器来只查看自己的jar中。您是否尝试过将重写的类物理地放在配置单元jar中,替换原来的类?这很有效,但我不想这样做。
import     org.springframework.jdbc.core.JdbcTemplate;
import     org.springframework.jdbc.support.rowset.SqlRowSet;

JdbcTemplate template = new JdbcTemplate(getDataSource("Hive"));        
SqlRowSet sqs = template.queryForRowSet(sqlQuery);
Caused by: java.sql.SQLException: Method not supported
        at org.apache.hive.jdbc.HiveResultSetMetaData.isSigned(HiveResultSetMetaData.java:141)
        at com.sun.rowset.CachedRowSetImpl.initMetaData(CachedRowSetImpl.java:726)
        at com.sun.rowset.CachedRowSetImpl.populate(CachedRowSetImpl.java:640)
        at org.springframework.jdbc.core.SqlRowSetResultSetExtractor.createSqlRowSet(SqlRowSetResultSetExtractor.java:66)
        at org.springframework.jdbc.core.SqlRowSetResultSetExtractor.extractData(SqlRowSetResultSetExtractor.java:49)
        at org.springframework.jdbc.core.JdbcTemplate$1QueryStatementCallback.doInStatement(JdbcTemplate.java:447)
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:395)
        ... 48 more