2016-12-04 1 views
1

Mein Web-Anwendung ein Servlet-Listener wie folgt Zugriff hat:Tomcat 8.5 - Kann nicht MySQL JDBC-Ressource in contextInitialized Methode von ServletContextListener

@WebListener 
public class MyContextListener implements ServletContextListener { 

    @Override 
    public void contextInitialized(ServletContextEvent e) 
    { 
     ... 
     con = DatasourceProvider.getDatasource("java:comp/env/jdbc/mysql/mydb").getConnection(); 
     ... 
    } 
} 

Meine Ressourcendefinition ist OK & es hat geklappt hat es tomcat 7, aber wenn ich auf Tomcatbediener 8.5 aktualisiert hat, wirft es eine Ausnahme beim Start:

javax.naming.NameNotFoundException: Name [jdbc/mysql/mydb] is not bound in this Context. Unable to find [jdbc]. 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:816) 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:159) 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:827) 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:159) 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:827) 
    at org.apache.naming.NamingContext.lookup(NamingContext.java:173) 
    at org.apache.naming.SelectorContext.lookup(SelectorContext.java:163) 
    at javax.naming.InitialContext.lookup(InitialContext.java:417) 
    ... 

Wie auch immer, ich mysql-Verbindungen nach Server starup (in den anderen Servlets) mit gleichem Code ohne Probleme bekommen. Die Frage ist also, was diesen Fehler beim Tomcat Start verursacht?

UPDATE
Hier ist meine virtuelle Host-Konfiguration:

<Host name="my-domain.ir" appBase="/var/www/webapp" > 
    <Context path="" docBase="MyWebApp" 
    xmlValidation="false" xmlNamespaceAware="false" crossContext="false" reloadable="false" > 
    <Resource name="jdbc/mysql/mydb" auth="Container" type="javax.sql.DataSource" 

    initialSize="1" maxTotal="100" maxIdle="2" 
    maxWaitMillis="20000" removeAbandonedOnMaintenance="true" removeAbandonedTimeout="300" 
    validationQuery="select now();" 

    username="myUser" password="myPass" driverClassName="com.mysql.jdbc.Driver" 
    url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&amp;characterEncoding=UTF-8&amp;characterSetResults=UTF-8&amp;connectionCollation=UTF8_PERSIAN_CI&amp;noAccessToProcedureBodies=true" 
    /> 
    </Context> 
</Host> 
+0

Können Sie Ihre 'context.xml' teilen? –

+0

@ N00bPr0grammer es ist Standard 'context.xml' für Tomcat 8.5 & ich habe es nicht geändert. Aber wenn Sie "Context" -Element meiner Webanwendung meinen, fügte ich es zum Update hinzu –

Antwort

0

hatte ich ein ähnliches Problem wie wie Sie, für die ich context.xml die eine Linie (ähnlich wie diese) in meinem Tomcat hinzugefügt zu lösen Das Thema.

<ResourceLink global="jdbc/mysql/mydb" name="jdbc/mysql" type="javax.sql.DataSource"/> 

Im Folgenden sind die Links zu Fragen, die

Question-1

Question-2

Question-3

Hoffnung, die hilft, zu einer ähnlichen Lösung darauf hin !!!

+0

Aber ich kann das nicht tun, weil ich zu viele virtuelle Hosts habe und jeder hat seine eigenen Ressourcen & ich will nicht & kann Mach sie nicht global. Darüber hinaus sollte es einen vernünftigen Grund für diese Situation geben. –

+0

Nun, das ist interessant, lass mich sehen, was ich dann tun kann! –

Verwandte Themen