javasf@googlegroups.com
[Top] [All Lists]

Re: [javasf] Filtros no Seam

Subject: Re: [javasf] Filtros no Seam
From: Lelo
Date: Wed, 29 Sep 2010 09:19:42 -0300
Muito obrigado por sua resposta Assis.

Hoje vou testar isso e estive pensando também se não seria uma opção também sobrescrever os métodos getEjbql e getRestrictions, e dentro desta nova implementação deles validar as roles do usuário.

Para completar reforço aqui o meu apoio à sua sugestão de usar Ejbql. Hoje trabalha em uma aplicação que conecta apenas a um banco mas já trabalhei com aplicações que precisavam ser capazes de se conectar a 4 bancos diferentes (no caso oracle, informix, postgres e db2). Neste caso eu utilizava hibernate e auxiliava muito. Minha única resalva é: consultas mais complexas, muitos joins e tal, é sempre muito importante (em tempo de desenvolvimento) habilitar showSql=true para ver o que é que está rolando de verdade e verificar se não está derrubando a performance com isso.

Vou fazer novos testes e respondo. No momento tem outra coisa quebrando minhas pernas aqui.

Abraço!

2010/9/28 Assis Júnior <assisprog@xxxxxxxxx>
Kra, fiz um exemplo aqui vê se te serve.
Carlos, boa! Use as ferramentas para resolver teus problemas da forma que você precisa. Mas, aconselho vc a aprender o ejbql que é muito útil em aplicações multi-banco.

@Name("companyList")
public class CompanyList extends EntityQuery<Company> {

    private static final String EJBQL = "SELECT company FROM Company company";

    private static final String[] RESTRICTIONS = { "company.name LIKE concat(#{companyList.company.name.trim()}, '%')"};//Vc pode colocar o lower/upper ou já gravar o campo de pesquisa no formato adequado.

    private Company company = new Company();

    private int paginaAtual = 1;

    public CompanyList() {
        String restricao = "";

        if (!Identity.instance().hasRole("admin")) {
            restricao = " WHERE company.associacao = #{componenteAssociado}";//aqui você vai fazer a associação da company com o usuário logado.
        }

        setEjbql(EJBQL + restricao);
        setRestrictionExpressionStrings(Arrays.asList(RESTRICTIONS));
        setOrder("company.name");
        setMaxResults(10);
    }

    public int getPaginaAtual() {
        return paginaAtual;
    }

    public void setPaginaAtual(int paginaAtual) {
        this.paginaAtual = paginaAtual;
    }

    public Company getCompany() {
        return company;
    }

    public void setCompany(Company company) {
        this.company = company;
    }
}

Em 28 de setembro de 2010 16:33, Carlos Eduardo Rodrigues Diógenes <cerdiogenes@xxxxxxxxx> escreveu:

Além disso, eu tive uma formação mais focada em SQL, então acho muito
mais fácil escrever em SQL do que em HQL ou qualquer coisa parecida.
Além disso onde trabalho o pessoal já tem muita coisa pronta em SQL e
coisa bem complexa, então facilita, tanto para mim, quanto para eles
que entendem mais facilmente o que fiz.

Em 27 de setembro de 2010 18:02, Lelo <lelo.pieri@xxxxxxxxx> escreveu:
> Obrigado pela resposta Carlos,
>
> Entretanto acho que estou indo no mesmo caminho que você. Preciso fazer uma
> consulta um pouco mais complexa. Isso que citei seria apenas o começo do
> problema, pois vou precisar chegar por exemplo, em uma relação de prestação
> de serviço entre empresas. Ou seja, coisas como fazer join com uma ou duas
> tabelas, e tudo isso precisaria estar nesta classe list. Isso está querendo
> complicar a minha vida.
>
> Vou testar mais algumas coisas aqui e volto a postar.
>
> Abraço!
>
> 2010/9/27 Carlos Eduardo Rodrigues Diógenes <cerdiogenes@xxxxxxxxx>
>>
>> Tenta isso:
>>
>> "lower(company.name) like
>> lower(concat(#{hasRole('admin') ? "" : companyList.company.name},'%'))"
>>
>> Além disso eu queria deixar uma impressão pessoal sobre realizar
>> consultas desta forma. Quando comecei a fazer consulta desse jeito
>> achei bem legal, porém minhas consultas começaram a ficar bastante
>> complexa e eu fui tentando manter o padrão, até chegar um momento que
>> não aguentei mais, comecei a escrever SQL nativa do banco. Pra mim
>> isto que o Seam implementa é pra consulta muito básica.
>>
>> Em 27 de setembro de 2010 17:06, Lelo <lelo.pieri@xxxxxxxxx> escreveu:
>> > Caros,
>> > Não sei se deveria postar isso aqui mas como temos alguns usuários de
>> > Seam no fórum, lá vai.
>> >
>> > Preciso fazer filtros um pouco mais complexos que aquilo que o
>> > framework propõe na geração automática de código. O costumeiro é fazer
>> > filtros à partir dos valores que são setados na entity da classe que
>> > estende EntityQuery
>> >
>> > Ex:
>> > public class CompanyList extends EntityQuery<Company>{
>> > ...
>> > }
>> >
>> > Com isso eu poderia ter entre minhas Restrictions
>> > "lower(company.name) like
>> > lower(concat(#{companyList.company.name},'%'))" entre outras.
>> >
>> > Agora eu quero testar se o usuário logado é um admin
>> > (hasRole('admin')), este pode ver todas as empresas da lista, caso
>> > contrário, por exemplo, ele só poderia ver a empresa ao qual está
>> > associado.
>> >
>> > Como eu poderia montar uma restriction para tal?
>> >
>> > Agradeço a todos.
>> >
>> > Abraço!
>> >
>> > --
>> > Você recebeu esta mensagem por que é membro do Google Group "Javasf".
>> > http://groups.google.com/group/javasf
>> >
>> > Conheça também:
>> >  - Grupo Java Brazil em http://groups.google.com/group/thejavabrazil
>> >
>>
>> --
>> Você recebeu esta mensagem por que é membro do Google Group "Javasf".
>> http://groups.google.com/group/javasf
>>
>> Conheça também:
>>  - Grupo Java Brazil em http://groups.google.com/group/thejavabrazil
>
>
>
> --
> Rogério De Pieri  (Lelo)
> Buscando melhorar a cada dia
> Áudio, Hardware & Software
>
> --
> Você recebeu esta mensagem por que é membro do Google Group "Javasf".
> http://groups.google.com/group/javasf
>
> Conheça também:
> - Grupo Java Brazil em http://groups.google.com/group/thejavabrazil
>

--
Você recebeu esta mensagem por que é membro do Google Group "Javasf".
http://groups.google.com/group/javasf

Conheça também:
 - Grupo Java Brazil em http://groups.google.com/group/thejavabrazil



--
Atenciosamente,
Assis júnior
SCJP 5.0 Certified

--
Você recebeu esta mensagem por que é membro do Google Group "Javasf".
http://groups.google.com/group/javasf
 
Conheça também:
- Grupo Java Brazil em http://groups.google.com/group/thejavabrazil



--
Rogério De Pieri  (Lelo)
Buscando melhorar a cada dia
Áudio, Hardware & Software

--
Você recebeu esta mensagem por que é membro do Google Group "Javasf".
http://groups.google.com/group/javasf
 
Conheça também:
- Grupo Java Brazil em http://groups.google.com/group/thejavabrazil
<Prev in Thread] Current Thread [Next in Thread>