Como usar EJB com Desktop

5 respostas
paulofafism

Pessoal Bom dia,

Estou com a seguinte dúvida: Como usar EJB com aplicações desktop?

Antes de começar estou usando SQLServer + Hibernate + NetBeans 6.5 + GlassFish + Swing

Comprei o livro EJB Professional para entender melhor como funciona e olhei artigos exemplos na internet, conseguir entender e ate fiz uma pequena aplicação.

Minhas dúvidas mais detalhadas são:

1 - Em uma aplicação desktop quais tipos de interfaces para meus componentes deve usar @Local ou @Remote, pois tive problemas em usar a interface @Remote em alguns casos. Um exemplo na qual tive problema foi ao realizar algumas consultas utilizando querys do Hibernate gerando erros que alguns classes do Hibernate não eram serializadas. ai eu passei a usar a interface @Local. Em que casos vocÊs utilizam a interface @Remote

2 - Como vou fazer para executar essa aplicação nos meus clientes, sendo que ira existir um servidor e os clientes acessando este servidor. No servidor ficará instalado o banco de dados o SQL Server. Pois não quero ter que ficar instalando o SGDB em todas as máquinas.

5 Respostas

orlandocn
  1. a interface Local so funciona dentro do conteiner, sempre que seu cliente for conectar-se no AS vc vai precisar de uma interface remota

  2. voce so vai precisar de 1 instancia de BD, que vai ser configurado como Datasource do AS. Dai em diante e com os EJBs

Felagund

Se não me engano, vc não pode usar a anotação @Remote no cliente Swing, pois é uma anotação JEE, Aqui usamos o InitialContext para fazer comunicação com o EJB.

[]'s

paulofafism

Eu tentei usar interface Remota so que acontece um erro dizendo o Hibernate tem classes que não são serializadas e também alguns classes que criei também acontece isso. Classes DAO também, devo colocar elas Serializadas tb?

paulofafism

Como usuaria a classe InitialContext: primeiro deve criar as instÂncias da classe do container depois usar esse InitialContext para capturar as referÊncias

Felagund
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
props.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
props.setProperty("org.omg.CORBA.ORBInitialHost", IP DO EJB);
props.setProperty("org.omg.CORBA.ORBInitialPort", PORTA DO EJB);
InitialContext ctx = new InitialContext(props);

depois basta fazer ctx.lookup(String nome), passando como parametro o nome do seu EJB.
por exemplo

UmaInterfaceRemota ejb = (UmaInterfaceRemota) ctx.lookup("caminhoParaEjb");

Sim vc tem que colocar implements Serializable nos objetos que vai transmitir.
Cara não vejo necessidade em vc passar os Daos para o cliente, deixa o EJB somente usar os DAOs o cliente so chama os meotdos de consulta no EJB.

[]'s

Criado 4 de maio de 2009
Ultima resposta 4 de mai. de 2009
Respostas 5
Participantes 3