Jetty 9和Spring 4的奇怪ClassCastException

时间:2016-05-30 09:07:12

标签: java spring jetty

我尝试使用Spring从Tomcat 8迁移到Jetty 9的一些应用程序集中未嵌入,但是当它查找jndi数据源时,我会得到奇怪的异常。

这里有一些堆栈跟踪,http://pastebin.com/wZKEcChL

无论我喜欢在jetty.xml或jetty-web.xml中进行配置,它都会相同。

这是一个示例数据源配置:

<New class="org.eclipse.jetty.plus.jndi.Resource" id="IST2DB">
    <Arg>jdbc/IST2DB</Arg>
    <Arg>
        <New class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <Set name="driverClass">com.mysql.jdbc.Driver</Set>
            <Set name="jdbcUrl">jdbc:mysql://blahblah</Set>
            <Set name="user">user</Set>
            <Set name="password">pass</Set>
        </New>
    </Arg>
</New>

在这里我如何从spring配置中查找jndi(非常简单)

<jee:jndi-lookup id="ist2dbxa" jndi-name="jdbc/IST2DB"/>

我甚至尝试过编写一个数据源包装器(最终应该调用相同的东西,但尝试不会受到伤害),但没有用。

public class DataSource implements javax.sql.DataSource {

    private javax.sql.DataSource dataSource;

    public DataSource() throws NamingException {
        Context initContext = new InitialContext();
        dataSource = (javax.sql.DataSource) initContext.lookup("java:/comp/env/jdbc/IST2DB");
    }

    @Override
    public Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }

    @Override
    public Connection getConnection(String username, String password) throws SQLException {
        return dataSource.getConnection(username, password);
    }

    @Override
    public <T> T unwrap(Class<T> iface) throws SQLException {
        return dataSource.unwrap(iface);
    }

    @Override
    public boolean isWrapperFor(Class<?> iface) throws SQLException {
        return dataSource.isWrapperFor(iface);
    }

    @Override
    public PrintWriter getLogWriter() throws SQLException {
        return dataSource.getLogWriter();
    }

    @Override
    public void setLogWriter(PrintWriter out) throws SQLException {
        dataSource.setLogWriter(out);
    }

    @Override
    public void setLoginTimeout(int seconds) throws SQLException {
        dataSource.setLoginTimeout(seconds);
    }

    @Override
    public int getLoginTimeout() throws SQLException {
        return dataSource.getLoginTimeout();
    }

    @Override
    public Logger getParentLogger() throws SQLFeatureNotSupportedException {
        return dataSource.getParentLogger();
    }

}

我不知道它是否与码头或弹簧有关,但是从码头以编程方式查找工作正常。

0 个答案:

没有答案