Esta página é destinada para atualizações 1.6 e superiores do TOTVS Fluig Plataforma. |
O objetivo desse guia é apresentar os procedimentos necessários para criar datasets que acessem banco de dados externos ao TOTVS Fluig Plataforma.
Os select passados por constraint em dataset, serão bloqueados pelo serviço. Abaixo temos um exemplo da correta utilização do procedimento. |
Ao realizar um desenvolvimento usando o datasource da plataforma, a partir da atualização 1.6.5-190514 é indispensável usar o AppDS em vez do FluigDS ou FluigDSRO. |
Para que seja possível criar um dataset que acesse uma base externa à plataforma, é necessário, primeiramente, configurar 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: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 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).
|
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:
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. |
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.