Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Как использовать несколько серверов бд?


Автор: zhz 21.2.2013, 02:42
В бинах через @persistentcontext инъектирую entitymanager. Вызываю namedquery из энтитей. Суть в том что данные до определенной даты хранятся на одном сервере бд, после на другом. Таким образом запрос сначала надо выполнить на одном сервере а потом на другом. Пробовал делать так:
Код

@peristencecontext("unit one")
Entitymanager em1

@peristencecontext("unit two")
Entitymanager em2
.................

Typedquery query = em1.createnamedquery(entity.QUERY);
Typedquery query2= em2.createnamedquery(entity.QUERY);
finallist = query.getresultlist();
finallist.addall(query2.getresultlist());

Return finallist;

 

Но данный подход вызывает исключение. Как правильно решить данный вопрос?

Автор: korian 21.2.2013, 03:22
Примерно так:
Код

@TransactionAttribute(TransactionAttributeType.NEVER)
public void doThis() {
   result1 = doThisForUnitOne();
   result2 = doThisForUnitTwo();
...
}

public Result doThisForUnitOne() {
...
return result;
}

public Result doThisForUnitTwo() {
...
return result;
}

Автор: zhz 26.2.2013, 01:36
Спасибо большое за ответ. Решил проблему. Инъектировал два EntityManager в бин 
Код

    @PersistenceContext(unitName = "uni1")
    EntityManager em;

    @PersistenceContext(unitName = "unit2")
    EntityManager em2;
 
Далее работал с нимим как обычно. чтобы не выскакивало исключение, необходимо использовать в connection pool в качестве resource type  javax.sql.XADatasource вместо javax.sql.Datasource

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)