Esta página é destinada para atualizações 1.6 e superiores do TOTVS Fluig Plataforma.

Índice

Objetivo


O objetivo desse guia é apresentar os procedimentos necessários para criar datasets que acessem banco de dados externos ao TOTVS Fluig Plataforma.

A partir das atualizações 1.6.5 Liquid, 1.7.0 Lake e 1.7.1 Crystal Lake, os select passados por constraint em dataset serão bloqueados pelo serviço. Abaixo temos um exemplo da correta utilização do procedimento.

Datasets acessando banco de dados externo


Para que seja possível criar um dataset que acesse uma base externa à plataforma, é necessário, primeiramente, configurar o serviço JDBC.


Acesse o TOTVS Fluig com usuário administrador a opção Painel de controle, agrupador Desenvolvimento e Serviços. Selecione a opção Novo serviço:


Selecione o tipo de serviço JDBC e insira as informações solicitadas:

  • Nome: adicione um nome para o serviço que deseja cadastrar.
  • Descrição: adicione uma descrição para o serviço.
  • Driver: neste campo, será selecionado o driver desejado: MySQL, SQL Server ou Oracle. Após a gravação do serviço, o driver não pode ser editado.
  • URL: informe os dados do servidor de banco de dados.
  • Usuário: usuário de acesso ao banco de dados.
  • Senha: senha de acesso ao banco de dados.

  • Acionar opção Salvar.


Testando o serviço JDBC


No serviço criado, selecione a opção Testar conexão Testar serviço :



Edite o arquivo domain.xml localizado em [diretório_instalação]\appserver\domain\configuration. 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:5.0">
	<datasources>

Dentro desta tag terá uma outra tag chamada <datasource>, responsá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 primeira 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 da plataforma.

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

Não orientamos remover ou alterar as conexões (<datasource>) que já estão contidas no arquivo de configuração domain.xml. Estas conexões são essenciais para o correto funcionamento da plataforma. 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 as <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 mais de um banco seja acessado. (Oracle, MySQL, SQLServer).

  1. O exemplo apresentado tem configurado somente o driver para uso do banco de dados MySQL. Se outro banco for utilizado, verifique a configuração do driver necessária para seu uso.
  2. Não 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, vale destacar:

  • jndi-name = deve seguir a sintaxe "java:/jdbc/" onde após a / é necessário informar um alias para conexão. No exemplo, foi dado o nome de MeuDataset ficando "java:/jdbc/MeuDataset"
  • pool-name =usar o mesmo nome dado no alias para conexão. No exemplo definimos como MeuDataset.
  • <connection-url> = dentro desta tag deve ser informada a conexão com a base de dados, sendo que o exemplo mostra uma conexão com o banco de dados MySQL. Se outro banco for usado, 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 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 anteriormente 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 (rs != null) {
			rs.close();
		}
		if (stmt != null) {
			stmt.close();
		}
		if (conn != null) {
			conn.close();
		}
	}
	return newDataset;
}

A partir do código gerado acima, vale destacar:

Para validar o novo dataset, consulte o tópico Visualizando datasets