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 inserir as informações solicitadas:

  • Nome: neste campo, adicione um nome para o serviço que deseja cadastrar.
  • Descrição: neste campo, 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: neste campo, 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 :



O arquivo domain.xml localizado em [diretório_instalação]\appserver\domain\configuration.

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

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

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:

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