Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> несколько коннектов к Oracle из под JBoss, несколько коннектов к базе 
:(
    Опции темы
DmitryPS
Дата 22.8.2007, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 20.4.2007
Где: Казань

Репутация: нет
Всего: 1



Всем доброго времени суток. Столкнулся со следующей проблемой:

Используем 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!)


Причина ошибки не понятна.  smile  Или проблемы с пулом или с секьюрити.  smile 
Вот что пишут на 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
 
Так как проблема непонятна, пытаюсь её решить методом научного тыка.   smile  Что не есть быть хорошо smile 
Может что то элементарное упустил. Помогите чем можете (можно и материально  smile , шутка)






код тестовой процедуры

Код

@Stateless
public class Test implements ITest {
    @Resource(mappedName = "java:OracleDS")
    DataSource ds;
    

public void logOn(String username, String password) {
        
        Connection con = null;
        Connection con1 = null;

        con = ds.getConnection(username,password);
        con1 = ds.getConnection("POOL_ADMINISTRATION","POOL_ADMINISTRATION");




    }



настройка dataSource

Код


<?xml version="1.0" encoding="UTF-8"?>

<datasources>
  <local-tx-datasource>
    <jndi-name>OracleDS</jndi-name>

    <connection-url>jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST = xxx.xxx.xxx.xxx)(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = xxxxx)))</connection-url>

    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
    <user-name>POOL_ADMINISTRATION</user-name>
    <password>POOL_ADMINISTRATION</password>
    <min-pool-size>10</min-pool-size>
    <max-pool-size>50</max-pool-size>

         <metadata>
         <type-mapping>Oracle9i</type-mapping>
      </metadata>
  </local-tx-datasource>

</datasources>



Это сообщение отредактировал(а) DmitryPS - 22.8.2007, 13:58
PM MAIL ICQ   Вверх
y3u
Дата 22.8.2007, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 9.9.2006
Где: Москва

Репутация: 7
Всего: 13



а если под другого ораклиного юзера сделать еще один дата соурс?


--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
DmitryPS
Дата 22.8.2007, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 20.4.2007
Где: Казань

Репутация: нет
Всего: 1



Забыл добавить. 

Пробовал добавить в _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
Код

Рекомендации JBoss

FAQJCASubPooling
    
Your trail: FAQJBossJCA
The pooling does not appear to be working correctly?

For a resource adapter you wrote?

In that case, you have almost certainly not implemented the ConnectionRequestInfo? correctly. You must implement equals(Object) and hashCode() such that JBoss can correctly check whether two connections are equivalent.

Otherwise

You are using the wrong pooling strategy. By default JBoss uses no criteria for the pooling. If you want to create connections that are not identical, e.g. you want the application to pass in the user/password and the rar does not have reauthentication support, you have to tell JBoss about this in your -ds.xml. e.g. <application-managed-security/> or one of the other strategies if you are using a JAAS login module. 


Добавлено через 12 минут
Цитата(y3u @  22.8.2007,  14:05 Найти цитируемый пост)
а если под другого ораклиного юзера сделать еще один дата соурс? 


Сделал. 

в итоге имеем

 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. Пользователем + паролем)
Код

 
@Stateless
public class Test implements ITest {
    @Resource(mappedName = "java:OracleDS")
    DataSource ds;

    @Resource(mappedName = "java:OracleDS1")
    DataSource ds1;
    
public void logOn(String username, String password) {
        
        Connection con = null;
        Connection con1 = null;

        con = ds1.getConnection(username,password);

        con1 = ds.getConnection("POOL_ADMINISTRATION","POOL_ADMINISTRATION");
    }



З.Ы.   пользователе может быть много , и дата сурсы на каждого не напишешь. По сути система работает с ораклом либо через пользователя хозяина пула, либо реально существующего ораклового пользователя (которых может быть много и менятся они могут достаточно динамично)
PM MAIL ICQ   Вверх
ekr
Дата 22.8.2007, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

Репутация: 12
Всего: 19



в ejb 2.x чтобы аутентифицироваться перед ресурсом под учеткой, отличной от той, что указано при конфигурации пула, надо в дескрипторе развертывания бина в разделе описания resource reference указать <auth-type>Application</auth-type>.

Код

<ejb-jar>
  <enterprise-beans>
    <session>
      ....
       <resource-ref>
            <res-ref-name>jdbc/EmployeeAppDB</res-ref-name>
            <res-type>javax.sql.DataSource</res-type>
            <!-- Application|Container authorized,
               (whether you code sign-on in EJB, or
               the deployer describes the sign-on in XML -->
            <res-auth>Container | Application</res-auth>
         </resource-ref>
...


думаю, в ejb3 похожую вещь можно замутить.


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
DmitryPS
Дата 22.8.2007, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 20.4.2007
Где: Казань

Репутация: нет
Всего: 1



Цитата(DmitryPS @  22.8.2007,  14:36 Найти цитируемый пост)
Пробовал добавить в _ds.xml  параметр <application-managed-security/>
как рекомендует JBoss

http://wiki.jboss.org/wiki/Wiki.jsp?page=FAQJCASubPooling
 



Цитата(ekr @  22.8.2007,  17:15 Найти цитируемый пост)
в ejb 2.x чтобы аутентифицироваться перед ресурсом под учеткой, отличной от той, что указано при конфигурации пула, надо в дескрипторе развертывания бина в разделе описания resource reference указать <auth-type>Application</auth-type>.



По моему речь идет об одном и том же, но настроенном разными путями. Хотя могу ошибаться. smile 

PM MAIL ICQ   Вверх
ekr
Дата 22.8.2007, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

Репутация: 12
Всего: 19



Цитата(DmitryPS @  22.8.2007,  20:56 Найти цитируемый пост)
По моему речь идет об одном и том же, но настроенном разными путями

то, что описал я - это часть спецификации ejb, а описанное на http://wiki.jboss.org/wiki/Wiki.jsp?page=ConfigJCACommon - детали настройки конкретного сервера.
т.е. с помощью настройки ejb-jar настраивается политика аутентификации для resource reference, а настройка ds.xml - для resource (datasource).

эти настройки действуют совместно )


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
DmitryPS
Дата 24.8.2007, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 20.4.2007
Где: Казань

Репутация: нет
Всего: 1



Цитата(ekr @  22.8.2007,  21:11 Найти цитируемый пост)
то, что описал я - это часть спецификации ejb, а описанное на http://wiki.jboss.org/wiki/Wiki.jsp?page=ConfigJCACommon - детали настройки конкретного сервера.
т.е. с помощью настройки ejb-jar настраивается политика аутентификации для resource reference, а настройка ds.xml - для resource (datasource).

эти настройки действуют совместно ) 


в 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

Это сообщение отредактировал(а) DmitryPS - 24.8.2007, 15:18
PM MAIL ICQ   Вверх
y3u
Дата 24.8.2007, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 9.9.2006
Где: Москва

Репутация: 7
Всего: 13



как настроены секьюрити в аппсервере и оракле? 

Как настроены XA транзакции длля оракла?

Если не может от энлистить транзакцию при работе с ораклой, то, скорее всего, где-то не хватает 
каких-то грантов.

Выполнялся скрипт из $orahome/rdbms/admin/xaview.sql (не обращая внимание, что в доке написано, что под винду типо не нужно выполнять)?

вот такое еще попробуй (не обращая внимание, что это для WAS написано):
http://publib.boulder.ibm.com/infocenter/w...ss2__XArecovery


Это сообщение отредактировал(а) y3u - 24.8.2007, 15:53


--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
DmitryPS
Дата 25.8.2007, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 20.4.2007
Где: Казань

Репутация: нет
Всего: 1



Кратко резюмируя данную ситуацию.

Частично вышеописанную проблему удалось решить. Напомню , что версия JBoss 4.2.1g

1. Проблема в настройках секьюрити. Из одного session bean не мог открыть 2 коннекта к ораклу под двумя разными пользователями
 получал exception Wrong credentials passed to getConnection!;

Код

@Stateless
public class Test implements ITest {
    @Resource(mappedName = "java:OracleDS")
    DataSource ds;
    
public void logOn(String username, String password) {
        
        Connection con = null;
        Connection con1 = null;
        con = ds.getConnection(username,password);
        con1 = ds.getConnection("POOL_ADMINISTRATION","POOL_ADMINISTRATION");
    }


    Решение:  в _ds.xml  добавить параметр <application-managed-security/>
                     более подробно описать ресурс
Код

@Resource(mappedName = "java:OracleDS", authenticationType=javax.annotation.Resource.AuthenticationType.APPLICATION)
DataSource ds;  



2. Выполнив данные действия, получаем новую , свежую проблему   smile  smile 
при попытке выполнить код имеем 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&...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 еще почитать  smile 
если кто сможет прокомментировать работу с транзакциями и последний варнинг , будет интересно         
 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0499 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.