Доступ к базе данных осуществлялся непосредственно через драйвер Sybase с помощью DriverManager. Он работал корректно, мы смогли вызвать наши хранимые процедуры.
Недавно мы переходим на сервер приложений (на JBoss 5), и обращения к базе данных теперь создаются через соединитель JNDI с использованием источника данных:
Код: Выделить всё
Properties ppt = new Properties();
ppt.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
ppt.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
ppt.put("java.naming.provider.url", "jdbc/sybase");
InitialContext ctx = new InitialContext(ppt);
DataSource ds = (DataSource) ctx.lookup(AConfig.getInstance().getDatasourceJndiName());
Connection conn = ds.getConnection();
Однако в этом случае несколько процедур завершаются сбоем, вызывая эту ошибку:
"Сохраненная процедура '**' может быть запущен
только в несвязанной транзакции mode."
или такой, для других случаев (с изменением сбойной команды):
Команда TRUNCATE TABLE не разрешена
в транзакции с несколькими операторами
Судя по тому, что я нашел в Интернете, похоже, что-то в JBoss или разъеме открывает сама транзакция, вызывающая эти ошибки. Таким образом, разнообразные решения, которые я смог найти для этих конкретных проблем, слишком локализованы, и это кажется более серьезной проблемой.
Есть ли способ предотвратить такое поведение (при условии, что что это и есть реальная проблема)?
Мои знания в этой конкретной области довольно скудны, это новый для меня. Таким образом, в этом описании, вероятно, отсутствуют важные детали. Пожалуйста, укажите мне, как я могу улучшить этот вопрос, какие детали я могу добавить, если это необходимо.
Подробнее здесь: https://stackoverflow.com/questions/387 ... e-error-wh