Acessar EJb 3 Jboss 5.1

Bom dia .
Galera estou tendo um erro na minha aplicação cliente para acessar um EJB no JBoss.

minha entidade

package br.com.persistence.entity;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name="Usuario",schema="ATHENA")
@NamedQueries({
	@NamedQuery(name="Usuario.findAll",query="SELECT u FROM Usuario u"),
	@NamedQuery(name="Usuario.findById",query="SELECT u FROM Usuario u WHERE id = :id"),
	@NamedQuery(name="Usuario.findByName",query="SELECT u FROM Usuario u WHERE name like :name")
})
public class Usuario implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@SequenceGenerator(name="SEQ_USUARIO", sequenceName="SEQ_GERAL",allocationSize =1,initialValue=1)
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_USUARIO")
	private long id;

	private long expired;

	private String login;

	private String nome;

	private String senha;

	//bi-directional many-to-one association to Grupo
    @ManyToOne
	@JoinColumn(name="GRUPO")
	private Grupo grupo;

    public Usuario() {
    }

	public long getId() {
		return this.id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public long getExpired() {
		return this.expired;
	}

	public void setExpired(long expired) {
		this.expired = expired;
	}

	public String getLogin() {
		return this.login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getNome() {
		return this.nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSenha() {
		return this.senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public Grupo getgrupo() {
		return this.grupo;
	}

	public void setgrupo(Grupo grupo) {
		this.grupo = grupo;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + (int) (id ^ (id >>> 32));
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Usuario other = (Usuario) obj;
		if (id != other.id)
			return false;
		return true;
	}
	
	public String toString(){
		return id+" - "+nome+" Login: "+login;
	}
	
}

A interface

package br.com.enterprise.eao;

import java.util.List;

import javax.ejb.Local;

import br.com.persistence.entity.Usuario;

@Local
public interface UsuarioEao {
	
	public Usuario persist(Usuario usuario);
	
	public void remove(Usuario usuario);
	
	public Usuario findById(long id);
	
	public List<Usuario> findAll();
	
	public List<Usuario> findByName(String name);
	
	public boolean login(Usuario usuario);
	
}

a implementação dessa interface

package br.com.enterprise.eao.impl;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import br.com.enterprise.eao.UsuarioEao;
import br.com.persistence.entity.Usuario;

@Stateless
public class UsuarioEaoImpl implements UsuarioEao{
	
	@PersistenceContext(unitName="AthenaPersistence")
	protected EntityManager entityManager;
	
	@SuppressWarnings("unchecked")
	public List<Usuario> findAll() {
		Query query = entityManager.createNamedQuery("Usuario.findAll");
		List<Usuario> usuarios = query.getResultList();
		return usuarios;
	}

	public Usuario findById(long id) {
		Query query = entityManager.createNamedQuery("Usuario.findById");
		Usuario usuario = (Usuario)query.setParameter("id",id).getSingleResult();
		return usuario;
	}

	@SuppressWarnings("unchecked")
	public List<Usuario> findByName(String name) {
		Query query = entityManager.createNamedQuery("Usuario.findByName");
		List<Usuario> usuarios = query. setParameter("name",name).getResultList();
		return usuarios;
	}

	public boolean login(Usuario usuario) {
		Usuario user = (Usuario)entityManager.find(Usuario.class,usuario);
		if (user.equals(usuario)){
			return true;
		}
		return false;
	}

	public Usuario persist(Usuario usuario) {
		entityManager.persist(usuario);
		return usuario;
	}

	public void remove(Usuario usuario) {
		entityManager.remove(usuario);
	}

}

acessando via cliente

import javax.naming.InitialContext;
import javax.naming.NamingException;

import br.com.enterprise.eao.UsuarioEao;


public class Execute {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			UsuarioEao usuarioEao = (UsuarioEao)new InitialContext().lookup("UsuarioEaoImpl");
			System.out.println(usuarioEao);
		}catch (NamingException e) {
			e.printStackTrace();
		}

	}

}

meu jndi.properties
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost:1099

e o erro que aparece
Exception in thread “main” java.lang.ClassCastException: org.jnp.interfaces.NamingContext cannot be cast to br.com.enterprise.eao.UsuarioEao
at Execute.main(Execute.java:18)

ele não está conseguindo fazer o Cast.
isso que eu não entendo
no deploy no Jboss, o meu Ejb sobe certinho, já verifiquei no web-console
alguém sabe oque acontece

Tenta colocar um /local dentro do seu lookup.

Se não der, tente trocar a

por

Se adiciono o /Local aparece o erro que ele nem acha.
Se mudai a url do servidor o erro continua o mesmo.
Não consigo entender oque está errado.

Atenção que o “L” de /local deve ser em letra minusculas, conforme o Andre Brito demonstrou: “UsuarioEaoImpl/local”

Para vc ter certeza do que caminho que esta cadastrado no JBoss, dê uma olhada na árvore JNDI:
Vá em localhost:8080/jmx-console e procure pela url “service=JNDIView”. Na página que abrir procure pela ação “list()” e clique em invoke.

Isso vai lhe mostrar toda a árvore JNDI que esta no JBoss, procure por seu EJB nesta estrutura, ela vai te dar exatamente como ele esta cadastrado no JBoss.
Lembrando novamente que esta estrutura é uma árvore, portanto se vc ver seu EJB como:

± seuProjeto
| ± seuEJB
| | ± remote

… significa que seu lookup pelo EJB deve ser em “seuProjeto/seuEJB/remote”.

Se o EJB esta em “ear”, o JBoss vai colocar o valor dentro de um jndi que começa com o nome do projeto EAR, se o deploy do EJB for em “jar”, ele provavelmente vai começa com o nome do EJB mesmo. Nos dois casos ele termina com uma string que é dependente do tipo de sua interface, local ou remota

Para saber mais sobre os nomes de JNDI no JBoss para EJB3 e como alterar esses padrões consulte a seguinte página:
http://docs.jboss.org/ejb3/app-server/tutorial/jndibinding/jndi.html

[]s