0 Replies Latest reply on May 24, 2010 3:10 AM by Jose Miguel Loor

    problem executing jdbc statement via mdb

    Jose Miguel Loor Apprentice

      hi

       

      i have an odd issue trying to execute a callable  statement via a MessageDrivenBean. the scenario is like this:

       

      i  have @Stateles session bean that produces the message

       

      @Stateless
      public class MensajesServiceImpl implements MensajesService,
               MensajesServiceRemote {

       

          @Resource(mappedName = "java:/JmsXA")
           private ConnectionFactory connectionFactory;

       

          @Resource(mappedName = "queue/balanceComprobacionQueue")
           private Queue balanceComprobacionQueue;

       

          public void llamarEjecucionArbolCuenta(final Integer periodo)
                   throws JMSException {
               QueueConnectionFactory qcf = (QueueConnectionFactory)  connectionFactory;
               QueueConnection queueConnection = qcf.createQueueConnection();
               QueueSession queueSession =  queueConnection.createQueueSession(false,
                       Session.AUTO_ACKNOWLEDGE);
               QueueSender queueSender = queueSession
                       .createSender(balanceComprobacionQueue);
               ObjectMessage message = queueSession.createObjectMessage();
               message.setIntProperty(Constantes.PERIODO_MESSAGE_PROPERTY,  periodo);
               queueSender.send(message);
           }
      }

       

      the message is received by the MDB

       

      @MessageDriven(activationConfig  = {
               @ActivationConfigProperty(propertyName = "destinationType",  propertyValue = "javax.jms.Queue"),
               @ActivationConfigProperty(propertyName = "destination",  propertyValue = "queue/balanceComprobacionQueue") })
      public class BalanceComprobacionMessageDrivenBean implements  MessageListener {

       

          @EJB
           private BalanceComprobacionService balanceComprobacionService;

       

          @Override
           public void onMessage(final Message message) {
               try {
                   if (message instanceof ObjectMessage) {
                       ObjectMessage periodoMessage = (ObjectMessage) message;
                       Integer periodo = periodoMessage
                                .getIntProperty(Constantes.PERIODO_MESSAGE_PROPERTY);
                        balanceComprobacionService.ejecutarArbolCuentas(periodo);
                   }
               } catch (JMSException e) {
                   e.printStackTrace();
               } catch (EjecucionFallidaException e) {
                   e.printStackTrace();
               }

       

          }

       

      }

       

      as you can see, in the MDB i am  injecting another stateless session bean (BalanceComprobacionService)  and calling a method registered in that session bean; the method i am  executing is this

       

       

      @Stateless
      public class BalanceComprobacionDaoImpl implements  BalanceComprobacionDao {

       

          @Resource(mappedName = "java:/myDataSource")
           private DataSource dataSource;

       

          @Override
           public void ejecutarArbolCuentas(final Integer periodo)
                   throws EjecucionFallidaException {
               Connection connection = null;
               try {
                   String sql = "{ call arbol_cuenta(?) }";
                   connection = dataSource.getConnection();
                   CallableStatement statement = connection.prepareCall(sql);
                   statement.setInt(1, periodo);
                   statement.execute();
               } catch (SQLException e) {
                   throw new EjecucionFallidaException(e);
               } finally {
                   try {
                       connection.close();
                   } catch (SQLException e) {
                       throw new EjecucionFallidaException(e);
                   }
               }
           }
      }

       

       

      everything works fine, until the  statement.execute(); at this point, the execution just stops; it doesn't  give any error, exception, nor in the jboss server or the database, it  just stops right there

       

      i am using jboss 4.2.3.GA with  jdk 1.6_0.15; the database is postgresql 8.3

       

      i don't  think the problem is related with the database or the function i am  calling, because if i test the BalanceComprobacionDaoImpl by itself, it  works ok, it's just when i test the whole process that it stops at the  callable statement execution

       

      please help, thanks