본문 바로가기

4. 테크니컬&팁

addBatch 사용시 SQLException 특이한거

개발환경 :
웹로직 10.0 MP1
오라클 10.2.0.3

이런 오류가 떨이진다..

java.sql.SQLException: executeBatch, Exception = null
        at weblogic.jdbc.wrapper.JDBCWrapperImpl.invocationExceptionHandler(JDBCWrapperImpl.java:141)
        at weblogic.jdbc.wrapper.PreparedStatement.executeBatch(PreparedStatement.java:164)
        at com.tys.frameplus.dataplus.core.DataManager.updatePrepared(DataManager.java:836)
        at com.tys.frameplus.dataplus.core.DataManager.execute(DataManager.java:340)
        at com.tys.frameplus.dataplus.core.DataManager.execute(DataManager.java:204)
        at com.tys.frameplus.dataplus.core.DataManager.execute(DataManager.java:190)
        at com.tys.frameplus.dataplus.core.SQLProcessor.execUpdate(SQLProcessor.java:709)
        at com.tys.frameplus.dataplus.core.SQLProcessor.execute(SQLProcessor.java:342)
        at com.tys.frameplus.dataplus.core.SQLProcessor.execute(SQLProcessor.java:199)
        at com.tyli.egis.core.vi.dc.ExcelMGT.ExcelEJB.modifyAcntCodAdmn(ExcelEJB.java:429)
        at com.tyli.egis.core.vi.dc.ExcelMGT.ExcelEJB.process(ExcelEJB.java:125)
        at com.tys.frameplus.core.ejb.GenericEJB.preProcess(GenericEJB.java:127)
        at com.tyli.egis.core.vi.dc.ExcelMGT.ExcelEJB_49r0y4_EOImpl.preProcess(ExcelEJB_49r0y4_EOImpl.java:61)
        at com.tyli.egis.core.vi.dc.ExcelMGT.ExcelEJB_49r0y4_EOImpl_WLSkel.invoke(Unknown Source)
        at weblogic.rmi.internal.ServerRequest.sendReceive(ServerRequest.java:174)
        at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:335)
        at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:252)
        at com.tyli.egis.core.vi.dc.ExcelMGT.ExcelEJB_49r0y4_EOImpl_1001_WLStub.preProcess(Unknown Source)
        at com.tys.frameplus.core.invoker.RemoteEJBInvoker.invoke(RemoteEJBInvoker.java:74)
        at com.tys.frameplus.util.BizInvokerUtil.delegate(BizInvokerUtil.java:83)
        at com.tys.frameplus.util.BizBrokerUtil.callBizBroker(BizBrokerUtil.java:160)
        at com.tys.frameplus.util.BizBrokerUtil.callACBizBroker(BizBrokerUtil.java:82)
        at com.tys.frameplus.util.BizBrokerUtil.callDCBizBroker(BizBrokerUtil.java:100)
        at com.tyli.egis.core.vi.ac.ExcelMGT.ExcelEJB.importAcntCodAdmn(ExcelEJB.java:414)
        at com.tyli.egis.core.vi.ac.ExcelMGT.ExcelEJB.process(ExcelEJB.java:75)
        at com.tys.frameplus.core.ejb.GenericEJB.preProcess(GenericEJB.java:127)
        at com.tyli.egis.core.vi.ac.ExcelMGT.ExcelEJB_49r0y4_EOImpl.preProcess(ExcelEJB_49r0y4_EOImpl.java:61)
        at com.tyli.egis.core.vi.ac.ExcelMGT.ExcelEJB_49r0y4_EOImpl_WLSkel.invoke(Unknown Source)
        at weblogic.rmi.internal.ServerRequest.sendReceive(ServerRequest.java:174)
        at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:335)
        at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:252)
        at com.tyli.egis.core.vi.ac.ExcelMGT.ExcelEJB_49r0y4_EOImpl_1001_WLStub.preProcess(Unknown Source)
        at com.tys.frameplus.core.invoker.RemoteEJBInvoker.invoke(RemoteEJBInvoker.java:74)
        at com.tys.frameplus.core.BizBroker.delegate(BizBroker.java:100)
        at com.tys.frameplus.miplatform.ActionController.callBizBroker(ActionController.java:203)
        at com.tys.frameplus.miplatform.eam.MiController.processRequest(MiController.java:130)
        at com.tys.frameplus.core.GenericController.doPost(GenericController.java:62)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
        at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:226)
        at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:124)
        at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
        at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
        at com.tys.frameplus.miplatform.GenericAuthFilter.processFilter(GenericAuthFilter.java:154)
        at com.tys.frameplus.miplatform.GenericAuthFilter.doFilter(GenericAuthFilter.java:67)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3393)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at weblogic.security.service.SecurityManager.runAs(Unknown Source)
        at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2140)
        at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2046)
        at weblogic.servlet.internal.ServletRequestImpl.run(Unknown Source)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:172)

자바에서 제공하는 executeBatch 함수와 addBatch함수를 이용하여 개발하고 있는데.. (성능을 위해서..)
이런 특이한 오류가 발견되는것이 아닌가.. 음..

입력하려는 데이터는 약 1200건 정도..
데이터가 많은 양도 아닌데.. 오류가 발생하여 이상하다고 생각..
아래와 같은 것을 시도해 보았다..

1. JDBC드라이버 버전을 높은것으로 변경
오라클에 버그가 무지 많은것은 아는사람은 다 아는것.. ㅡ,.ㅡ
jdbc드라이버도 버그가 상당하다.
기본적으로 웹로직 10에서 제공하는 버전은 10.2.0.2
최신의 버전은 10.2.0.4

그래서 10.2.0.4로 업데이트를 해보았다..

동일한 증상. ㅡ,.ㅡ

뭘어떻게 하면 될까.. 모르겠다. 아웅.. 짜증나.

- 추가 09/08/10

어떤분이 해당 내용으로 질문을 하셨길래 정리해보았습니다.

우선 결론부터 말씀드리면..
답을 모르겠다입니다.ㅜㅜ

그냥 어쩌다가 해결이 되었는데....

제가 취한 조치는 아래와 같습니다.
1. 혹시 ibatis나 이런거 사용하신다면 쿼리에 줄바꿈/Tab과 같은 특수문자가 들어가는 경우가 많은데요. 이런 경우가 의심되어 모두삭제
2. 진짜 쿼리에 문제가 있는경우가 의심되더군요.. 일부만이라도 쿼리를 바꿔보세요.
3. 오라클 Function 을 사용하는 경우 . Function에서 오류가 발생했을 가능성.
4. parameter를 넣어주는데 null이 들어가는경우.. 혹은 parameter갯수나 위치가 바뀐경우.

위와 같이 저는 추축하고 있습니다만..
어찌어찌하다보니 해결이 되었습니다. 저는 4번을 강력히 의심하고 있답니다. ^^

답이 되었는지.. 도움이 되었는지 모르겠네요. ^^