Tenho uma aplicação Java Web com Struts. Eu estou acessando uma aplicação JSF, Spring, Seam e Hibernate através de RMI.
No método chamado via RMI, eu necessito do getSession() de um dao que extende HibernateDAOSupport que é gerenciado pelo Spring e Seam…
No entento a sessão retorna somente null.
Eu preciso que o Seam injete uma instancia do DAO na classe que é chamado pelo RMI.
Você poderiam me ajudar com isso?
Ou mesmo ajudar em um jeito diferente de fazer?
Estou com o mesmo problema, não consigo fazer com que o Seam injete o DAO automaticamente na variável que criei o que gera um NullPointerException na hora de utilizar o objeto.
Veja o código do meu método que é acessado pelo RMI:
package br.com.cedro.rmi;
@Name("rmi")
public class HoursGeneratorImpl extends UnicastRemoteObject implements HoursGenerator, Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@In("#{userDao}")
private UserDAO uDao;
public HoursGeneratorImpl() throws RemoteException{}
public String getTotalHours(int UsersCode, int year, int month) throws RemoteException {
User user = uDao.findByUserCode(UsersCode).get(0);
CalendarService calendar = new CalendarService();
calendar.setUsername(user.getUsername());
calendar.createCalendar(month, year);
return calendar.getTotalGeral();
}
}
Eu também não sou um expert em nenhuma destas tecnologias, mas acredito que neste caso, o Seam gerencie toda a parte de injeção de instâncias em seus componentes, isto inclui as que são do Spring (como os DAOs). Da forma como foram integrados Seam e Spring, o segundo parece ser dependente do primeiro para ser iniciado.
Eu creio que o problema ocorra mais por que não existe o ciclo de vida do JSF nestas chamadas, assim o Seam não injeta e nem cria o componente.
Me corrijam se eu estiver errado.
Utilizar dois mecanismos de injeção pode deixar a coisa meio confusa.
Se achar realmente necessário (no mínimo deve ser interessante) utilize o Spring para os serviços, repositórios, daos, transações e etc… e deixa o resto com o seam.
[quote=ACDias]Eu também não sou um expert em nenhuma destas tecnologias, mas acredito que neste caso, o Seam gerencie toda a parte de injeção de instâncias em seus componentes, isto inclui as que são do Spring (como os DAOs). Da forma como foram integrados Seam e Spring, o segundo parece ser dependente do primeiro para ser iniciado.
Eu creio que o problema ocorra mais por que não existe o ciclo de vida do JSF nestas chamadas, assim o Seam não injeta e nem cria o componente.
Me corrijam se eu estiver errado. [/quote]
Não estou conseguindo fazer com que a aplicação ao receber uma chamada via RMI entre no ciclo de vida do JSF. Devido à isso que o Seam não injeta as variáveis.
Tentei usar na minha classe a seguinte notação de scopo:
@Name("rmi")
@Scope(ScopeType.EVENT)
public class HoursGeneratorImpl extends UnicastRemoteObject implements HoursGenerator, Serializable{
mas mesmo assim continua sem funcionamento, ele não consegue injetar minha variável:
Me responde uma coisa, onde o Spring é usado na sua aplicação? Se não é ele quem faz a injeção de dependência, o que ele faz? Gerenciamento de segurança?
[quote=sic]Por que você está utilizando ‘#{}’ no nome do seam component utilizado na anotação @In?[/quote]Porque o componente a ser injetado não é do Seam e sim do Spring.