Histórico da Página
Informações | ||
---|---|---|
| ||
Esta página foi revisada para considerar as novas configurações de server do fluig para a atualização 1.6. Caso possua uma atualização anterior do fluig acesse: Como desenvolver datasets acessando BD externo na versão 1.5.13 ou inferior? |
Índice
Índice | ||||||
---|---|---|---|---|---|---|
|
Objetivo
O objetivo desse guia é apresentar os procedimentos necessários para criar datasets que acessem banco de dados externos ao fluig.
Aviso | ||
---|---|---|
| ||
Ao realizar um desenvolvimento usando o datasource do fluig, a partir da atualização 1.6.5-190514 é indispensável usar o AppDS em vez do FluigDS ou FluigDSRO. |
Datasets acessando banco de dados externo
Para que seja possível criar um dataset que acesse uma base externa ao fluig, é necessário, primeiramente, configurar o arquivo domain.xml. Este arquivo se encontra dentro da pasta de instalação do fluig. Por exemplo: partindo do principio que a instalação foi feita em ambiente Windows no diretório C, o arquivo será encontrado em C:\fluig\appserver\domain\configuration\domain.xml.
Edite o arquivo e procure pela linha que contém a tag <datasources>. Esta tag é responsável pelo agrupamento das conexões criadas na aplicação.
A seguir é apresentado um exemplo da tag no arquivo domain.xml:
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
<subsystem xmlns="urn:jboss:domain:datasources:4.0"> <datasources> |
Dentro desta tag terá uma outra tag chamada <datasource>, reponsável pelas configurações de uma conexão com um banco de dados.
O exemplo abaixo apresenta o uso da tag <datasource> (conexão) criado dentro da tag <datasources> (Responsável pelo agrupamento das conexões), sendo que seu arquivo já possuirá alguns <datasource> configurados, que são responsáveis pela comunicação com o banco de dados do fluig.
Bloco de código | ||||
---|---|---|---|---|
| ||||
<datasources> <datasource jta="false" jndi-name="java:/jdbc/AppDS" pool-name="AppDS" enabled="true" use-java-context="false"> <connection-url>jdbc:mysql://localhost:3306/fluig</connection-url> <driver>mysqlDriver</driver> <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation> <pool> <min-pool-size>10</min-pool-size> <max-pool-size>20</max-pool-size> </pool> <security> <user-name>root</user-name> <password>admin</password> </security> <validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/> <validate-on-match>true</validate-on-match> <background-validation>false</background-validation> </validation> <statement> <share-prepared-statements>false</share-prepared-statements> </statement> </datasource> <drivers> <driver name="mysqlDriver" module="com.mysql"> <driver-class>com.mysql.jdbc.Driver</driver-class> </driver> </drivers> </datasources> |
Nota | ||
---|---|---|
| ||
Nunca remova ou altere as conexões( <datasource>) que já estão contidas no arquivo de configuração domain.xml. Estas conexões são vitais para o funcionamento do fluig. Somente as novas conexões criadas com a finalidade de acesso aos datasets podem ser manipuladas. |
No exemplo apresentado, além do datasource, existem duas outras tags que ficam dentro da estrutura da tag <datasources> que são <drivers> e <driver>. A tag <drivers> é responsável pelo agrupamento das configurações de driver. Já a tag <driver> é responsável pela comunicação com o banco de dados. Pode haver uma ou várias configurações de driver caso seja acessado mais de um banco (Oracle, MySQL, SQLServer).
Nota | ||
---|---|---|
| ||
|
Neste caso, para criar um dataset que acesse uma determinada base de dados, é necessário acrescentar uma nova conexão <datasource> dentro da tag <datasources>.
Exemplo: para acessar uma base de dados em MySQL cujo nome da base seja minhabase, a configuração do novo datasource ficará da seguinte forma:
Bloco de código | ||||
---|---|---|---|---|
| ||||
<datasource jta="false" jndi-name="java:/jdbc/MeuDataSet" pool-name="MeuDataSet" enabled="true" use-java-context="false"> <connection-url>jdbc:mysql://localhost:3306/minhabase</connection-url> <driver>mysqlDriver</driver> <pool> <min-pool-size>5</min-pool-size> <max-pool-size>15</max-pool-size> </pool> <security> <user-name>root</user-name> <password>admin</password> </security> <validation> <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/> <validate-on-match>true</validate-on-match> <background-validation>false</background-validation> </validation> <timeout> <blocking-timeout-millis>30000</blocking-timeout-millis> </timeout> <statement> <share-prepared-statements>false</share-prepared-statements> </statement> </datasource> |
A partir do código gerado acima, cabe destacar:
- jndi-name = deverá seguir a sintaxe "java:/jdbc/" onde após a / deverá ser informado um alias para conexão. No exemplo foi dado o nome de MeuDataset ficando "java:/jdbc/MeuDataset"
- pool-name =usar o mesmo nome dado como alias para conexão. No exemplo ficou MeuDataset.
- <connection-url> = dentro desta tag deverá ser informada a conexão com base de dados, sendo que o exemplo mostra uma conexão com o banco de dados MySQL. Se for usado outro banco, deve ser verificada a forma correta de conexão datasource com o banco ao qual se pretende conectar.
- <user-name> = usuário de acesso ao banco de dados.
- <password> = senha de acesso ao banco de dados.
Aviso | ||
---|---|---|
| ||
Para garantir a integridade da base de dados que será acessada, é importante garantir que o usuário configurado para acesso ao banco seja criado com privilégios somente de leitura, garantindo assim que nenhum registro possa ser alterado. Após criado o datasource, salve o arquivo domain.xml, e reinicie o serviço do fluig para que o servidor de aplicação (Wildfly) consiga mapear a nova conexão criada. |
Construindo o Dataset para acesso à nova conexão
Neste tópico será apresentado o código necessário para criar um novo dataset com base nos dados da nova conexão. Caso haja dúvidas a respeito da criação de datasets, é aconselhável a leitura do tópico Desenvolvimento de Datasets antes de continuar esta etapa.
O exemplo abaixo apresenta o acesso ao datasource MeuDataSet criado como exemplo no arquivo domain.xml.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function createDataset(fields, constraints, sortFields) { var newDataset = DatasetBuilder.newDataset(); log.info("QUERY: " + myQuery); var dataSource = "/jdbc/MeuDataSet"; var ic = new javax.naming.InitialContext(); var ds = ic.lookup(dataSource); var created = false; var myQuery = "select * from pessoas"; try { var conn = ds.getConnection(); var stmt = conn.createStatement(); var rs = stmt.executeQuery(myQuery); var columnCount = rs.getMetaData().getColumnCount(); while (rs.next()) { if (!created) { for (var i = 1; i <= columnCount; i++) { newDataset.addColumn(rs.getMetaData().getColumnName(i)); } created = true; } var Arr = new Array(); for (var i = 1; i <= columnCount; i++) { var obj = rs.getObject(rs.getMetaData().getColumnName(i)); if (null != obj) { Arr[i - 1] = rs.getObject(rs.getMetaData().getColumnName(i)).toString(); } else { Arr[i - 1] = "null"; } } newDataset.addRow(Arr); } } catch (e) { log.error("ERRO==============> " + e.message); } finally { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } return newDataset; } |
A partir do código gerado acima, cabe destacar:
- linha 4: manter todo o código alterando somente o nome "MeuDataSet" pelo nome dado ao criar seu datasource;
- linha 8: adicionar a query para acesso à tabela contida no banco, cuja conexão foi criada.
Para validar o novo dataset, consulte o tópico Visualizando datasets.