Исп. в системе соединений к нескольким базам данных (есть ли возможности в Спринге, JEE, JPA?) (original) (raw)
Исп. в системе соединений к нескольким базам данных (есть ли возможности в Спринге, JEE, JPA?)
Предисловие
Была и есть одна разработка начала 2000х, где все сваяно коммандой программеров ручками: Persistence Services, Application Server (WEB)GUI фрейворки итд итб. В данной системе есть возможность выполнения транзакций для нескольких баз данных. Приблизительный вид ситемы (сбоку;-) ): стартуем сервер приложений, в процессе старта выполняется соединение к т.н. конфигурационной базе данных (КБД) а также репозиторию (РБД) (данные соединений для
КБД прописаны в явовском properties файле. Данные соединения для РБД вычитываются уже из КБД .
КБД и РБД могут бежать на разных СУБД.
Когда пользователь (обладающий соотв. правами доступа и "данными" доступа" входит в систему, он может выбрать, на какой OLTP БД он будет работать. После выбора он видит каталог программ, с которыми он может работать.
Как это выглядит в коде:
"Обычно" программер использует неявно транзацию, которая существует при выборе OLTP БД. Он может также прописатъ такое вот действо
TransactionManager tm=Environment.getTransactionManager()
Guid tmGuid=tm.beginNewTransaction()
try{
// бизнес-логика
tm.commit( tmGuid);
}
catch(Exception e) {
tm.rollback( tmGuid);
}
Ежели какому то программеру взбрело в голову обращаться к нескольким ДБ в его приложении (например к КБД и РБД и OLTP БД , он пишет нечто:
Guid tmGuid=tm.beginNewTransaction()
try{
// бизнес-логика
tm.commit( tmGuid);
}
catch(Exception e) {
tm.rollback( tmGuid);
}
tmGuid=tm.beginNewTransaction()
try{
// бизнес-логика
tm.commit( tmGuid);
}
catch(Exception e) {
tm.rollback( tmGuid);
}
Важно отметить, что выборка данных не непосредственно SQL запросами - есть своя разработка, абстрагируящаяся от SQL.
Пришла Новая-Метла-Шеф. (т.к. фирма стала намного ширее;-).у Новой-Метлы есть ресурс в виде человекостудентов порядка 400 . Человекостуденты на фирме задерживаются макс. два года, затем далее идут работать (когда обучение к концу подходит). Проблемы новой-метлы касаемо старой разработки в том, что для вработки студенту надо около полугода, шобы раздуплится как и че работает (яву он типа уже знает, но многое надо учить). В то же время человекостудент обладает знаниями хотя бы базовыми касаемо ORMов всяких там с JPA , Спрингами и JEE.
Потому Новой Метле стукнула в голову мысль...нах все старое выбросить и начать новое - юзая стандартые средства: серверы приложений, веб фрейворки, персистентые сервисы.
Тех.вопросы по многим соединениям
Лично меня пока тех. вопросы заинтересовали следующего плана:возможно ли в спринге ли в JEE так настроить менеджерер транзацкий, чтобы соединения были бы к нескольким базам данных?? Т.Н. распределенные транзакции не интересуют пока. Т.к на настоящее время нет приложений в системе, где бы одновременно с неколькими OLTP БД работа была бы. Реальна след. ситуации:
Чтение/Запись в OLTP БД , чтение из РБД.
Чтение/Запись в OLTP БД , чтение из КБД.
Запись в КБД. Запись в ОЛТП ДБ.
Есть ли примеры на практике таких реализаций? Как это прим. выглядить должно в плане конфигурации и кода?