| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > несколько коннектов к Oracle из под JBoss |
| Автор: DmitryPS 22.8.2007, 13:57 | ||||
| Всем доброго времени суток. Столкнулся со следующей проблемой: Используем JBoss 4.2.1, Oracle 10 задача из одного session bean открыть несколько соединений с ораклом под разными пользователями в случае если коннект один, все работает хорошо. Хорошо все работает так же в случае 2-х коннектов под одним пользователем. Пользователь естественно оракловый и не обязательно POOL_ADMINISTRATION который описан в oracle_ds.xml Но вот в случае 2-х разных пользователей имеем эксешен: Wrong credentials passed to getConnection!; - nested throwable: (org.jboss.resource.JBossResourceException: Wrong credentials passed to getConnection!) Причина ошибки не понятна. Вот что пишут на jboss http://wiki.jboss.org/wiki/Wiki.jsp?page=FAQJBossJCA http://wiki.jboss.org/wiki/Wiki.jsp?page=FAQJCASubPooling http://wiki.jboss.org/wiki/Wiki.jsp?page=ConfigJCACommon Так как проблема непонятна, пытаюсь её решить методом научного тыка. Может что то элементарное упустил. Помогите чем можете (можно и материально код тестовой процедуры
настройка dataSource
|
| Автор: y3u 22.8.2007, 14:05 |
| а если под другого ораклиного юзера сделать еще один дата соурс? |
| Автор: DmitryPS 22.8.2007, 14:36 | ||||
| Забыл добавить. Пробовал добавить в _ds.xml параметр <application-managed-security/> как рекомендует JBoss в итоге имеем новый эксепшен Could not enlist in transaction on entering meta-aware object!; - nested throwable: (javax.transaction.SystemException: java.lang.Throwable: Unabled to enlist resource, see the previous warnings. tx=TransactionImple < ac, BasicAction: a000015:b2c:46cc1ef1:4b status: ActionStatus.ABORT_ONLY >); - nested throwable: (org.jboss.resource.JBossResourceException: Could not enlist in transaction on entering meta-aware object!; - nested throwable: (javax.transaction.SystemException: java.lang.Throwable: Unabled to enlist resource, see the previous warnings. tx=TransactionImple < ac, BasicAction: a000015:b2c:46cc1ef1:4b status: ActionStatus.ABORT_ONLY >)) http://wiki.jboss.org/wiki/Wiki.jsp?page=FAQJCASubPooling
Добавлено через 12 минут Сделал. в итоге имеем Could not enlist in transaction on entering meta-aware object!; - nested throwable: (javax.transaction.SystemException: java.lang.Throwable: Unabled to enlist resource, see the previous warnings. tx=TransactionImple < ac, BasicAction: a000015:bd3:46cc2358:3d status: ActionStatus.ABORT_ONLY >); - nested throwable: (org.jboss.resource.JBossResourceException: Could not enlist in transaction on entering meta-aware object!; - nested throwable: (javax.transaction.SystemException: java.lang.Throwable: Unabled to enlist resource, see the previous warnings. tx=TransactionImple < ac, BasicAction: a000015:bd3:46cc2358:3d status: ActionStatus.ABORT_ONLY >)) Вот код (второй dataSource отличается от вышеприведенного 1. Именем 2. Пользователем + паролем)
З.Ы. пользователе может быть много , и дата сурсы на каждого не напишешь. По сути система работает с ораклом либо через пользователя хозяина пула, либо реально существующего ораклового пользователя (которых может быть много и менятся они могут достаточно динамично) |
| Автор: ekr 22.8.2007, 17:15 | ||
в ejb 2.x чтобы аутентифицироваться перед ресурсом под учеткой, отличной от той, что указано при конфигурации пула, надо в дескрипторе развертывания бина в разделе описания resource reference указать <auth-type>Application</auth-type>.
думаю, в ejb3 похожую вещь можно замутить. |
| Автор: ekr 22.8.2007, 21:11 | ||
то, что описал я - это часть спецификации ejb, а описанное на http://wiki.jboss.org/wiki/Wiki.jsp?page=ConfigJCACommon - детали настройки конкретного сервера. т.е. с помощью настройки ejb-jar настраивается политика аутентификации для resource reference, а настройка ds.xml - для resource (datasource). эти настройки действуют совместно ) |
| Автор: DmitryPS 24.8.2007, 15:10 | ||
в EJB3 аналогичные описания ресурса прописываются следующим образом @Resource(mappedName = "java:OracleDS", authenticationType=javax.annotation.Resource.AuthenticationType.CONTAINER) DataSource ds; К сожалению как появлялся exception Could not enlist in transaction on entering meta-aware object!, так и появляется. Такое ощущение, что дело в транзакциях. а вот что вываливает JBoss почему то не могу разместить лог в тексте :( приаттачу файлом начало лога следующее 16:16:46,265 WARN [loggerI18N] [com.arjuna.ats.internal.jta.transaction.arjunacore.lastResource.disallow] [com.arjuna.ats.internal.jta.transaction.arjunacore.lastResource.disallow] Adding multiple last resources is disallowed. Current resource is org.jboss.resource.connectionmanager.TxConnectionManager$LocalXAResource@36acab 16:18:41,677 WARN [loggerI18N] [com.arjuna.ats.internal.jta.transaction.arjunacore.enliststarterror] [com.arjuna.ats.internal.jta.transaction.arjunacore.enliststarterror] TransactionImple.enlistResource - XAResource.start returned: XAException.XAER_PROTO for < 131075, 25, 23, 1-a000015:a41:46cecb5d:4ca000015:a41:46cecb5d:50 |
| Автор: y3u 24.8.2007, 15:38 |
| как настроены секьюрити в аппсервере и оракле? Как настроены XA транзакции длля оракла? Если не может от энлистить транзакцию при работе с ораклой, то, скорее всего, где-то не хватает каких-то грантов. Выполнялся скрипт из $orahome/rdbms/admin/xaview.sql (не обращая внимание, что в доке написано, что под винду типо не нужно выполнять)? вот такое еще попробуй (не обращая внимание, что это для WAS написано): http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/topic/com.ibm.websphere.nd.doc/info/ae/ae/rtrb_dsaccess2.html#rtrb_dsaccess2__XArecovery |
| Автор: DmitryPS 25.8.2007, 13:51 | ||||
| Кратко резюмируя данную ситуацию. Частично вышеописанную проблему удалось решить. Напомню , что версия JBoss 4.2.1g 1. Проблема в настройках секьюрити. Из одного session bean не мог открыть 2 коннекта к ораклу под двумя разными пользователями получал exception Wrong credentials passed to getConnection!;
Решение: в _ds.xml добавить параметр <application-managed-security/> более подробно описать ресурс
2. Выполнив данные действия, получаем новую , свежую проблему при попытке выполнить код имеем exception Could not enlist in transaction on entering meta-aware object! и в логах JBoss - а можно увидеть следующее 16:16:46,265 WARN [loggerI18N] [com.arjuna.ats.internal.jta.transaction.arjunacore.lastResource.disallow] [com.arjuna.ats.internal.jta.transaction.arjunacore.lastResource.disallow] Adding multiple last resources is disallowed. Current resource is org.jboss.resource.connectionmanager.TxConnectionManager$LocalXAResource@36acab Решение которое позволило вышеприведенному коду отработать. в jbossjta-propeties.xml добавить <property name="com.arjuna.ats.jta.allowMultipleLastResources" value="true"/> подчерпнуто из http://www.jboss.com/index.html?module=bb&op=viewtopic&t=113633&postdays=0&postorder=asc&start=0 в итоге код работает, но в логах jboss появляется не очень радующий варнинг 14:24:26,967 WARN [loggerI18N] [com.arjuna.ats.internal.jta.transaction.arjunacore.lastResource.multipleWarning] [com.arjuna.ats.internal.jta.transaction.arjunacore.lastResource.multipleWarning] Multiple last resources have been added to the current transaction. This is transactionally unsafe and should not be relied upon. Current resource is org.jboss.resource.connectionmanager.TxConnectionManager$LocalXAResource@122cbaf вообщем надо насчет транзакций в j2ee и в jboss еще почитать если кто сможет прокомментировать работу с транзакциями и последний варнинг , будет интересно |