EJB 3.0 + Eclipse + JBoss 5.1.0

10 respostas
F

Comunidade,

Estou estudando EJB 3.0 e não consigo executar o “simples” programa para um stateless session bean. Abaixo as classes juntamente com o erro quando executo o cliente. Vocês poderiam me ajudar?

===============

package fontes;
import javax.ejb.Remote;

@Remote

public interface HelloWorldLocal {

public String hello();

}

==================

package fontes;

import javax.ejb.Stateless;

/**

  • Session Bean implementation class HelloWorld

*/
@Stateless

public class HelloWorld implements HelloWorldLocal {

/**
 * Default constructor. 
 */
public HelloWorld() {
    // TODO Auto-generated constructor stub
}

@Override
public String hello() {		
	System.out.println("Primeiro EJB Funcionando");
	return "Hello, World!";
}

}

================

package fontes;

import javax.naming.*;

public class HelloClient {

/**
 * @param args
 * @throws NamingException 
 */
public static void main(String[] args) throws NamingException {
	// TODO Auto-generated method stub
	try {
		Context ctx = new InitialContext();
		HelloWorldLocal hello = (HelloWorldLocal) ctx.lookup("fontes.HelloWorldLocal");
		System.out.println(hello.hello());
	}catch (NamingException ex) {
		ex.printStackTrace();
	}
	
}

}

==============

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial

at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)

at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)

at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)

at javax.naming.InitialContext.lookup(Unknown Source)

at fontes.HelloClient.main(HelloClient.java:15)

10 Respostas

luan03

Pede ajuda para o SENSATO uhauhauhauhauh!

maior_abandonado

seu cliente do ejb precisa das propriedades do innitialContext

eu também não manjo muito de ejb, mais pelo que eu aprendi, você deve criar o innitialContext passando um properties, ou map (não lembro direito se pode ser map)com as configurações:

se você tiver usando o JBOSS na sua própria maquina acho que ficaria alguma coisa +- assim:

Properties env = new Properties(); 
        env.put(Context.SECURITY_PRINCIPAL, "guest" ); 
        env.put(Context.SECURITY_CREDENTIALS, "guest" );         
        env.put(Context.INITIAL_CONTEXT_FACTORY, 
                      "org.jboss.security.jndi.JndiLoginInitialContextFactory"); 
        env.put(Context.PROVIDER_URL, "jnp://localhost:1099");

        try { 
               Context ctx = new InitialContext(env); 
               ...

e outra coisa, coloque seus códigos entre as tags code

F

Funcionou cara.

Obrigado

warley

Amigão,

Vc pode usar a anotação @EJB para fazer o lookup e não ter q escrever este monte de código :

Properties env = new Properties();

env.put(Context.SECURITY_PRINCIPAL, guest );

env.put(Context.SECURITY_CREDENTIALS, guest );

env.put(Context.INITIAL_CONTEXT_FACTORY,

org.jboss.security.jndi.JndiLoginInitialContextFactory);

env.put(Context.PROVIDER_URL, jnp://localhost:1099);

Este monte de código fica uma bagunça!

Abraço.

F

cara… valeu pela dica… mas não consegui rodar… como ficaria meu código?

F

public static void main(String[] args) throws NamingException {

/*Properties env = new Properties();   
    env.put(Context.SECURITY_PRINCIPAL, "guest" );   
    env.put(Context.SECURITY_CREDENTIALS, "guest" );           
    env.put(Context.INITIAL_CONTEXT_FACTORY,   
                  "org.jboss.security.jndi.JndiLoginInitialContextFactory");   
    env.put(Context.PROVIDER_URL, "jnp://localhost:1099");*/
	try {
		//Context ctx = new InitialContext(env);
		Context ctx = new InitialContext();
		HelloWorldLocal hello = (HelloWorldLocal) ctx.lookup("HelloWorldLocal/remote");
		System.out.println(hello.hello());		
	
	}catch (NamingException ex) {
		ex.printStackTrace();
	}
	
}
===============

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial

at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)

at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)

at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)

at javax.naming.InitialContext.lookup(Unknown Source)

at fontes.HelloClient.main(HelloClient.java:31)

<div class="lightbox-wrapper"><a class="lightbox" href="/uploads/3X/a/f/afffd441492df88873d1a98cee330ac737563ead.jpg_.webp" data-download-href="/uploads/default/afffd441492df88873d1a98cee330ac737563ead" title="2010/6/1/3a4a2b1308f80ffd5fc2c8fe2abef661_113538.jpg_"><img src="/uploads/3X/a/f/afffd441492df88873d1a98cee330ac737563ead.jpg_.webp" width="690" height="500"><div class="meta">
<svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use xlink:href="#far-image"></use></svg>2010/6/1/3a4a2b1308f80ffd5fc2c8fe2abef661_113538.jpg_1058×540 78.4 KB<svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use xlink:href="#discourse-expand"></use></svg>
</div></a></div>
F

Cara… desse forma funciona…

Eu voltei a postar pelo fato de terem me dito em post posterior… Quero saber como utilizar o @EJB

[i]Vc pode usar a anotação @EJB para fazer o lookup e não ter q escrever este monte de código :

Properties env = new Properties();

env.put(Context.SECURITY_PRINCIPAL, guest );

env.put(Context.SECURITY_CREDENTIALS, guest );

env.put(Context.INITIAL_CONTEXT_FACTORY,

org.jboss.security.jndi.JndiLoginInitialContextFactory);

env.put(Context.PROVIDER_URL, jnp://localhost:1099);

Este monte de código fica uma bagunça!

Abraço[/i]

Não consegui rodar utilizando annotation @EJB

Sefo

Qual erro que tá acusando?

Só um palpite:
acredito que o lookup correto seria dessa forma:

Context ctx = new InitialContext();
HelloWorldLocal hello = (HelloWorldLocal) ctx.lookup("HelloWorldLocal/remote");
System.out.println(hello.hello());
Sefo

Tente assim:

public static void main(String[] args) throws NamingException {
		
		try {
                        Properties env = new Properties();   
                        env.put(Context.SECURITY_PRINCIPAL, "guest" );   
                        env.put(Context.SECURITY_CREDENTIALS, "guest" );           
                        env.put(Context.INITIAL_CONTEXT_FACTORY,  "org.jboss.security.jndi.JndiLoginInitialContextFactory");   
                        env.put(Context.PROVIDER_URL, "jnp://localhost:1099");
			Context ctx = new InitialContext(env);
			HelloWorldLocal hello = (HelloWorldLocal) ctx.lookup("HelloWorldLocal/remote");
			System.out.println(hello.hello());		
		
		}catch (NamingException ex) {
			ex.printStackTrace();
		}
		
	}

Se der errado, favor colocar o erro, se der certo não esqueça do RESOLVIDO no titulo do topico, ok? :lol:

Sefo

.

Criado 31 de maio de 2010
Ultima resposta 1 de jun. de 2010
Respostas 10
Participantes 5