문제

나는 과거에 J2EE 코딩을했던 사람이고 새로운 J2EE 프로젝트를 위해 접힌 주로 돌아온다. 2001 년부터 많은 것이 바뀌 었 으므로이 기본적인 질문을해야합니다.

데이터베이스 클래스에서 이와 같은 구문을 사용하고 있습니다.

@Resource(name = "jdbc/MyDatabase")  
private javax.sql.DataSource dataSource;  

나는 이것이 새로운 기능 (주석)이라는 것을 이해하지만 그것이 어떻게 작동하는지 잘 모르겠습니다. 나중에 수업 시간에 나는이 전화를한다.

Connection c = dataSource.getConnection();  

그리고 매번 NullPointerException을 던집니다. 나는 디버거에서 이것에 들어갔고, 결과적으로 데이터 소스는 null입니다.

코드에서 데이터 소스를 직접 초기화하지 않는 것은 마술적이고 이상하게 보입니다. 내가 뭘 잘못하고 있는지 아십니까?

내 web.xml에는 리소스를 설정하기위한 다음 블록이 포함되어 있습니다.

<resource-env-ref>
    <resource-env-ref-name>jdbc/MyDatabase</resource-env-ref-name>
    <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
</resource-env-ref>

그리고 Meta-Inf의 context.xml 파일을 사용하여 이것을 내 컨텍스트에 추가했습니다. 컨텍스트 항목은 다음과 같습니다.

<Resource name="jdbc/MyDatabase" auth="Container" type="javax.sql.DataSource"
    maxActive="100" maxIdle="30" maxWait="10000"
    username="username" password="password" driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://127.0.0.1:3306/mydb?autoReconnect=true"/>

Tomcat 6, MySQL 5, 최신 MySQL 드라이버 (이전 V3가 아니라 최신 V5 드라이버)를 사용하고 있습니다.

업데이트 : 나는 평범한 수업에서 그것을 사용하기 때문에 이것은 나에게 효과가 없습니다. 나는 새로운 프로젝트를 만들고 서블릿을 추가했습니다. 데이터 소스는 서블릿에서 널이 없습니다.

도움이 되었습니까?

해결책

적어도 AppServer의 중 하나에 다음을 가져야합니다. /conf/context.xml 또는 웹 application 's /META-INF/context.xml 파일:

<Resource
    name="jdbc/MyDatabase" 
    type="javax.sql.DataSource"
    driverClassName="com.your.Driver"
    url="jdbc:your://url"
    username="foo"
    password="bar"
/>

또한 참조하십시오 http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html

그리고 WebApp의 /WEB-INF/web.xml 다음을 정의해야합니다.

<resource-env-ref>
    <resource-env-ref-name>jdbc/MyDatabase</resource-env-ref-name>
    <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
</resource-env-ref>

편집하다: 이제 코딩을 추가하기 위해 게시물을 편집했음을 알 수 있습니다. 나는 또한 당신이 사용한 것을 본다 resource-ref 대신에 resource-env-ref. 첫 번째는 외부 리소스 (읽기 : WebContainer-Managed 아님)를 말하고 두 번째는 내부 (환경) 리소스 (읽기 : WebContainer-Managed)를 나타냅니다. 교체하고보십시오.

다른 팁

Web.xml이 리소스를 정의합니까? 보세요 이 예. web.xml 또는 jdbc/mydatabase를 정의하는 코드를 게시 할 수 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top