Сконфигурировать очередь WebLogic для выполнения connection.prepareCall - PullRequest
0 голосов
/ 14 ноября 2018

Можно ли настроить соединение с очередью WebLogic, когда мой Java-клиент пытается подключиться к соединению пула, чтобы выполнить процедуру, и у него больше нет доступных соединений, WebLogic перенаправит этот запрос в очередь и выполнит его, когда скоро появится вакансия в бассейне? В Weblogic я создаю простую очередь JMS, используя это руководство: https://blogs.oracle.com/soaproactive/jms-step-1-how-to-create-a-simple-jms-queue-in-weblogic-server-11g В Java я придерживался этой логики и не могу понять, как настроить 'prepareCall' для перехода в очередь Weblogic, когда соединение с пулом больше не доступно.

Вот мой код:

private static String CONNECTION_FACTORY_JNDI_NAME = "jms/LogURAJMSConnectionFactory";
private static String QUEUE_JNDI_NAME = "jms/LogURAQueue";

private ConnectionFactory connectionFactory = null;  
private Queue logQueue = null;
private JMSContext jmsContext = null;
private JMSProducer jmsProducer = null;

public getExamplePoolQueue() {
    logger.debug("Create JMS context");

    try {
        InitialContext ic = new InitialContext();
        this.connectionFactory = (ConnectionFactory) ic.lookup(CONNECTION_FACTORY_JNDI_NAME);
        this.logQueue = (Queue) ic.lookup(QUEUE_JNDI_NAME);
        this.jmsContext = connectionFactory.createContext(JMSContext.AUTO_ACKNOWLEDGE);
        this.jmsProducer = jmsContext.createProducer();
    } catch (Exception e) {
        logger.error(e);
        throw new ServiceException(e);
    }
}

Вот мой класс, который получает соединение с пулом для выполнения процедуры

 public PURA rchmConsulta(Rechamador rechamador) throws SQLException, JSONException {

    Connection con = getConnection(); 
 //Here I stuck, how get a connection and manage to forward to a queue if no more connections are availables???

    CallableStatement stmt = null;

    String procedure = "{CALL IVR_OWNER_RPT.PURA_RCHM_CONSULTA(?,?,?,?,?,?)}";

    stmt = con.prepareCall(procedure);
    stmt.setString(1, rechamador.getDsMenuUra());
    stmt.setString(2, rechamador.getCdPonto());
    stmt.setString(3, rechamador.getNmAni());

    stmt.execute();

// ... more code
}
...