Consegui resolver meu problema pois na verdade eu não precisava conectar 2 servidores diferentes, precisava apenas conectar 2 BD’s diferentes
entretanto perguntei a um mestre no assunto e ele me respondeu o seguinte:
Cada gerenciador de BD possui uma nomenclatura específica para esta estrutura.
No MySQL, o nome é “federated” table.
Para que isto funcione, provavelmente, o banco deve ter sido configurado com a opção específica. Algo como,
–with-federated-storage-engine
e ativado com esta possibilidade.
–federated
Primeiramente, a tabela remota deve existir. Consulte se pode ser qualquer tipo de tabela
CREATE TABLE federated_table ( . . .)
ENGINE=FEDERATED
CONNECTION=‘mysql://usuario:senha@remote_host:9306/db_name/table_name’;
Você também pode usar a seguinte sequência:
- Create server…
- Em seguida, criar a “federated” table. Simplifica a especificação do parâmetro CONNECTION.
Obs.: Não posso fazer afirmações sobre a eficácia desta solução, nem sobre possíveis problemas. Dependendo da situação, pode pensar numa solução de replicação para não depender da disponibilidade da instância remota.
Para conectar diversos BD’s do mesmo servidor é só usar um resource sem especificar o banco de dados, apenas o servidor:
<jdbc-resource enabled="true" object-type="user" jndi-name="nomeDoJNDI" pool-name="NomeDaConnectionPool"/>
<jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false"
connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10"
connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0"
connection-validation-method="auto-commit" datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource"
fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false"
is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false"
match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000"
name="NomeDaConnectionPool" non-transactional-connections="false" pool-resize-quantity="2"
res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8"
validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
<property name="User" value="user"/>
<property name="Password" value="abc123"/>
<property name="serverName" value="x.x.x.105"/>
<property name="URL" value="jdbc:mysql://x.x.x.105/"/>
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
</jdbc-connection-pool>
e na query vc especifica os BD’s:
SELECT *.x, *.y FROM x_BD.x_TABELA AS x, y_BD.y_TABELA AS y WHERE x.xy_id = y.xy_id