2016-12-04 13 views
1
의 contextInitialized 방법에 MySQL의 JDBC 리소스에 액세스 할 수 없습니다 내 웹 응용 프로그램이이 같은 서블릿 리스너있다

:톰캣 8.5 - ServletContextListener

@WebListener 
public class MyContextListener implements ServletContextListener { 

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

내 자원 정의가 정상이 &는이 근무하고 잘 그것은 바람둥이 7 만 내가 바람둥이 서버 8.5로 업그레이드 할 때, 그것은 시작에 예외가 발생합니다 :

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) 
    ... 

을 어쨌든, 아무 문제없이 동일한 코드를 사용하여 (다른 서블릿에서) 서버 starup 후 MySQL의 연결을 얻을 수 있습니다. 그래서 질문은 Tomcat을 시작하는 동안이 오류의 원인은 무엇입니까?

UPDATE 여기
내 가상 호스트 설정 :

내가 해결하기 위해 내 Tomcat의 context.xml에 (이 유사) 라인을 추가하는 당신 같은 비슷한 문제가 있었다
<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

'context.xml'을 (를) 공유 할 수 있습니까? –

+0

@ N00bPr0grammer 기본적으로 'context.xml'은 tomcat 8.5이며 변경하지 않았습니다. 하지만 내 웹 응용 프로그램의'Context' 요소를 의미한다면, 업데이트에 추가했습니다. –

답변

0

문제.

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

다음은 도움이 유사한 솔루션

Question-1

Question-2

Question-3

희망을 지적하는 질문에 대한 링크입니다!

+0

너무 많은 가상 호스트와 각자 자신의 리소스를 가지고 있기 때문에 & 할 수 없습니다 그들을 세계화시키지 않습니다. 또한이 상황에 대한 합리적 이유가 있어야합니다. –

+0

이제 재미 있습니다. 그 때 내가 할 수있는 것을 보여 드리겠습니다. –