You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ibatis.apache.org by "Sumeet Gupta (JIRA)" <ib...@incubator.apache.org> on 2007/05/02 09:13:15 UTC

[jira] Created: (IBATIS-424) java.sql.SQLException : Protocol violation

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.


[jira] Closed: (IBATIS-424) java.sql.SQLException : Protocol violation

Posted by "Larry Meadors (JIRA)" <ib...@incubator.apache.org>.
     [ https://issues.apache.org/jira/browse/IBATIS-424?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Larry Meadors closed IBATIS-424.
--------------------------------

    Resolution: Invalid

Please do not post support requests to JIRA.

Use the mailing lists instead:

* http://ibatis.apache.org/mailinglists.html

Also, be sure to read the developers guide (available in several languages) before posting:

For Java - http://ibatis.apache.org/javadownloads.html

For C# - http://ibatis.apache.org/dotnetdownloads.cgi

If you do not want to subscribe, you can use the following forums instead:

For Java: http://www.nabble.com/iBATIS---User---Java-f370.html

For C#: http://www.nabble.com/iBATIS---User---Cs-f369.html


> 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.