Classe Groovy não funciona...
20/02/2009 00:00
0
Estou fazendo uma aplicação que acessa um outro banco de dados, que não é o que defini no modelo(domain). Preciso pegar uns dados nesse outro banco e mapear para o meu. Para isso, criei uma classe que se ocupa de fazer todo o acesso a esse outro banco(conexão e consultas).
No controller, chamo os métodos static dessa classe para fazer o mapeamento do outro banco para o meu, porém os únicos métodos que funcionam são o getconnection() e o close(). Eis o codigo:

Coloquei em src/groovy.

package ljweb.bd

class BancoSPE {
static private connection = null

static getConnection(){

if (connection == null){
def url = "jdbc:firebirdsql:localhost/3050:C:/SPE/spe.fdb"
connection = groovy.sql.Sql.newInstance(url,"SYSDBA","masterkey","org.firebirdsql.jdbc.FBDriver")
}
return connection
}

static close(){
if (connection != null){
connection.close()
connection = null
}
}

static getListaCampanha(){
def sql = getConnection()
def lista = sql.rows("select c.cod_campanha, c.dat_campanha, c.dat_faturamento from campanha c order by c.cod_campanha desc")
return lista
}

static getCampanha(String codigo){
def sql = getConnection()
def c = sql.firstRow("select c.cod_campanha, c.dat_campanha, c.dat_faturamento from campanha c where c.cod_campanha = ?",[codigo])
def campanha = new Campanha()
campanha.id = c.cod_campanha
campanha.data_campanha = c.dat_campanha
campanha.data_faturamento = c.dat_faturamento
return campanha
}

static getPedidosByCampanha(cod_campanha){
def sql = getConnection()
def lista = sql.rows("select p.cod_interno_pedido, c.cod_caixa, p.cod_pedido, p.nro_cap," +
"c.nro_nf, c.flg_pgto_cartao, c.val_liq_caixa, p.cod_interno_rev, p.cod_interno_ponto_apoio," +
"p.cod_hermes_master, p.cod_interno_master from pedido p, caixa c where p.cod_interno_pedido = " +
"c.cod_interno_pedido and p.cod_campanha = ?", [cod_campanha])
return lista
}

static getRevendedor(codigo){
def sql = getConnection()
def revendedor = Revendedor.get(codigo)
def r = null
if (!revendedor){
r = sql.firstRow("select r.cod_interno_rev, r.cod_hermes, " +
"r.nom_rev, r.nro_tel_rev from Revendedora r where r.cod_interno_rev = ?", [codigo])
revendedor = new Revendedor()
revendedor.id = r.cod_interno_rev
revendedor.cod_hermes = r.cod_hermes
revendedor.nom_rev = r.nom_rev
revendedor.nro_tel_rev = r.nro_tel_rev
}
return revendedor
}

static getPontoApoioGrupo(codigo){
def sql = getConnection()
def pontoGrupo = null
def p = null
def pontoApoio = null
if (codigo != null){
pontoGrupo = PontoApoioGrupo.get(codigo)
if (!pontoGrupo){
p = sql.firstRow("select g.cod_grupo, g.dsc_grupo, g.rotulo_grupo" +
" from ponto_apoio_grupo g where g.cod_grupo = ?", [codigo])
pontoApoio = getPontoApoio(p.rotulo_grupo)
pontoGrupo = new PontoApoioGrupo()
pontoGrupo.id = p.cod_grupo
pontoGrupo.dsc_grupo = p.dsc_grupo
pontoGrupo.pontoApoio = pontoApoio
}
}
return pontoGrupo
}

static getPontoApoio(codigo){
def sql = getConnection()
def pontoApoio = null
def master = null
def p = null
if (codigo != null){
p = sql.firstRow("select p.cod_interno_ponto_apoio, p.cod_ponto_apoio, p.dsc_ponto_apoio, " +
"p.cod_interno_rev, p.cod_hermes_rev from ponto_apoio p where " +
"p.cod_ponto_apoio = ?", [codigo])
pontoApoio = PontoApoio.get(p.cod_interno_ponto_apoio)
if (!pontoApoio){
master = getMaster(p.cod_hermes_rev, p.cod_interno_rev)
pontoApoio = new PontoApoio()
pontoApoio.id = p.cod_interno_ponto_apoio
pontoApoio.cod_ponto_apoio = p.cod_ponto_apoio
pontoApoio.dsc_ponto_apoio = p.dsc_ponto_apoio
pontoApoio.master = master
}
}
return pontoApoio
}

static getMaster(cod_hermes, cod_interno){
def sql = getConnection()
def master = null
def m = null
if (cod_hermes != null && cod_hermes != 0){
master = Revendedor.findByCod_hermes(cod_hermes)
if (!master){
m = sql.firstRow("select r.cod_interno_rev, r.cod_hermes, " +
"r.nom_rev, r.nro_tel_rev from Revendedora r where r.cod_hermes = ?",[cod_hermes])
master = new Revendedor()
master.id = m.cod_interno_rev
master.cod_hermes = m.cod_hermes
master.nom_rev = m.nom_rev
master.nro_tel_rev = m.nro_tel_rev
}
}else{
master = Revendedor.get(cod_interno)
if (!master){
m = sql.firstRow("select r.cod_interno_rev, r.cod_hermes, " +
"r.nom_rev, r.nro_tel_rev from Revendedora r where r.cod_interno_rev = ?",[cod_interno])
master = new Revendedor()
master.id = m.cod_interno_rev
master.cod_hermes = m.cod_hermes
master.nom_rev = m.nom_rev
master.nro_tel_rev = m.nro_tel_rev
}
}
return master
}

static getPontoByMaster(cod_hermes){
def sql = getConnection()
def pontoGrupo = null
def p = sql.firstRow("select g.cod_grupo from ponto_apoio_grupo g, ponto_apoio p " +
"where g.rotulo_grupo = p.cod_ponto_apoio and p.cod_hermes_rev = ?",[cod_hermes])
if (p.cod_grupo != null){
pontoGrupo = getPontoApoioGrupo(p.cod_grupo)
}
return pontoGrupo
}

static getReferencia(cod_catalogo, cod_ref, val_tamanho_ref){
def sql = getConnection()
def r = null
def referencia = new Referencia(cod_catalogo:cod_catalogo, cod_ref:cod_ref, val_tamanho_ref:val_tamanho_ref)
referencia = Referencia.get(referencia)
if (!referencia){
r = sql.firstRow("select r.nom_ref from referencia r where r.cod_catalogo = ? " +
"and r.cod_ref = ? and r.val_tamanho_ref = ?", [cod_catalogo, cod_ref, val_tamanho_ref])
referencia = new Referencia()
referencia.cod_catalogo = cod_catalogo
referencia.cod_ref = cod_ref
referencia.val_tamanho_ref = val_tamanho_ref
referencia.nom_ref = r.nom_ref
}
return referencia
}

static getReferenciaByPedido(cod_interno, cod_caixa){
def sql = getConnection()
def lista = sql.rows("select cr.cod_catalogo, cr.cod_ref, cr.val_tamanho_ref, " +
"cr.qtd_referencia, cr.perc_desconto, cr.val_item_rev from caixa_referencia cr " +
"where cr.cod_interno_pedido = ? and cr.cod_caixa = ?",[cod_interno, cod_caixa])
return lista
}

}


No controller, assim dá erro:

import ljweb.bd.BancoSPE

class ImportacaoController {

def index = {
def campanhaSPE = []
def camp = null
def lista = BancoSPE.getListaCampanha()
lista.each{
camp = new Campanha()
camp.id = it.cod_campanha
camp.data_campanha = it.dat_campanha
camp.data_faturamento = it.dat_faturamento
camp.data_vencimento = camp.data_campanha + 35
campanhaSPE << camp
&#125;
camp = campanhaSPE - Campanha.list()
BancoSPE.close()
[campanhas&#58; camp]
&#125;


Se eu colocar assim no controller, não dá erro:

import ljweb.bd.BancoSPE

class ImportacaoController &#123;

def index = &#123;
def campanhaSPE = []
def camp = null
def sql = BancoSPE.getConnection()
def lista = sql.rows(&quot;select c.cod_campanha, c.dat_campanha, c.dat_faturamento from campanha c order by c.cod_campanha desc&quot;)
lista.each&#123;
camp = new Campanha()
camp.id = it.cod_campanha
camp.data_campanha = it.dat_campanha
camp.data_faturamento = it.dat_faturamento
camp.data_vencimento = camp.data_campanha + 35
campanhaSPE << camp
&#125;
camp = campanhaSPE - Campanha.list()
BancoSPE.close()
[campanhas&#58; camp]
&#125;


O erro:

Error 200&#58; groovy.lang.MissingMethodException&#58; No signature of method&#58; static ljweb.bd.BancoSPE.getListaCampanha() is applicable for argument types&#58; () values&#58; &#123;&#125;
Servlet&#58; grails
URI&#58; /ljweb/grails/importacao.dispatch
Exception Message&#58; No signature of method&#58; static ljweb.bd.BancoSPE.getListaCampanha() is applicable for argument types&#58; () values&#58; &#123;&#125;
Caused by&#58; groovy.lang.MissingMethodException&#58; No signature of method&#58; static ljweb.bd.BancoSPE.getListaCampanha() is applicable for argument types&#58; () values&#58; &#123;&#125;
Class&#58; ImportacaoController
At Line&#58; [9]
Code Snippet&#58;

9&#58; def lista = BancoSPE.getListaCampanha()
10&#58; lista.each&#123;
Tags: Groovy


0
Já que é uma classe java, coloca em src/java, coloca também o escopo e retorno dos metodos.

Isso resolve.
02/04/2009 00:00


0
Tenta mudar algum coisa no seu metodo de getLista.
Por exemplo, tenta algo como :

def lista = []
lista = ....

return lista

É só um palpite pois o Groovy não está conseguindo resolver a variavel para voce.
Senão voce pode colocar o tratamento das campanhas dentro do metodo e retornar uma lista de campanhas.. me parece até mais elegante.

Vou pesquisa algo, fazer alguns teste e te respondo depois
13/04/2009 00:00


0
Lendo blogs por ai acabei encontrando uma coisa que pode ser a causa do seu problema:

Veja o blog do Felipe Nascimento, mais precisamento no post sobre um detalhes do GRAIls no Eclipse

Para facilitar voce também pode clicar no link http&#58;//felipenasc.blogspot.com/2008/03/detalhe-do-grails-com-eclipse.html
16/04/2009 00:00



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto