말도 안되는 Exception이 발생하는데 대체 뭘까요;;
- ?
-
?
CUBRID jdbc 확장 인터페이스를 사용하기 위해서는 CUBRIDConnection 객체로 연결을 해야 됩니다.
Connection conn = ((DataSource)((Context)new InitialContext()).lookup("java:/comp/env/jdbc/cubrid")).getConnection();
부분을 아래와 같이 변경하여 테스트 부탁드립니다.
Connection conn = DriverManager.getConnection(url,userid,password);
-
?
올려주신 코드는 커넥션풀을 사용하지 않고 DB에 직접연결하는 코드인데요?
그걸로 하게 되면 자원 사용량이 늘어나는데요..
테스트 결과 가능하긴 하겠죠 (당연히 되겠죠... 레퍼가 아니라 해당 드라이버로 직접 생성하니까요)
하지만 성능상의 이유로 DBCP를 사용해야 하는 상황입니다.
올려주신 코드는 DBCP를 사용하지 않는 코드입니다.
-
?
http://dev.naver.com/projects/cubrid/issue/16944
링크에 글을 등록하신 분과 동일하신 분인 것 같습니다.
현 게시글도 위 게시물과 동일한 이유라고 보시면 될 것 같습니다.
-
?
답변과 관심은 정말로 감사드립니다.
동일한 이유가 맞는데요. 제시해주신 방법은 DBCP를 사용하지 않는 방법입니다.
seongjoon님은 잘못된 방법을 제시해 주셨네요.
올려주신 네이버 개발자 센터 링크상에 보시면 가장 마지막에 강철규님이 getDelegate()메소드를 사용해보란 말씀을 하십니다.
그리고 바로 그 방법이 이 글에 본문에서 시도한 방법이구요.
바로 그게 안되는 상황입니다. seongjoon님은 이해를 잘못하신것 같네요.
-
?
드라이버 문제로 이런 현상이 나타날것 같지는 않습니다.
dps2.getClass().getName() 으로 해당 클래스 이름을 찍어서 확인해 보는것이 좋을것 같습니다.
해당 object에 대해 toString()을 호출할때와 클래스이름이 다르게 보일수는 있습니다.
-
?
네.. 이번엔 jsp에서 테스트 해봤습니다.
<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.sql.*,javax.sql.*,javax.naming.*,org.apache.commons.dbcp.*,cubrid.jdbc.driver.*" pageEncoding="UTF-8" %>
<%
org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(jeemin.home.core.JHInfo.class);
LOG.debug("시작");
try{
Connection conn = ((DataSource)((Context)new InitialContext()).lookup("java:/comp/env/jdbc/cubrid")).getConnection();
LOG.debug("conn.toString : " + conn.toString());
LOG.debug("conn.getClass.getName : " + conn.getClass().getName());
PreparedStatement ps = conn.prepareStatement("INSERT INTO HM_IP(IP_IP) VALUES(?)");
LOG.debug("ps.toString : " + ps.toString());
LOG.debug("ps.getClass.getName : " + ps.getClass().getName());
Statement dps1 = ((DelegatingPreparedStatement)ps).getDelegate();
LOG.debug("dps1.toString : " + dps1.toString());
LOG.debug("dps1.getClass.getName : " + dps1.getClass().getName());
Statement dps2 = ((DelegatingPreparedStatement)dps1).getDelegate();
LOG.debug("dps2.toString : " + dps2.toString());
LOG.debug("dps2.getClass.getName : " + dps2.getClass().getName());
try{
LOG.debug("캐스팅 하려는 클래스명 : " + CUBRIDPreparedStatement.class.getName());
CUBRIDPreparedStatement cps = (CUBRIDPreparedStatement)dps2;
}catch(Exception e){
LOG.debug("말도 안되는 오류 발생.", e);
}
ps.close();
conn.close();
}catch(Exception e){
LOG.debug("여기선 오류가 발생하지 않음.", e);
}
%>
-------------------------------------------------------------------------------------------------------------------
2011.11.22 13:59:26.106 DEBUG org.apache.jsp.test_jsp._jspService:52 시작
2011.11.22 13:59:26.108 DEBUG org.apache.jsp.test_jsp._jspService:57 conn.toString : org.apache.commons.dbcp.PoolableConnection@317b1d64
2011.11.22 13:59:26.108 DEBUG org.apache.jsp.test_jsp._jspService:58 conn.getClass.getName : org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper
2011.11.22 13:59:26.110 DEBUG org.apache.jsp.test_jsp._jspService:62 ps.toString : org.apache.commons.dbcp.DelegatingPreparedStatement@9c6a99d
2011.11.22 13:59:26.110 DEBUG org.apache.jsp.test_jsp._jspService:63 ps.getClass.getName : org.apache.commons.dbcp.DelegatingPreparedStatement
2011.11.22 13:59:26.111 DEBUG org.apache.jsp.test_jsp._jspService:67 dps1.toString : org.apache.commons.dbcp.PoolablePreparedStatement@9c6a99d
2011.11.22 13:59:26.111 DEBUG org.apache.jsp.test_jsp._jspService:68 dps1.getClass.getName : org.apache.commons.dbcp.PoolablePreparedStatement
2011.11.22 13:59:26.111 DEBUG org.apache.jsp.test_jsp._jspService:72 dps2.toString : cubrid.jdbc.driver.CUBRIDPreparedStatement@9c6a99d
2011.11.22 13:59:26.111 DEBUG org.apache.jsp.test_jsp._jspService:73 dps2.getClass.getName : cubrid.jdbc.driver.CUBRIDPreparedStatement
2011.11.22 13:59:26.111 DEBUG org.apache.jsp.test_jsp._jspService:77 캐스팅 하려는 클래스명 : cubrid.jdbc.driver.CUBRIDPreparedStatement
2011.11.22 13:59:26.112 DEBUG org.apache.jsp.test_jsp._jspService:81 말도 안되는 오류 발생.
java.lang.ClassCastException: cubrid.jdbc.driver.CUBRIDPreparedStatement cannot be cast to cubrid.jdbc.driver.CUBRIDPreparedStatement
at org.apache.jsp.test_jsp._jspService(test_jsp.java:79)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:775)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:704)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:897)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:636)
-
?
이거... 언제쯤 해결될까요? 지금 계속 dbcp기능 끄고 사용중인데요....
안녕하세요.
큐브리드에 관심을 가져 주셔서 감사합니다. 문의하신 내용에 대하여 빠른 시일 내에 확인하여 알려드리도록 하겠습니다.