Мне очень нужна ваша помощь. У меня есть JDBC-код, который вызывает хранимую процедуру oracle. Это класс, который имеет код:хранимая процедура не выполняется.
public class DAOImpl {
private String sql = "{call MAIN.SP_CALC(?,?,?,?,?)}";
private Connection conn = null;
public DAOImpl(Connection conn) {
this.conn = conn;
}
@Override
public synchronized void executeSP(String year, String month, Long id) throws SQLException {
try (CallableStatement cs = conn.prepareCall(sql);) {
cs.setObject(1, id);
cs.setObject(2, year);
cs.setObject(3, month);
cs.setObject(4, 0);
cs.registerOutParameter(5, Types.INTEGER);
cs.execute();
}
}
}
У меня есть два клиента, для этого класса, класса JavaSE Tester и лиц без EJB. Основной JavaSE() метод имеет следующий код:
try {
DriverManager.registerDriver(new OracleDriver());
Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
DAOImpl dao = new DAOImpl(conn);
dao.executeSP("2015", "02", 99561010l);
} catch (SQLException ex) {
Logger.getLogger(SPTester.class.getName()).log(Level.SEVERE, null, ex);
}
апатридом EJB имеет этот другой код:
try {
conn = ds.getConnection();
DAO dao = DAOImpl(conn);
dao.executeSP("2015", "02", 99561010l);
} catch (SQLException ex) {
throw new SQLException(ex);
} finally {
conn.close();
}
DS является переменной экземпляра вводили в EJB в качестве источника данных, который приходит от соединения JDBC Бассейн объявлен в стеклянную рыбу типа oracle.jdbc.xa.client.OracleXADataSource. Переменные DB_URL, USER, PASS программы JavaSE имеют те же значения, которые используют пул соединений JDBC
Как вы заметили, единственное отличие - это объект Connection. Оба JavaSE и EJB используют драйвер ojdbc6.jar. Оба используют java 1.7.0_u2, поэтому я использую try-with-resources.
Проблема в том, что работает только JavaSE! Оба они возвращаются после нескольких секунд обработки, но работает только программа JavaSE. Я пробовал много вещей .. СМТ и BMT EJB, упаковываются и развернутые типы ид, синхронизация и unsynchronize метод и т.д. Мне нужен этот код работает в EJB :(
Что такое случился с моей EJB?
заранее спасибо
Вы забыли подробно рассказать, как именно EJB не работал , Не совершена ли транзакция или нет? – BalusC
привет BalusC, спасибо за ваш ответ. Теперь я опубликую версии EJB, которые я сделал в CMT и BMT. С CMT по умолчанию, я знаю, что контейнер делает фиксацию, когда метод заканчивается, я прав? с BMT я сделал commit явно. Пожалуйста, проверь это – jmann