У меня есть сервер backend на Java 6 с JBoss 5.1. Я должен вызвать процедуру Oracle (хранится на упаковке) на этот код в метод, как:Выполнение CallableStatement блокирует приложение
cs = conn.prepareCall("{call <user>.<package>.<procedure_name>(?,?,?,?,?,?,?,?,?)}");
cs.setString(1, <data>);
cs.setString(2, <data>);
cs.setString(3, <data>);
cs.setDate(4, <data>);
cs.setString(5, <data>);
cs.registerOutParameter(6, Types.VARCHAR);
cs.registerOutParameter(7, Types.VARCHAR);
cs.registerOutParameter(8, Types.BIGINT);
cs.setInt(9, <data>);
try{
cs.execute();
}catch (RuntimeException e){
e.getMessage();
}catch (Exception e){
e.getMessage();
}
Long numerr = cs.getLong(8);
Проблема возникает, когда я называю cs.execute()
. Этот вызов блокирует выполнение и не может продолжать нормальное выполнение и сохранять данные.
Надо сказать, что эта процедура нормального выполнение вставки данных в другие таблицы на основе третьей таблицы, в которой я вставить ранее данные с созданием нормального класса и EntityManager.persist(<entity>)
и EntityManager.flush()
.
Это не Грант разрешения проблема, потому что я могу выполнить процедуру на SQLDeveloper с правильным предложением и надлежащего пользователя/пароля.
ли вставки делается путем вызова процедуры в SQL Developer были совершены или откат? Похоже, что вставка просто заблокирована другим сеансом. –
Mmmm, я так не думаю, хотя я пытался вставить свои предыдущие данные, закрыть соединение, создать другое соединение, создать вызываемый оператор, а затем выполнить, и проблема все еще сохраняется, 'cs.execute()' still blocks –
Но вы что вы успешно его запускали из SQL Developer. Я говорю об этой сессии, а не о том, что вы делали ранее с Java. –