java.sql.SQLException : Protocol violation
------------------------------------------
Key: IBATIS-424
URL: https://issues.apache.org/jira/browse/IBATIS-424
Project: iBatis for Java
Issue Type: Task
Components: DAO, SQL Maps
Affects Versions: 2.3.0
Environment: Windows XP, WSAD 5.1.2, Oracle 10.1.0.4.0 database and
10.1.0.2.0 Oracle-JDBC driver.
Reporter: Sumeet Gupta
I am using a simple iBatis call to a stored procedure, which takes two integers
as IN parameters and a REF CURSOR as an OUT parameter.
The REF CURSOR contains a single column, which is of type TIMESTAMP.
The SQL map configuration file is like:-
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"C:/iBATIS/lib/sql-map-config-2.dtd">
<sqlMapConfig>
<transactionManager type="JDBC" commitRequired="false">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="JDBC.ConnectionURL" value="MY_URL"/>
<property name="JDBC.Username" value="MY_USER_ID"/>
<property name="JDBC.Password" value="MY_PASSWORD"/>
</dataSource>
</transactionManager>
<sqlMap resource="com/fmr/fims/ibatis/data/MyMap.xml"/>
</sqlMapConfig>
The SQL Map file is something like-
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"C:/iBATIS/lib/sql-map-2.dtd">
<sqlMap namespace="MyMap">
<resultMap id="ResultData" class="com.fmr.fims.ibatis.domain.TestResult">
<result property="time" column="TIMESTAMP" />
</resultMap>
<parameterMap id="TEST_PARAM_MAP" class="map">
<parameter property="MAX" jdbcType="NUMBER" mode="IN" />
<parameter property="MIN" jdbcType="NUMBER" mode="IN" />
<parameter property="RESULT" jdbcType="ORACLECURSOR" mode="OUT" />
</parameterMap>
<procedure id="SP_TEST" parameterMap="TEST_PARAM_MAP" resultMap="ResultData">
{ call FUTURES_ACTIONS_PKG.SP_TEST(?,?,?) }
</procedure>
</sqlMap>
The following is my Java code's snippet:-
String resource =
"com/fmr/fims/ibatis/data/SqlMapConfig.xml";
Reader reader = Resources.getResourceAsReader(resource);
System.out.println("Successfully read the resource
file");
SqlMapClient sqlMap =
SqlMapClientBuilder.buildSqlMapClient(reader);
System.out.println("Before calling the query");
Map paramMap = new HashMap(3);
paramMap.put("MAX", new Integer(26));
paramMap.put("MIN", new Integer(24));
paramMap.put("RESULT","");
sqlMap.queryForObject("SP_TEST", paramMap);
Map resultMap = (Map) paramMap.get("RESULT");
The Oracle stored proc simply returns a cursor, which contains a specific
column values (using SELECT statement), given a range (MAX and MIN as
parameters).
This is the error that I am getting:-
Successfully read the resource file
Before calling the query
java.sql.SQLException: Protocol violation
at
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
at
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:162)
at oracle.jdbc.driver.DatabaseError.check_error(DatabaseError.java:885)
at oracle.jdbc.driver.T4C7Ocommoncall.receive(T4C7Ocommoncall.java:133)
at oracle.jdbc.driver.T4CConnection.do_rollback(T4CConnection.java:465)
at
oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.java:997)
at
com.ibatis.common.jdbc.SimpleDataSource.pushConnection(SimpleDataSource.java:527)
at
com.ibatis.common.jdbc.SimpleDataSource.access$100(SimpleDataSource.java:52)
at
com.ibatis.common.jdbc.SimpleDataSource$SimplePooledConnection.invoke(SimpleDataSource.java:954)
at $Proxy0.close(Unknown Source)
at
com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransaction.close(JdbcTransaction.java:81)
at
com.ibatis.sqlmap.engine.transaction.TransactionManager.end(TransactionManager.java:111)
at
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.endTransaction(SqlMapExecutorDelegate.java:782)
at
com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.endTransaction(SqlMapSessionImpl.java:176)
at
com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.endTransaction(SqlMapClientImpl.java:154)
at
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.autoEndTransaction(SqlMapExecutorDelegate.java:883)
at
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:573)
at
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:541)
at
com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForObject(SqlMapSessionImpl.java:106)
at
com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.queryForObject(SqlMapClientImpl.java:83)
Is this an environment issue?
Please help. I read that this may be caused due to a stale connection. However,
ibatis is handling the connection related stuff for me. What do i need to do
next?
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.