반응형
Tomcat에서 Oracle을 사용하여 JNDI 데이터 원본 설정
Tomcat 7.0에서 JNDI에서 얻은 DataSource에서 연결을 가져오도록 할 수 없으므로 다음과 같은 오류가 발생합니다.
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of cla
ss '' for connect URL 'null'
저는 여러 가지 방법으로 의사와 다른 사람들의 제안을 따랐지만, 여전히 그것을 고칠 수 없었습니다.내 설정은 다음과 같습니다.
web.xml에서:
<resource-ref>
<description>MyDataSource</description>
<res-ref-name>jdbc/MyDataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
context.xml:
<Context>
<Resource name="jdbc/MyDataSource" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="abc" password="abc" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@123.123.123.123:1521:xe"/>
<!-- // tried both driver class names but all not work driverClassName="oracle.jdbc.driver.OracleDriver" -->
</Context>
그것도 server.xml에 넣으려고 했지만 작동하지 않았습니다.
<Resource name="jdbc/MyDataSource" auth="Container" type="javax.sql.DataSource"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@123.123.123.123:1521:xe"
servicename="MyDataSource" username="abc" password="abc"
maxActive="20" maxIdle="10" maxWait="20000"/>
<ResourceParams name="jdbc/MyDataSource">
<parameter>
<name>user</name>
<value>abc</value>
</parameter>
<parameter>
<name>password</name>
<value>abc</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
</ResourceParams>
Tomcat 7.0\lib에 클래스 12.jar와 ojdbc14.jar를 넣습니다.
누가 제게 올바른 길을 가르쳐 줄 수 있습니까?
해당 구성에 너무 많은 시간을 낭비했지만 여전히 작동할 수 없습니다.미리 감사드립니다!
존.
다음과 같이 추적 쌓기:
DS: org.apache.tomcat.dbcp.dbcp.BasicDataSource@497062
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1452)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
at DBTest.doGet(DBTest.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
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)
... 21 more
여기 ds.getConnection의 예외 코드가 있습니다.(DS를 가져오는 일반적인 방법이 아닙니다. bcoz는 WebSphere 방식과 일치시켜야 합니다.)
Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.naming.java.javaURLContextFactory");
initCtx = new InitialContext(env);
DataSource ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/MyDataSource");
System.err.println("DS: " + ds.toString());
Connection conn = ds.getConnection();
TOMCAT_HOME/conf/context.xml과 ApplicationPath/META-INF/context.xml에 리소스를 두 번 정의했다는 것을 깨달았습니다.일단 TOMCAT_HOME/conf/context.xml에서 리소스를 제거하면 모든 것이 잘 작동했습니다.
언급URL : https://stackoverflow.com/questions/8952793/setting-up-jndi-datasource-with-oracle-in-tomcat
반응형
'programing' 카테고리의 다른 글
| 빈 구조의 크기는 C에서 0이고 C++에서 1입니다. 왜죠? (0) | 2023.09.11 |
|---|---|
| $.ajax 및 JSONP. 구문 분석 오류 및 탐지되지 않은 구문 오류:예기치 않은 토큰: (0) | 2023.09.11 |
| 동시성:C/C++로 작성된 파이썬 확장자는 글로벌 인터프리터 잠금의 영향을 받습니까? (0) | 2023.09.11 |
| jQuery를 사용하여 팝업에서 입력 유형="file"에서 선택한 이미지를 미리 보는 방법은 무엇입니까? (0) | 2023.09.11 |
| 파이썬에서 문자열의 크기(길이)를 구하는 방법? (0) | 2023.09.11 |