• Cannot use java.sql.Connection.createArrayOf in a managed bean

    By Alex L Rasmussen 1 decade ago

    I am trying to use a DB2 stored procedure in a managed bean.

    The following code works in a Java agent:

    1.     Class.forName("com.ibm.db2.jcc.DB2Driver");
    2.     Connection con = DriverManager.getConnection("jdbc:db2://10.10.10.10:50001/MYDB", "userid", "password");
    3.     CallableStatement cs1 = con.prepareCall("CALL V1.MYPROC(?)");
    4.     Integer[] myArr = new Integer[2];
    5.     myArr[0] = 1;
    6.     myArr[1] = 2;
    7.     cs1.setArray(1, con.createArrayOf("INTEGER", myArr));
    8.     cs1.execute();

    If I create similar code in a managed bean and utilize the ExtLib connection pool, the code looks like this:

    1.     InitialContext ctx = new InitialContext();
    2.     DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/db2");
    3.     Connection con = ds.getConnection();
    4.     CallableStatement cs1 = con.prepareCall("CALL V1.MYPROC(?)");
    5.     Integer[] myArr = new Integer[2];
    6.     myArr[0] = 1;
    7.     myArr[1] = 2;
    8.     cs1.setArray(1, con.createArrayOf("INTEGER", myArr));   <-- FAILS
    9.     cs1.execute();

    In the managed bean, line 8 fails with java.lang.AbstractMethodError: java/sql/Connection.createArrayOf(Ljava/lang/String;[Ljava/lang/Object;) appearing in error-log-0.xml

    Generally, this error occurs if the JDBC driver is not a Type 4 driver running Java version 5 or 6. Both the agent and the managed bean reports Java version 1.6.0 and JDBC version 4.13 (IBM Data Server Driver for JDBC and SQLJ).

    The connection pool works fine for other purposes such as con.PrepareStatement etc.

    • Update: Code commented out

      By Alex L Rasmussen 1 decade ago

      I checked the source code included in the download. In the file JdbcPoolConnection.java all code pertaining to JDBC 4.0 is commented out.

      Is this an error or is there a reason this is not included?

      Thanks

      • Known issue

        By Philippe Riand 1 decade ago

        we currently have to compile the extlib with JRE 1.5 and thus the JDBC4 methods cannot be implemented. I hope that we can move to JRE 1.6 soon. But this is not the case for all the 853 targets (ex: Mac Client)

    • Could you post whole exception stack?

      By Andrejus Chaliapinas 1 decade ago

      Hi Alex,

      Could you post whole exception stack trace you're getting in managed bean case?

      • Trace

        By Alex L Rasmussen 1 decade ago

        Here we go:

         


            
                
                    SEVERE
                

            

            
                com.ibm.designer.runtime.domino.adapter.LCDEnvironment
            

            
                doService
            

            
                javax.servlet.ServletException: java.lang.AbstractMethodError: java/sql/Connection.createArrayOf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Array;&#xA;&#x9;at com.ibm.xsp.webapp.FacesServlet.handleError(FacesServlet.java:619)&#xA;&#x9;at com.ibm.xsp.webapp.FacesServlet.renderErrorPage(FacesServlet.java:453)&#xA;&#x9;at com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:183)&#xA;&#x9;at com.ibm.xsp.webapp.FacesServletEx.service(FacesServletEx.java:137)&#xA;&#x9;at com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103)&#xA;&#x9;at com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:576)&#xA;&#x9;at com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1267)&#xA;&#x9;at com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:847)&#xA;&#x9;at com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:796)&#xA;&#x9;a
                t com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:565)&#xA;&#x9;at com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1251)&#xA;&#x9;at com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:598)&#xA;&#x9;at com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:421)&#xA;&#x9;at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:341)&#xA;&#x9;at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:297)&#xA;&#x9;at com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272)&#xA;Caused by: java.lang.AbstractMethodError: java/sql/Connection.createArrayOf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/sql/Array;&#xA;&#x9;at com.acme.Rocket.getJdbcVersion(ViewControl.java:126)&#xA;&#x9;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&#xA;&#x9;at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMetho
                dAccessorImpl.java:60)&#xA;&#x9;at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)&#xA;&#x9;at java.lang.reflect.Method.invoke(Method.java:611)&#xA;&#x9;at com.ibm.jscript.types.JavaAccessObject.call(JavaAccessObject.java:321)&#xA;&#x9;at com.ibm.jscript.types.FBSObject.call(FBSObject.java:161)&#xA;&#x9;at com.ibm.jscript.ASTTree.ASTCall.interpret(ASTCall.java:175)&#xA;&#x9;at com.ibm.jscript.ASTTree.ASTProgram.interpret(ASTProgram.java:119)&#xA;&#x9;at com.ibm.jscript.ASTTree.ASTProgram.interpretEx(ASTProgram.java:139)&#xA;&#x9;at com.ibm.jscript.JSExpression._interpretExpression(JSExpression.java:435)&#xA;&#x9;at com.ibm.jscript.JSExpression.access$1(JSExpression.java:424)&#xA;&#x9;at com.ibm.jscript.JSExpression$2.run(JSExpression.java:414)&#xA;&#x9;at java.security.AccessController.doPrivileged(AccessController.java:284)&#xA;&#x9;at com.ibm.jscript.JSExpression.interpretExpression(JSExpression.java:410)&#xA;&#x9;at com.ibm.jscript.JSExpression.evaluateValue(JSExpressio
                n.java:251)&#xA;&#x9;at com.ibm.jscript.JSExpression.evaluateValue(JSExpression.java:234)&#xA;&#x9;at com.ibm.xsp.javascript.JavaScriptInterpreter.interpret(JavaScriptInterpreter.java:221)&#xA;&#x9;at com.ibm.xsp.javascript.JavaScriptInterpreter.interpret(JavaScriptInterpreter.java:193)&#xA;&#x9;at com.ibm.xsp.binding.javascript.JavaScriptValueBinding.getValue(JavaScriptValueBinding.java:78)&#xA;&#x9;at javax.faces.component.UIOutput.getValue(UIOutput.java:159)&#xA;&#x9;at com.ibm.xsp.util.FacesUtil.convertValue(FacesUtil.java:1120)&#xA;&#x9;at com.ibm.xsp.renderkit.html_basic.OutputTextRenderer.encodeEnd(OutputTextRenderer.java:97)&#xA;&#x9;at com.ibm.xsp.renderkit.ReadOnlyAdapterRenderer.encodeEnd(ReadOnlyAdapterRenderer.java:180)&#xA;&#x9;at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:1005)&#xA;&#x9;at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:856)&#xA;&#x9;at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:851)&#xA;&#x9;at com.ibm.xsp.util.FacesUtil.render
                Component(FacesUtil.java:851)&#xA;&#x9;at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:851)&#xA;&#x9;at com.ibm.xsp.component.UIViewRootEx._renderView(UIViewRootEx.java:1317)&#xA;&#x9;at com.ibm.xsp.component.UIViewRootEx.renderView(UIViewRootEx.java:1255)&#xA;&#x9;at com.ibm.xsp.application.ViewHandlerExImpl.doRender(ViewHandlerExImpl.java:641)&#xA;&#x9;at com.ibm.xsp.application.ViewHandlerExImpl._renderView(ViewHandlerExImpl.java:320)&#xA;&#x9;at com.ibm.xsp.application.ViewHandlerExImpl.renderView(ViewHandlerExImpl.java:335)&#xA;&#x9;at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:103)&#xA;&#x9;at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:210)&#xA;&#x9;at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:120)&#xA;&#x9;at com.ibm.xsp.controller.FacesControllerImpl.render(FacesControllerImpl.java:264)&#xA;&#x9;at com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:248)&#xA;&#x9;at com.ibm.xsp.webapp.FacesServletEx.servi
                ceView(FacesServletEx.java:200)&#xA;&#x9;at com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:160)&#xA;&#x9;... 13 more&#xA;