You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-java@ibatis.apache.org by "Kezerashvili, Denis" <De...@gs.com> on 2007/12/13 19:41:31 UTC

iBATIS with DB2 stored procedure call problem

> We are using iBATIS as a persistence layer running on top of DB2.
> We've ran into a problem executing stored procedure.
> 
> The following works:
> <procedure id="user.deleteById" parameterClass="DaoUserId">		
> 		{call PERMIT.PERMIT_DELETE_USER_BY_ID_SP(#id#,
> #updateId#)} 
> </procedure>
> 
> But this does not:
> <procedure id="user.deleteById" parameterClass="DaoUserId">		
> 		{call PERMIT_DELETE_USER_BY_ID_SP(#id#, #updateId#)} 
> </procedure>
> 
> The error reported is that stored procedure named
> PERMIT_DELETE_USER_BY_ID_SP cannot be found.
> 
> Basically we are forced to specify the schema name for the stored
> procedure. The schema name is set up in the config file and we do not
> have to specify it for any regular <insert>, <update>, <delete>
> elements.
> 
> Have anyone seen this problem and knows how to solve it? We have
> multiple schemas used by different developers, so hard coding it is
> not an option.
> 
> Thank you in advance. 

RE: iBATIS with DB2 stored procedure call problem

Posted by "Kezerashvili, Denis" <De...@gs.com>.
Thank you! That solves the problem. I really appreciate your help.


________________________________

	From: Stephen Boyd [mailto:swboyd@gmail.com] 
	Sent: Saturday, December 15, 2007 9:00 AM
	To: user-java@ibatis.apache.org
	Subject: Re: iBATIS with DB2 stored procedure call problem
	
	
	You need to set currentFunctionPath=PERMIT on the datasource.
It is a custom property that can be set on the jdbc url.  For example,
	
	
jdbc:db2://host:port/dbname:currentFunctionPath=PERMIT;currentSchema=PER
MIT;
	
	If you are running in websphere, setting this can be done in the
custom properties of the datasource.
	
	
	
	On Dec 14, 2007 2:00 AM, Abhigyan Agrawal1 <
abhigyan_agrawal@in.ibm.com <ma...@in.ibm.com> >
wrote:
	


		Are you sure that the user name you are providing in
config file has access to the schema? I tried simulating the problem but
it is working without specifying in the schema name. May be you can send
what config you are using. 
		
		Cheers,
		Abhigyan Agrawal
		
		
		
		
		
"Kezerashvili, Denis" <De...@gs.com> 

14/12/2007 00:11 

Please respond to
user-java@ibatis.apache.org

To
<us...@ibatis.apache.org> 	
cc
	
Subject
iBATIS with DB2 stored procedure call problem	

		





		We are using iBATIS as a persistence layer running on
top of DB2. 
		We've ran into a problem executing stored procedure. 

		The following works: 
		<procedure id="user.deleteById"
parameterClass="DaoUserId" >             
		               {call
PERMIT.PERMIT_DELETE_USER_BY_ID_SP(#id#, #updateId#)} 
		</procedure> 

		But this does not: 
		<procedure id="user.deleteById"
parameterClass="DaoUserId" >             
		               {call PERMIT_DELETE_USER_BY_ID_SP(#id#,
#updateId#)} 
		</procedure> 

		The error reported is that stored procedure named
PERMIT_DELETE_USER_BY_ID_SP cannot be found. 

		Basically we are forced to specify the schema name for
the stored procedure. The schema name is set up in the config file and
we do not have to specify it for any regular <insert>, <update>,
<delete> elements. 

		Have anyone seen this problem and knows how to solve it?
We have multiple schemas used by different developers, so hard coding it
is not an option. 

		Thank you in advance. 

		



Re: iBATIS with DB2 stored procedure call problem

Posted by Stephen Boyd <sw...@gmail.com>.
You need to set currentFunctionPath=PERMIT on the datasource.  It is a
custom property that can be set on the jdbc url.  For example,

jdbc:db2://host:port/dbname:currentFunctionPath=PERMIT;currentSchema=PERMIT;

If you are running in websphere, setting this can be done in the custom
properties of the datasource.


On Dec 14, 2007 2:00 AM, Abhigyan Agrawal1 <ab...@in.ibm.com>
wrote:

>
> Are you sure that the user name you are providing in config file has
> access to the schema? I tried simulating the problem but it is working
> without specifying in the schema name. May be you can send what config you
> are using.
>
> Cheers,
> Abhigyan Agrawal
>
>
>
>
>  *"Kezerashvili, Denis" <De...@gs.com>*
>
> 14/12/2007 00:11
>  Please respond to
> user-java@ibatis.apache.org
>
>   To
> <us...@ibatis.apache.org>  cc
>   Subject
> iBATIS with DB2 stored procedure call problem
>
>
>
>
> We are using iBATIS as a persistence layer running on top of DB2.
> We've ran into a problem executing stored procedure.
>
> The following works:
> <procedure id="user.deleteById" parameterClass="DaoUserId">
>                {call* PERMIT.*PERMIT_DELETE_USER_BY_ID_SP(#id#,
> #updateId#)}
> </procedure>
>
> But this does not:
> <procedure id="user.deleteById" parameterClass="DaoUserId">
>                {call PERMIT_DELETE_USER_BY_ID_SP(#id#, #updateId#)}
> </procedure>
>
> The error reported is that stored procedure named PERMIT_DELETE_USER_BY_ID_SP
> cannot be found.
>
> Basically we are forced to specify the schema name for the stored
> procedure. The schema name is set up in the config file and we do not have
> to specify it for any regular <insert>, <update>, <delete> elements.
>
> Have anyone seen this problem and knows how to solve it? We have multiple
> schemas used by different developers, so hard coding it is not an option.
>
> Thank you in advance.
>
>

RE: iBATIS with DB2 stored procedure call problem

Posted by "Kezerashvili, Denis" <De...@gs.com>.
Well, it seems to work for regular SQL. I do not need to specify schema
name for the tables I am hitting. Here are the config file as well as
properties file that it uses.
 
TestApplicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="

http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd

http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd

http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

<!-- Load up two properties file for DB settings,

and make the properties available in this file.

-->

<bean id="properties-config"

class="org.springframework.beans.factory.config.PropertyPlaceholderConfi
gurer">

<property name="ignoreResourceNotFound" value="true" />

<property name="locations">

<list>

<!-- shared values, and values used by the

integration build -->

<value>classpath:standard/database.properties</value>

</list>

</property>

</bean>

<context:annotation-config />

<!-- not needed if test cases extend
AbstractTransactionalJUnit4SpringContextTests

<tx:annotation-driven />

-->

<bean id="managementService"

class="com.gs.security.permit.admin.service.impl.PermitManagementService
">

<property name="applicationDao">

<ref local="applicationDao" />

</property>

<property name="attributeTypeDao">

<ref local="attributeTypeDao" />

</property>

<property name="applToPolicyDomainMappingDao">

<ref local="applToPolicyDomainMappingDao" />

</property>

<property name="policyDomainDao">

<ref local="policyDomainDao" />

</property>

<property name="policyDomainInclusionDao">

<ref local="policyDomainInclusionDao" />

</property>

</bean>

<bean id="dataSource"

class="org.springframework.jdbc.datasource.SingleConnectionDataSource">

<property name="driverClassName">

<value>com.ibm.db2.jcc.DB2Driver</value>

</property>

<property name="url">

<value>

jdbc:db2://${database.host}:${database.port}/${database.dbname}:currentS
chema=${database.schema};

</value>

</property>

<property name="username">

<value>${username}</value>

</property>

<property name="password">

<value>${password}</value>

</property>

</bean>

<bean id="jdbcExceptionTranslator"

class="org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslat
or">

<property name="dataSource">

<ref bean="dataSource" />

</property>

</bean>

<bean id="sqlMapClient"

class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">

<property name="configLocation">

<value>

classpath:com/gs/security/permit/admin/service/internal/impl/sqlmap/maps
/sqlmap-config.xml

</value>

</property>

<property name="dataSource">

<ref local="dataSource" />

</property>

</bean>

<bean id="actionDao"

class="com.gs.security.permit.admin.service.internal.impl.sqlmap.SqlMapA
ctionDao">

<property name="sqlMapClient">

<ref local="sqlMapClient" />

</property>

</bean>

<bean id="applicationDao"

class="com.gs.security.permit.admin.service.internal.impl.sqlmap.SqlMapA
pplicationDao">

<property name="sqlMapClient">

<ref local="sqlMapClient" />

</property>

</bean>

<bean id="applToPolicyDomainMappingDao"

class="com.gs.security.permit.admin.service.internal.impl.sqlmap.SqlMapA
pplToPolicyDomainMappingDao">

<property name="sqlMapClient">

<ref local="sqlMapClient" />

</property>

</bean>

<bean id="attributeTypeDao"

class="com.gs.security.permit.admin.service.internal.impl.sqlmap.SqlMapA
ttributeTypeDao">

<property name="sqlMapClient">

<ref local="sqlMapClient" />

</property>

</bean>

<bean id="policyDomainDao"

class="com.gs.security.permit.admin.service.internal.impl.sqlmap.SqlMapP
olicyDomainDao">

<property name="sqlMapClient">

<ref local="sqlMapClient" />

</property>

</bean>

<bean id="policyDomainInclusionDao"

class="com.gs.security.permit.admin.service.internal.impl.sqlmap.SqlMapP
olicyDomainInclusionDao">

<property name="sqlMapClient">

<ref local="sqlMapClient" />

</property>

</bean>

<bean id="userDao"

class="com.gs.security.permit.admin.service.internal.impl.sqlmap.SqlMapU
serDao">

<property name="sqlMapClient">

<ref local="sqlMapClient" />

</property>

</bean>

<bean id="userService"

class="com.gs.security.permit.admin.service.impl.PermitUserService">

<property name="userDao">

<ref local="userDao" />

</property>

</bean>

<bean id="transactionManager"

class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
>

<property name="dataSource">

<ref local="dataSource" />

</property>

</bean>

</beans>

 

database.properties:

# Database settings. This file is used by the main code (via Spring
Context.xml),

# as well as by the build.xml

database.host=cdigdss05

database.port=61700

database.dbname=ncrm01

database.schema=PERMIT

database.username=*****

database.password=*****

# pending update of the context.xml:

host=${database.host}

port=${database.port}

server=${database.dbname}

schema=${database.schema}

username=${database.username}

password=${database.password}


________________________________

	From: Abhigyan Agrawal1 [mailto:abhigyan_agrawal@in.ibm.com] 
	Sent: Friday, December 14, 2007 2:00 AM
	To: user-java@ibatis.apache.org
	Subject: Re: iBATIS with DB2 stored procedure call problem
	
	

	Are you sure that the user name you are providing in config file
has access to the schema? I tried simulating the problem but it is
working without specifying in the schema name. May be you can send what
config you are using. 
	
	Cheers,
	Abhigyan Agrawal
	
	
	
	
	
"Kezerashvili, Denis" <De...@gs.com> 

14/12/2007 00:11 
Please respond to
user-java@ibatis.apache.org


To
<us...@ibatis.apache.org> 
cc
Subject
iBATIS with DB2 stored procedure call problem

	





	We are using iBATIS as a persistence layer running on top of
DB2. 
	We've ran into a problem executing stored procedure. 

	The following works: 
	<procedure id="user.deleteById" parameterClass="DaoUserId">

	               {call PERMIT.PERMIT_DELETE_USER_BY_ID_SP(#id#,
#updateId#)} 
	</procedure> 

	But this does not: 
	<procedure id="user.deleteById" parameterClass="DaoUserId">

	               {call PERMIT_DELETE_USER_BY_ID_SP(#id#,
#updateId#)} 
	</procedure> 

	The error reported is that stored procedure named
PERMIT_DELETE_USER_BY_ID_SP cannot be found. 

	Basically we are forced to specify the schema name for the
stored procedure. The schema name is set up in the config file and we do
not have to specify it for any regular <insert>, <update>, <delete>
elements. 

	Have anyone seen this problem and knows how to solve it? We have
multiple schemas used by different developers, so hard coding it is not
an option. 

	Thank you in advance. 

	


Re: iBATIS with DB2 stored procedure call problem

Posted by Abhigyan Agrawal1 <ab...@in.ibm.com>.
Are you sure that the user name you are providing in config file has 
access to the schema? I tried simulating the problem but it is working 
without specifying in the schema name. May be you can send what config you 
are using.

Cheers,
Abhigyan Agrawal





"Kezerashvili, Denis" <De...@gs.com> 
14/12/2007 00:11
Please respond to
user-java@ibatis.apache.org


To
<us...@ibatis.apache.org>
cc

Subject
iBATIS with DB2 stored procedure call problem







We are using iBATIS as a persistence layer running on top of DB2. 
We've ran into a problem executing stored procedure. 
The following works: 
<procedure id="user.deleteById" parameterClass="DaoUserId"> 
                {call PERMIT.PERMIT_DELETE_USER_BY_ID_SP(#id#, 
#updateId#)} 
</procedure> 
But this does not: 
<procedure id="user.deleteById" parameterClass="DaoUserId"> 
                {call PERMIT_DELETE_USER_BY_ID_SP(#id#, #updateId#)} 
</procedure> 
The error reported is that stored procedure named 
PERMIT_DELETE_USER_BY_ID_SP cannot be found. 
Basically we are forced to specify the schema name for the stored 
procedure. The schema name is set up in the config file and we do not have 
to specify it for any regular <insert>, <update>, <delete> elements.
Have anyone seen this problem and knows how to solve it? We have multiple 
schemas used by different developers, so hard coding it is not an option.
Thank you in advance.