Índice

Objetivo

O objetivo desse guia é apresentar os procedimentos necessários para criar datasets que acessem bases de dados externas ao fluig.

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:

<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.

<datasources>
	<datasource jta="true" jndi-name="java:/jdbc/FluigDS" pool-name="FluigDS" 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>

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).

  1. O exemplo apresentado possui configurado somente o driver para uso do banco de dados MySQL. Se for utilizado outro banco, verifique a configuração do driver necessária para seu uso.
  2. Nunca remova o driver já configurado ou substitua ele por outro. Caso necessário, configure um novo driver seguindo a estrutura já descrita.

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:

 <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.

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 duvidas 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.

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 (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