Preciso criar uma classe que seria tipo um servlet, mas teria a diferença que ela seria chamada toda vez que determinada ação fosse executada ao invés de uma url.
Estou com dúvidas de como seria uma maneira legal de implementar ela e a maneira que eu to pensando, é criar uma classe singleton e chamar através de:
Pesquisei o padrão mas não sei se ele vai me ajudar mais que um Singleton. Fiquei com dúvidas em algumas definições dele e se bobiar, vou me perder pq não saquei direito o lance de observable e me complicou mais pq meu ManagedBean que teria que ser o Observable e isso atrapalhou meu raciocínio. Hehe
Acho que o Singleton iria cair melhor pq a cada cadastro feito, eu iria buscar o profissional adequado para o cadastro e mandar uma notificação. Seria algo como:
OuvinteCadastro é uma somente uma interface, que pode ser implementada para fazer qualquer coisa relacionada ao evento:
public interface OuvinteCadastro{
public void profissionalModificado(Profissional profissional);
}
Deste modo você pode ter múltiplos ouvintes sem modificar o cadastro, e este também não precisa conhecer o que cada ouvinte vai fazer quando for notificado.
O que acha?
Mas ai surgem as dúvidas. Tenho um DAO, JavaBean e o ManagedBean ( JSF ). No caso, o usuário clica para salvar, ai chama meu método:
ProfissionalDAO dao = new ProfissionalDAO(ProfissionalBean.class);
logger.info("Cadastrar Profissional para Empresa de ID: " + getFuncionarioBean().getEmpresa().getId() + " | CPF do Funcionario Responsavel: " + getFuncionarioBean().getCPF());
dao.save(getProfissionalBean());
Isso seria dentro do ManagedBean, com o Observer, eu iria fazer o save() e depois chamar o notificaProfissionalModificado(profissional);, correto?
Primeira dúvida: esse notificaProfissionalModificado é um método, mas ele não deveria ter alguma espécia de Observer?
Segunda dúvida: pelo o que eu entendi, eu preciso implementar o Observable em alguma classe minha e teria que ser no ManagedBean pq é ele que tem o método que chama o salvar, to certo? Mas isso não seria legal pq vou ficar muito preso ao JSF. Pensei em criar uma terceira classe que implementasse o Observable, é uma prática melhor?
Essa interface, eu implemento ela juntamente com algumas das interfaces do Observer?
[quote=davidpadilha]É uma solução legal essa, gostei
Primeira dúvida: esse notificaProfissionalModificado é um método, mas ele não deveria ter alguma espécia de Observer?
[/quote]
Pelo que entendi do seu caso você não precisa de mais classes. Só o esquema de ouve/notifica já deve ser suficiente.
Você tem que implementar a interface OuvinteCadastro para executar alguma ação quando o profissional é modificado, e além desta classe, não vejo necessidade de mais classes. O seu managed bean pode ser configurado com múltiplos observers sem modificar sua implementacao (talvez direto no XML de configuração?), e acho que isso já te dará bastante flexibilidade, não?
Acabei de implementar o que vc fez e, acho que, consegui entender.
Criei a interface CadastroListener e depois implementei ela numa classe isolada, a ProfissionalListener. Nessa nova classe, tem o método profissionalCadastrado(Profissional profissional) e este método cria uma Thread e inicializa minha outra classe que implementa Runnable para poder buscar o que for necessário.
O meu Set ficou parecido com o seu, e pelo o que entendi, eu posso adicionar vários listeners e ir chamando os métodos conforme a necessidade né?
Ex.:
ProfissionalListener profissionalListener = new ProfissionalListener();
listeners.add(profissionalListener );
notificaProfissionalCadastrada(profissional);
Eu estava com uma grande dúvida pq nesse exemplo seu, nada implementava a Observer ou a Observable, ai eu fiquei perdido hehe …
Acho que não tem mto a ver com o tópico, mas vamos lá…tem como eu ter um método que é chamado a cada intervalo de tempo dentro de uma observer?