Generator do Seam 2.1 não é compativel com 2.0.x
Marcos Sousa | March 28, 2009Fazendo alguns testes com o Seam acabei descobrindo uma falha de compatibilidade do Seam Generator da versão 2.1 com as versões anteriores. O problema reside nos filtros que são criados nas páginas de listagens.
Nas versões anteriores, o componente para as páginas de listagens sobrescreviam os métodos:
- getEjbql: Consulta EJB QL usada para a listagem.
- getMaxResults: Define a quantidade de registros a serem retornados pela listagem.
- getRestrictions: Retorna lista de restrições a serem adicionadas a consulta.
Porém na versão 2.1 estes métodos deixaram de ser usados na geração do código. O problema é que o método getRestrictions teve o retorno aterado. Nas versões anteriores ele retornava uma lista de Strings, já na versão 2.1 o tipo de retorno foi alterado para uma lista de ValueExpression.
Com isto um código gerado na versão na versão 2.0.3, por exemplo, gera ClassCastException ao tentar converter String em ValueExpression. Solução? Atualizar o código, veja o antes e o depois:
@Name("userList")
public class UserList extends EntityQuery {
private static final String[] RESTRICTIONS = {
"lower(user.login) like concat(lower(#{userList.user.login}),'%')",
"lower(user.name) like concat(lower(#{userList.user.name}),'%')"};
private final User user = new User();
@Override
public String getEjbql() {
return "select user from User user";
}
@Override
public Integer getMaxResults() {
return 25;
}
public User getUser() {
return user;
}
@Override
public List<string> getRestrictions() {
return Arrays.asList(RESTRICTIONS);
}
}
A versão 2.1 o código gerado é algo semelhante a:
@Name("userList")
public class UserList extends EntityQuery<user> {
private static final String EJBQL = "select user from User user";
private static final String[] RESTRICTIONS = {
"lower(user.login) like concat(lower(#{userList.user.login}),'%')",
"lower(user.name) like concat(lower(#{userList.user.name}),'%')"};
private final User user = new User();
public UserList() {
setRestrictionExpressionStrings(Arrays.asList(RESTRICTIONS));
setMaxResults(25);
setEjbql(EJBQL);
}
public User getUser() {
return user;
}
}
Até que seja corrigido o problema fica a dica.






Acabei de me deparar com o problema. Vai dar um trabalhinho modificar tantos beans =P
De toda forma, valeu a dica!
Rui,
Realmente é chato, talvez valha esperar este problema ser convertido. Eu já relatei o problema no JIRA.
Marcola, tah precisando atualizar esse buteco aki com mais frequência né??
Abraço
@Rafa Marques,
O tempo está curto, mas tem bastante coisa nos meus rascunhos aqui.
Sou novo no que diz respeito a Jboss, principalmente Seam.
Não achei em nenhum canto um local para te passar um email, então estou escrevendo através desse comentário.
Como eu trabalho com Autorização?
Autenticar eu consigo, mas autorizar apenas quem tem determinada role, não “rola”, rsss
Posso fazer isso no page.xml????
[]s
@Raphael Vinícius,
Bom o Seam tem um poderoso recurso de autorização, tem as tags s:hasRole e s:hasPermission (ambas na versão 2.1) se quiser conferir mais informações sugiro estes links:
http://docs.jboss.com/seam/latest/reference/en-US/html/security.html#d0e11124, http://odyssi.blogspot.com/2008/01/intro-to-jboss-seam-security-part-1.html e http://java.dzone.com/articles/intro-jboss-seam-security-part
Ola Marcos Sousa, certinho? Amigo preciso de uma dica sua,
Quero fazer um cadastro de usuario basico usando Jboss Seam and Jboss Portal.
Só com email, nome, password e gravar…
Pode me dar um help, me gmail ta ae, me envia um email, abraços
@Roan,
Claro, envie para mim (falecomigo at marcossousa dot com)o stracktrace que está sendo gerado, que eu dou uma ajuda para você.
Fala Marcos!
Gostei muito do seu blog, achei bastante útil. Já está no meus favoritos.
Estou trabalhando num projeto com SEAM e não consegui fazer uma pesquisa por data utilizando o mecanismo de pesquisa padrão do SEAM.
Como eu colocaria no RESTRICTIONS o meu campo data? Tenho que usar algum SimpleDateFormat? Não vi uma maneira de usar o SimpleDateFormat no array de String do RESTRICTIONS. O BD que estou usando é o MySql 5.1 e minhas datas são persistidas no seguinte formato: 2010-08-02 14:14:19
Valeu!