Olá pessoal!
Estou querendo estudar EJB 3 e comecei a ler o livro EJB3 in action mas estou tendo problemas pra fazer o meu ejb 3 hello world no eclipse e usando o websphere.
Alguém pode me ajudar?
[]s
Olá pessoal!
Estou querendo estudar EJB 3 e comecei a ler o livro EJB3 in action mas estou tendo problemas pra fazer o meu ejb 3 hello world no eclipse e usando o websphere.
Alguém pode me ajudar?
[]s
Qual é o problema que está tendo exatamente?
Como eu comecei a estudar EJB3 agora e nunca trabalhei com EJB antes eu não sei como executar uma aplicação simples ejb3. Estou lendo o livro EJB 3.0 in Action e estou tentando seguir pelo exemplo do primeiro capitulo onde tem um hello world.
O que eu tenho hoje:
1 interface com annotation @Remote com um metodo que seria o helloWorld.
1 classe que implementa essa interface e faz o system.out.println(“Hello World”)
1 classe do cliente que tem uma instancia da classe acima, não instanciada.
E o Eclipse e o Websphere instalados.
Problema 1: No Eclipse eu não sei qual o tipo de projeto que eu crio pra usar EJB. (Enterprise Project, EJB project, Web Project)
Problema 2: Não sei quais configurações adicionais eu teria que fazer (arquivo web.xml (que não existe dependendo do tipo de projeto do eclipse), jndi etc)
Basicamente é isso…
Se alguém pudesse fazer um passo a passo pra criar um Hello World usando EJB 3.0 ajudaria bastante.
[]s
Gunnar
Eu não tenho um exemplo pronto aqui, mas basicamente é o seguinte:
-> Criar um projeto EJB no Eclipse, assim ele gera todos os arquivos e configurações necessarias, e tambem pode publicar no Websphere (se estiver configurado naquela aba “Servers”).
-> Desenvolver uma aplicação cliente, que usa as classes client criadas junto com o EJB Project e obtem o ejb através de JNDI (procure no google sobre cliente ejb 3)
olá
o que eu tentei fazer:
Criei um projeto ejb no eclipse com as seguintes classes e interfaces:package client;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import teste.HelloWorld;
public class ClientEJB {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Context context;
try {
context = new InitialContext();
HelloWorld hello = (HelloWorld) context.lookup("javaHelloWorldEJB");
hello.helloWorld();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package teste;
public interface HelloWorldR {
public void helloName();
}
package teste;
public interface HelloWorldL {
public void helloWorld();
}
package teste;
import javax.ejb.Stateless;
/**
* Session Bean implementation class HelloWorld
*/
@Stateless(mappedName = "javaHelloWorldEJB")
public class HelloWorld implements HelloWorldR, HelloWorldL {
@Override
public void helloName() {
// TODO Auto-generated method stub
System.out.println("Gunnar...");
}
@Override
public void helloWorld() {
// TODO Auto-generated method stub
System.out.println("Hello World");
}
/**
* Default constructor.
*/
public HelloWorld() {
// TODO Auto-generated constructor stub
}
}
Manifest-Version: 1.0
Class-Path:
Main-Class: client.ClientEJB
Não estou conseguindo fazer o deploy...não sei se falta alguma coisa ou o que estou fazendo errado....
Não sei se falta alguma configuração ou se não estou conseguindo testar no meu ambiente de bobeira
qualquer ajuda é bem vinda
[]a
Faltaram as anotações nas interfaces @Local e @Remote.
Fora isso, veja que tipo de erro acontece na hora do deploy e mande mais detalhes (a propósito, você está fazendo dentro do eclipse mesmo ou está gerando um EAR e jogando no servidor?)
Bom, depois de cansar de apanhar com o Websphere mudei pro jboss. Consegui alguns avanços, mas ainda não consegui fazer funcionar
Web Server - Jboss 5.1.0 GA
IDE - eclipse
Eu criei um projeto EJB no eclipse com as seguintes classes:
ejb.server.HelloWorld.HelloWorldBeanRemote
package ejb.server.HelloWorld;
import javax.ejb.Remote;
@Remote
public interface HelloWorldBeanRemote {
public void sayHelloRemoto();
}
ejb.server.HelloWorld.HelloWorldBeanLocal
package ejb.server.HelloWorld;
import javax.ejb.Local;
@Local
public interface HelloWorldBeanLocal {
public void sayHelloLocal();
}
ejb.server.HelloWorld.HelloWorldBean
package ejb.server.HelloWorld;
import javax.ejb.Stateless;
/**
* Session Bean implementation class HelloWorldBean
*/
@Stateless
public class HelloWorldBean implements HelloWorldBeanRemote, HelloWorldBeanLocal {
/**
* Default constructor.
*/
public HelloWorldBean() {
// TODO Auto-generated constructor stub
}
@Override
public void sayHelloRemoto() {
// TODO Auto-generated method stub
System.out.println("Remoto");
}
@Override
public void sayHelloLocal() {
// TODO Auto-generated method stub
System.out.println("Local");
}
}
Cliente
package ejb.client;
import java.util.Properties;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
import ejb.server.HelloWorld.HelloWorldBean;
import ejb.server.HelloWorld.HelloWorldBeanRemote;
public class EJBClient {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Properties properties = new Properties();
properties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
properties.put("java.naming.factory.url.pkgs","=org.jboss.naming:org.jnp.interfaces");
properties.put("java.naming.provider.url","jnp://localhost:1099");
InitialContext context = new InitialContext(properties);
Object bean = context.lookup("HelloWorldBean/remote");
Object bean2 = context.lookup(HelloWorldBean.class.getSimpleName()+"/remote");
HelloWorldBeanRemote beanH = (HelloWorldBeanRemote)PortableRemoteObject.narrow(bean, HelloWorldBeanRemote.class);
//Object bean3 = context.lookup("HelloWorldBean/local");
//bean.sayHelloRemoto();
System.out.println(bean);
System.out.println(bean2);
System.out.println(beanH);
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Mensagem do JBOSS
11:27:41,999 INFO [EJBContainer] STARTED EJB: ejb.server.HelloWorld.HelloWorldBean ejbName: HelloWorldBean
11:27:42,018 INFO [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI:
HelloWorldBean/remote - EJB3.x Default Remote Business Interface
HelloWorldBean/remote-ejb.server.HelloWorld.HelloWorldBeanRemote - EJB3.x Remote Business Interface
HelloWorldBean/local - EJB3.x Default Local Business Interface
HelloWorldBean/local-ejb.server.HelloWorld.HelloWorldBeanLocal - EJB3.x Local Business Interface
Quando eu executo a aplicação como Java Application:
Proxy to jboss.j2ee:jar=EJB.jar,name=HelloWorldBean,service=EJB3 implementing [interface ejb.server.HelloWorld.HelloWorldBeanRemote]
Proxy to jboss.j2ee:jar=EJB.jar,name=HelloWorldBean,service=EJB3 implementing [interface ejb.server.HelloWorld.HelloWorldBeanRemote]
Proxy to jboss.j2ee:jar=EJB.jar,name=HelloWorldBean,service=EJB3 implementing [interface ejb.server.HelloWorld.HelloWorldBeanRemote]
Ou seja eu tenho um objeto proxy e não um objeto HelloWorldBean que eu quero.
Alguma idéia do que pode estar errado?
Caraca, tu teve essa dúvida há um mês atrás e já está certificado?
Mandou bem mermão!
Caraca, tu teve essa dúvida há um mês atrás e já está certificado?
Mandou bem mermão!
hhehehhehe quem me dera
As certificações que eu tenho não são a SCBCD.
[]s
vixe, jurava que tinha era lido “business” ali no meio… 
estou tendo problemas no hello world do EJB3 em Ação também… Sou totalmente novo no EJB também e ainda não consegui executar nada.
Jájá eu posto aí.
valeeu.
Se quiser ajuda me manda uma mp.
Eu consegui progredir bastante no EJB.
[]s
Pô cara, vai ser legal se puder contar com sua ajuda aí também… 
Estou usando o “jboss-5.1.0.GA” e estou conseguindo fazer o deploy da minha aplicação certinho. (pelo menos ele não dá nenhum erro)
Seguinte, o que está me acontecendo é o que segue:
O livro me dá alguns exemplos, e também me dá um endereço onde eu posso baixar uns fontes do que está sendo passado no livro.
Então eu tenho:
package ejb.bean.ejb3inaction.example;
import javax.ejb.Remote;
@Remote
public interface HelloUser {
public void sayHello(String name);
}
package ejb.bean.ejb3inaction.example;
import javax.ejb.Stateless;
@Stateless
public class HelloUserBean implements HelloUser {
public void sayHello(String name) {
System.out.println("Hello " + name + " welcome to EJB 3 In Action!");
}
}
E do lado do cliente ele me passa a seguinte classe:
package ejb.client.ejb3inaction.example;
import javax.ejb.EJB;
import ejb.bean.ejb3inaction.example.HelloUser;
public class HelloUserClient {
@EJB
private static HelloUser helloUser;
public static void main(String[] args) {
helloUser.sayHello("Curious George");
System.out.println("Invoked EJB successfully .. see server console for output");
}
}
Eu achei bem estranho isso… é dessa forma que se executa mesmo? por um método main?
O problema que eu estou tendo é um NullPointer em helloUser que pelo visto não foi injetado né?
Eu não tenho nem idéia ainda de como posso fazer para rodar isso.
Se tivesse pelo menos um projeto desse em um “Getting Started” rapidão só pra eu dar a primeira sacada.
Valeu aí.
Opa
Pois é tive esse mesmo problema. O problema é que o EJB não é injetado em POJOS comuns…tem que ser em componentes web como servlets etc.
Para fazer o seu exemplo rodar tem uma aplicação que chama application client que iria emular o Container pra vc e ai sim funcionaria.
O jeito mais simples disso ai funcionar é transformar a sua classe HelloUserClient num servlet e acessar o servlet pelo browser.
[]s
Ou então vc pode tb fazer o lookup pelo JNDI.
Fica a seu critério.
[]s
Cara, tentei fazer nesse esquema de servlet que você me falou. Não tentei com jndi pois ainda não tenho muito a idéia de como funciona.
Só que seguinte, parece que deu algo errado, por que eu obtive um NullPointerException na minha servlet. Logo eu creio que não ouve a injeção de dependencia.
Código da Servlet:
public class HelloUserClient extends HttpServlet {
private static final long serialVersionUID = 1L;
@EJB
private static HelloUser helloUser;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
helloUser.sayHello("Curious George");
System.out.println("Invoked EJB successfully .. see server console for output");
}
}
Eu obtive o erro na linha do "helloUser.sayHello(“Curious George”);"
O Jboss está levantando sem erro nenhum. Creio que esteja tudo certinho.
Tem alguma idéia do que seja?
Caso não, será que você não teria essa aplicação “HelloWorld” que você utilizou quando passou por essa fase não?
Muito obrigado!
Cara, esse servlet seu esta no mesmo projeto?
Aqui eu fiz o seguinte criei um projeto Enterprise Application, criei um módulo web dinamico e um módulo ejb. O meu servlet ficava no meu módulo web e os ejbs no meu módulo ejb. Na hora de dar deploy eu fazia o deploy do EAR e não dos módulos separados.
Nesse mesmo post tem um cliente que eu havia feito que funciona usando o JNDI…vc pode tentar usar, é só mudar o nome do ejb.
Se vc quiser me mandar o seu projeto ejb pra eu dar uma olhada, pode mandar pro meu email tb…me manda uma mp que eu te passo o meu email, e eu posso te mandar o que eu fiz aqui.
[]s