Acessar um EJB dentro do EAR a partir de um Servlet separado

Olá pessoal,

primeiramente desculpa pela pergunta hehehhe

Então, estou com um problema, tenho um projeto EAR, onde tem minhas classes EJB,
e eu quero fazer um cliente que acesse via local ou remote de um Servlet, esse cliente está em outro projeto.
Esse mesmo EJB, via remote e com um main() de uma aplicação Desktop, ele acesse, porém em Servlet ele não acessa.

BEAN:

/**
 * TesteSession
 * 
 * @ejb.bean name = "TesteBusiness" jndi-name = "TesteRemote" view-type =
 *           "remote" type = "Stateless"
 */
public class TesteSessionBean implements SessionBean {

	private static final long serialVersionUID = 1L;

	/**
	 * Teste/**
	 * 
	 * @param long cdEmpresa1
	 * @param long cdEmpresa2
	 * @return
	 * 
	 * @ejb.interface-method
	 */
	public void teste(long cdEmpresa1, long cdEmpresa2) {
		System.out.println(">>>>>>>>>>>"+cdEmpresa1+"<=>"+cdEmpresa2);
	}
	
	/**
	    * @ejb.create-method
	    */
	public void ejbCreate() throws CreateException {
	}

	@Override
	public void ejbActivate() throws EJBException, RemoteException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void ejbPassivate() throws EJBException, RemoteException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void ejbRemove() throws EJBException, RemoteException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void setSessionContext(SessionContext arg0) throws EJBException,
			RemoteException {
		// TODO Auto-generated method stub
		
	}

}

HOME (gerado pelo XDoclet):

/**
 * Interface Home para TesteBusiness.
 */
public interface TesteBusinessHome
   extends javax.ejb.EJBHome
{
   public static final String COMP_NAME="java:comp/env/ejb/TesteBusiness";
   public static final String JNDI_NAME="TesteRemote";

   public com.nexxera.compromisso.web.business.ejb.session.TesteBusiness create()
      throws javax.ejb.CreateException,java.rmi.RemoteException;

}

REMOTA (gerado pelo XDoclet):

/**
 * Interface Remota para TesteBusiness.
 */
public interface TesteBusiness
   extends javax.ejb.EJBObject
{
   /**
    * Teste/**
    * @param long cdEmpresa1
    * @param long cdEmpresa2
    * @return 
    */
   public void teste( long cdEmpresa1,long cdEmpresa2 )
      throws java.rmi.RemoteException;

}

EJB-JAR.xml

<?xml version="1.0" encoding="iso-8859-1"?>

<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">

<ejb-jar >

   <description><![CDATA[Sem Descri&#65533;&#65533;o.]]></description>
   <display-name>Gerado pelo XDoclet</display-name>

   <enterprise-beans>
      <session >
         <description><![CDATA[TesteSession]]></description>

         <ejb-name>TesteBusiness</ejb-name>

         <home>com.nexxera.compromisso.web.business.ejb.session.TesteBusinessHome</home>
         <remote>com.nexxera.compromisso.web.business.ejb.session.TesteBusiness</remote>
         <ejb-class>com.nexxera.compromisso.web.business.ejb.session.TesteSessionBean</ejb-class>
         <session-type>Stateless</session-type>
         <transaction-type>Container</transaction-type>

      </session>
   </enterprise-beans>
</ejb-jar>
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN" "http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd">

<jboss>

   <enterprise-beans>
      <session>
         <ejb-name>TesteBusiness</ejb-name>
         <jndi-name>TesteRemote</jndi-name>

        <method-attributes>
        </method-attributes>
      </session>

    <!--
      write a merge file jboss-webservices.ent for webservice-description 
    -->

   </enterprise-beans>

     <!--
       To specify your own assembly descriptor info here, add a file to your
       XDoclet merge directory called jboss-assembly-descriptor.xml that contains
       the <assembly-descriptor></assembly-descriptor> markup.
     -->
   <assembly-descriptor>
    <!-- message destinations -->
     <!--
       To specify additional message-destination elements, add a file in the merge
       directory called jboss-message-destinations.ent that contains them.
     -->
   </assembly-descriptor>

   <resource-managers>
   </resource-managers>

  <!--
    | for container settings, you can merge in jboss-container.xml
    | this can contain <invoker-proxy-bindings/> and <container-configurations/>
  -->

</jboss>

SERVLET CLIENTE:

public class Consumer extends HttpServlet {
	
	private static final long serialVersionUID = 1L;

//	public static void main(String[] args) {
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException {
		String param = req.getParameter("x");
//		String param = "ejb/EmployeeFacadeRemote";
		
		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", "localhost:1099");
		try {
			Context context;
			context = new InitialContext(properties);
//			Object object = context.lookup(param);
//			TesteBusinessHome efrh = (TesteBusinessHome) PortableRemoteObject.narrow(object, TesteBusinessHome);
			TesteBusinessHome efrh = (TesteBusinessHome) context.lookup(param);
			efrh.create().teste(123l,321l);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

Alguém pode me ajudar? Qualquer ajuda será de muita ajuda.

Agradeço.

Att,
Jhonatan Serafim.

Esqueci de informar…
o erro que me ocorre é:

16:32:49,833 ERROR [STDERR] Caused by: javax.ejb.EJBException: Invalid invocation, check your deployment packaging, method=public abstract com.nexxera.compromisso.web.business.ejb.session.TesteBusiness com.nexxera.compromisso.web.business.ejb.session.TesteBusinessHome.create() throws javax.ejb.CreateException,java.rmi.RemoteException
16:32:49,833 ERROR [STDERR] 	at org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invokeHome(StatelessSessionContainer.java:175)
16:32:49,833 ERROR [STDERR] 	at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invokeHome(CachedConnectionInterceptor.java:189)
16:32:49,833 ERROR [STDERR] 	at org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invokeHome(StatelessSessionInstanceInterceptor.java:98)
16:32:49,833 ERROR [STDERR] 	at org.jboss.ejb.plugins.CallValidationInterceptor.invokeHome(CallValidationInterceptor.java:56)
16:32:49,833 ERROR [STDERR] 	at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:125)
16:32:49,833 ERROR [STDERR] 	at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:350)
16:32:49,833 ERROR [STDERR] 	at org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptorCMT.java:161)
16:32:49,833 ERROR [STDERR] 	at org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityInterceptor.java:145)
16:32:49,833 ERROR [STDERR] 	at org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:132)
16:32:49,833 ERROR [STDERR] 	... 42 more

[corrigido]
Para acessar EJBs entre apps. distintas, além de você implementar a interface remota, deve-se fazer o lookup remoto.
Fiz isso utilizando o OC4J, não deve ter muita diferença para o JBoss.
Não tenho um exemplo aqui para lhe mostrar! Mas dá uma catada na documentação do Jboss que você deve encontrar algo!
[/corrigido]