Как настроить jndi в tomcat на предмет моих ошибок? - PullRequest
1 голос
/ 09 июня 2011

Я искал в google и stackoverflow эту проблему, есть несколько вопросов, но они не приводят к конкретному решению и причине этой причины.Я делаю проект в JSF с контекстом для моего проекта, определенного в C:\apache-tomcat-6.0.32\conf\Catalina\localhost\.

Также мой в моем web.xml У меня есть следующая конфигурация:

<context-param>
    <description>Database server name</description>
    <param-name>DATABASE</param-name>
    <param-value>MYSQL</param-value>
</context-param>
<resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/MySqlDS</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

Теперь файл контекста дляЭтот проект выглядит следующим образом:

<Context path="/SMS" debug="5" reloadable="true" crossContext="true">
    <Resource name="jdbc/MySqlDS" auth="Container"
        type="javax.sql.DataSource" removeAbandoned="true"
        removeAbandonedTimeout="30" maxActive="100"
        maxIdle="30" maxWait="10000" username="root"
        password=""
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/rosebud"/>
</Context>

Код в моем контроллере:

InitialContext initialContext = new InitialContext();
Context envContext  = (Context)initialContext.lookup("java:/comp/env");
javax.sql.DataSource ds = (javax.sql.DataSource) envContext.lookup("jdbc/MySqlDS"); 
java.sql.Connection conn = ds.getConnection();

Вот моя трассировка стека:

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Невозможно создать драйвер JDBC класса '' для URL-адреса соединения 'null' в org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory (BasicDataSource.java:1452) в org.apd.cat.dbcp.BasicDataSource.createDataSource (BasicDataSource.java:1371) по адресу org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection (BasicDataSource.java:1044) по адресу com.isys.common.navigation.daT.mn.Condex.(TmpNavDAOMySql.java:91) по адресу com.isys.common.navigation.dao.mysql.TmpNavDAOMySql.populateModels (TmpNavDAOMySql.java:114) по адресу com.isys.common.navigation.dao.mysql.TmpNavl.PlayPDA: 19) в соm.isys.common.navigation.core.StandardWrapper.loadServlet (StandardWrapper.java:1173) в org.apache.catalina.core.StandardWrapper.load (StandardWrapper.java:993) в org.apache.catalina.core.StandardContext.loadOnStartupj (StandardContext).в org.apache.catalina.core.StandardContext.start (StandardContext.java:4733) в org.apache.catalina.core.ContainerBase.start (ContainerBase.java:1053) в org.apache.catalina.core.StandardHost.start(StandardHost.java:840) в org.apache.catalina.core.ContainerBase.start (ContainerBase.java:1053) в org.apache.catalina.core.StandardEngine.start (StandardEngine.java:463) в org.apache.catalina.core.StandardService.start (StandardService.java:525) в org.apache.catalina.core.StandardServer.start (StandardServer.java:754) в org.apache.catalina.startup.Catalina.start (Catalina.java:595) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke (неизвестный источник) в jj.invoke (Неизвестный источник) на org.apache.catalina.startup.Bootstrap.start (Bootstrap.java:289) на org.apache.catalina.startup.Bootstrap.main (Bootstrap.java:414). Причина: java.lang.NullPointerException в sun.jdbc.odbc.JdbcOdbcDriver.getProtocol (неизвестный источник) в sun.jdbc.odbc.JdbcOdbcDriver.knownURL (неизвестный источник) в sun.jdbc.odbc.JdbcOdbcDriver.accel.getDriver (Неизвестный источник) в org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory (BasicDataSource.java:1437) ... еще 24

Конфигурация работает нормально, если я запускаю tomcat извнешнее затмение, но терпит неудачу, когда бежит из внутреннего затмения.В чем может быть причина?

1 Ответ

2 голосов
/ 09 июня 2011

Посмотрите на основную причину исключения:

Caused by: java.lang.NullPointerException
    at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(Unknown Source)
    at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(Unknown Source)
    at java.sql.DriverManager.getDriver(Unknown Source)
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1437)
    ... 24 more

Этот NPE явно является ошибкой в ​​драйвере моста Sun JDBC ODBC.Он должен был обработать его более изящно или вызвать более понятное исключение.

Но Само по себе большая проблема в том, что менеджер источников данных Tomcat использует мост Sun JDBC ODBCдрайвер вместо драйвера JDBC MySQL, который вы указали в driverClassName <Resource>!Это означает, что <Resource> не был правильно найден / интерпретирован Tomcat вообще.Вы должны поместить файл context.xml в папку /META-INF вашего веб-приложения.Или вы должны поместить <Resource> в <Context> файла tomcat/conf/context.xml.

...