ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Nicky Jha <nicky....@jpmchase.com>
Subject Need support for Dynamic procedure invocation
Date Fri, 14 May 2010 09:12:49 GMT
Hi Team,

I am having hard time resolving following issue.Please help.
We are using Ibatis 2.X.
In our application we want capability to invoke stored procedure by reading it from property
xml file.We provide procedure name parameters, parameters type to  property xml file.
Now from this xml file I have created one dynamic procedure string like procedureName(#stringVal1#,#stringVal2#,#stringVal3#,#intVal1#,#byteVal1#).
Now I want to call this procedure from Ibatis SQL mapping XML like this

<procedure id="executeCopyProcs"  parameterClass="com.jpmorgan.pyramid.pyrsyst.configure.ProcParameterMapper">
{call $procedureName$ }

</procedure>

Please refer below for ProcParameterMapper class. Now as soon as iBatis sees  $procedureName$,
it replaces it with say (#stringVal1#,#stringVal2#,#stringVal3#,#intVal1#,#byteVal1#) but
it does not replace the placeHolder(#), it passes on this as it is.Which is a issue.

If we type procedureName(#stringVal1#,#stringVal2#,#stringVal3#,#intVal1#,#byteVal1) directly
into SQL mapping XML, it replaces place holder, but with string substitution , it does not
work.We can't type directly into mapping xML, as this string is composed at run time.Also
dynamic tags are not of help, as logic to create (#stringVal1#,#stringVal2#,#stringVal3#,#intVal1#,#byteVal1#)
complex procedure with different types of parameter can't be written in mapping XML.At least
I am unable to do.

I am really struck.Please suggest us the best way to deal with it.






package com.jpmorgan.pyramid.pyrsyst.configure;

import java.lang.reflect.Field;

public class ProcParameterMapper {

      StringBuffer procedureName = new StringBuffer("");
      boolean firstParam = true;
      boolean lastParam = false;

      String stringVal1;
      String stringVal2;
      String stringVal3;
      String stringVal4;
      String stringVal5;
      String stringVal6;
      String stringVal7;
      String stringVal8;
      String stringVal9;
      String stringVal10;

      int intVal1;
      int intVal2;
      int intVal3;
      int intVal4;
      int intVal5;
      int intVal6;
      int intVal7;
      int intVal8;
      int intVal9;
      int intVal10;

      byte byteVal1;
      byte byteVal2;
      byte byteVal3;
      byte byteVal4;
      byte byteVal5;

      public void setStringVal(String value, int count,String jdbcType) throws ConfigureException
{

            Field[] field = ProcParameterMapper.class.getDeclaredFields();

            for (int i = 0; i < field.length; i++) {
                  try {
                        if (field[i].getName().endsWith(String.valueOf(count))
                                    && ("String")
                                                .equals(field[i].getType().getSimpleName()))
{
                              field[i].set(this, value);
                              if (firstParam) {
                                    procedureName.append("(#" + field[i].getName()+"#");
                                    firstParam = false;
                              } else if (lastParam) {
                                    procedureName.append(",#" + field[i].getName() +"#)");
                              } else {
                                    procedureName.append(",#" + field[i].getName()+"#");
                              }
                              break;

                        }
                  } catch (Exception e) {
                        throw new ConfigureException(
                                    "Exception setting String value in paramMapper"
                                                + e.getStackTrace());
                  }

            }

      }

      public void setIntVal(int value, int count,String jdbcType) throws ConfigureException
{

            Field[] field = ProcParameterMapper.class.getDeclaredFields();

            for (int i = 0; i < field.length; i++) {
                  try {
                        if (field[i].getName().endsWith(String.valueOf(count))
                                    && ("int").equals(field[i].getType().getSimpleName()))
{

                              field[i].set(this, value);
                              if (firstParam) {
                                    procedureName.append("(#" + field[i].getName()+"#");
                                    firstParam = false;
                              } else if (lastParam) {
                                    procedureName.append(",#" + field[i].getName() +"#)");
                              } else {
                                    procedureName.append(",#" + field[i].getName()+"#");
                              }
                              break;
                        }
                  } catch (Exception e) {
                        throw new ConfigureException(
                                    "Exception setting int value in paramMapper"
                                                + e.getStackTrace());
                  }

            }

      }

      public void setByteVal(Byte value, int count,String jdbcType) throws ConfigureException
{

            Field[] field = ProcParameterMapper.class.getDeclaredFields();

            for (int i = 0; i < field.length; i++) {
                  try {
                        if (field[i].getName().endsWith(String.valueOf(count))
                                    && ("byte").equals(field[i].getType().getSimpleName()))
{

                              field[i].set(this, value);
                              if (firstParam) {
                                    procedureName.append("(#" + field[i].getName()+"#");
                                    firstParam = false;
                              } else if (lastParam) {
                                    procedureName.append(",#" + field[i].getName() + "#)");
                              } else {
                                    procedureName.append(",#" + field[i].getName()+"#");
                              }
                              break;
                        }
                  } catch (Exception e) {
                        throw new ConfigureException(
                                    "Exception setting byte value in paramMapper"
                                                + e.getStackTrace());
                  }

            }

      }

      public String toString() {

            return new String("stringVal1 is" + stringVal1 + "stringVal2 is"
                        + stringVal2 + "stringVal3 is" + stringVal3 + "intVal1 is"
                        + intVal1 + "intVal2 is" + intVal2 + "intVal3 is" + intVal3);

      }

      public void setProcedure(String procName) {
            procedureName.append(procName);

      }

      public String getProcedure(){
            return procedureName.toString();
      }

}

May thanks in advance
Waiting for reply
Nicky Jha



This communication is for informational purposes only. It is not
intended as an offer or solicitation for the purchase or sale of
any financial instrument or as an official confirmation of any
transaction. All market prices, data and other information are not
warranted as to completeness or accuracy and are subject to change
without notice. Any comments or statements made herein do not
necessarily reflect those of JPMorgan Chase & Co., its subsidiaries
and affiliates.

This transmission may contain information that is privileged,
confidential, legally privileged, and/or exempt from disclosure
under applicable law. If you are not the intended recipient, you
are hereby notified that any disclosure, copying, distribution, or
use of the information contained herein (including any reliance
thereon) is STRICTLY PROHIBITED. Although this transmission and any
attachments are believed to be free of any virus or other defect
that might affect any computer system into which it is received and
opened, it is the responsibility of the recipient to ensure that it
is virus free and no responsibility is accepted by JPMorgan Chase &
Co., its subsidiaries and affiliates, as applicable, for any loss
or damage arising in any way from its use. If you received this
transmission in error, please immediately contact the sender and
destroy the material in its entirety, whether in electronic or hard
copy format. Thank you.

Please refer to http://www.jpmorgan.com/pages/disclosures for
disclosures relating to European legal entities.
Mime
View raw message