...
Nota |
---|
|
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. |
Aviso |
---|
|
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. |
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.
Painel |
---|
Deck of Cards |
---|
| Card |
---|
id | 1 |
---|
label | JDBC pelo painel de controle |
---|
| 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: Image Added
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.
Image Added
Testando o serviço JDBC
No serviço criado, selecione a opção Testar conexão Image Added : Image Added
|
Card |
---|
id | 2 |
---|
label | JDBC pelo arquivo domain.xml |
---|
| 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: Bloco de código |
---|
language | xml |
---|
title | Tag datasource |
---|
linenumbers | true |
---|
| <subsystem xmlns="urn:jboss:domain:datasources: |
|
| 4Dentro desta tag terá uma outra tag |
|
|
...
...
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. Bloco de código |
---|
language | xml |
---|
linenumbers | true |
---|
| <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 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 |
|
| vitais 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). Nota |
---|
| - O exemplo apresentado
|
|
| possui - tem configurado somente o driver para uso do banco de dados MySQL. Se outro banco for utilizado
|
|
| outro banco- , verifique a configuração do driver necessária para seu uso.
|
|
| Nunca - 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: Bloco de código |
---|
language | xml |
---|
linenumbers | true |
---|
| <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, |
|
|
...
...
...
- é 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.
|
|
|
warning | ! | 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 Fluig para que o servidor de aplicação (Wildfly) consiga mapear a nova conexão criada. |
|
|
|
Construindo o Dataset para acesso à nova conexão
...
O exemplo abaixo apresenta o acesso ao datasource MeuDataSet criado como exemplo anteriormente no arquivo domain.xml.
Bloco de código |
---|
language | js |
---|
linenumbers | true |
---|
|
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 vale destacar:
- Na linha 4 : manter todo o código, alterando somente o nome " MeuDataSet" pelo nome dado ao criar seu datasource;
- Na linha 8 : adicionar a query para acesso à tabela contida no banco, cuja conexão foi criada.
...