Существует такая неплохая библиотека как ha-jdbc. Служит для кластеризации баз данных на уровне приложения. В процессе работы пишет одновременно в n баз, читает согласно тому как будет произведена настройка (load, random и т.д.). На сайте описано как работать с ней в jboss, но мне в процессе работы пришлось попытаться прикрутить её к продуктам wso2.
Веселье начинается...
Подключение для jboss есть на оффсайте, если хотите подключить ещё где, добро пожаловать в ... сорцы. В процессе разбора кода было найдено, что подключать можно и через jdbc драйвер, главное указать правильно драйвер.
Для примера для кластера test можно использовать jdbc:ha-jdbc:test. После этого как и описано на сайте конфигурация для данного кластера начинается искать в ha-jdbc-test.xml
... и продолжается.
- Так как любит хранить настройки в ~/.java/.userPrefs , то после первой инициализации кластера второй раз, даже если поменяли что-то в конфиг файле, список баз и их id из него перечитывать НЕ БУДЕТ, просто упадёт с ошибочкой "не знаю к какой ты меня базе пытаешься подключить, нету таких баз" (для фряхи если даже и добавить для пользователя от кого ява запускается хоум, там всё равно ничего не будет, по крайней мере для версии 1.6.0_10 этот баг в яве на юникс системах ещё не был поправлен, а более свежую сложно найти на этой системе)
- Использует для мэпинга на xml-конфиги чудесную библиотеку jixb, которая в свою очередь работает через <покоцано цензурой>. Внутри jboss работает на ура, всё мапится красиво, но стоит попытаться заюзать её в локал приложении или ещё где, сразу падаем с ошибкой вида:
Caused by: org.jibx.runtime.JiBXException: Expected "cluster" end tag, found "xa-datasource" start tag (line 4, col 1)
at org.jibx.runtime.impl.UnmarshallingContext.parsePastCurrentEndTag(UnmarshallingContext.java:800)
at net.sf.hajdbc.sql.DriverDatabaseCluster.JiBX_binding_driver_unmarshal_2_0(DriverDatabaseCluster.java)
at net.sf.hajdbc.sql.JiBX_binding_driverDriverDatabaseCluster_access.unmarshal()
at org.jibx.runtime.impl.UnmarshallingContext.unmarshalElement(UnmarshallingContext.java:2773)
at net.sf.hajdbc.sql.AbstractDatabaseCluster.preRegister(AbstractDatabaseCluster.java:1045)
at com.sun.jmx.mbeanserver.MBeanSupport.preRegister(MBeanSupport.java:176)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.preRegisterInvoke(DefaultMBeanServerInterceptor.java:1010)
... 54 more
(в примере в конфиге была настройка на xa-datasource)
Обновление до 1.2.2 jibx не поможет, перекомпиляция ha-jdbc со свежей jibx не поможет, а вот что поможет, так это переписать конфиг на другой тип инициализации, то есть впихивать не xa-datasource, а database, так как имеем баг в размапливанием ресурсов (и database, и xa-datasource, и ещё пару вариантов все имплементят AbstractDatabaseCluster, чего выбирает DriverDatabaseCluster загадка природы, разгадывать которую и лезть в код дальше не было никакого желания).
p.s.
Конфиги ha-jdbc при запуске внутри wso2 ищет почему-то не в $CARBON_HOME/repository/conf где лежат все конфиги, а в корне $CARBON_HOME/