2010-10-22 29 views
0

Je suis en train de développer une application Basic EJB3 sur JBOSS 4.2 dans EclipseComment accéder à un EJB?

J'ai créé un projet EJB dans Eclipse.

Voici mes interfaces distantes et locales.

package com.test; 
import javax.ejb.Local; 

@Local 
public interface HelloWorldLocal 
{ 
    public String getGreeting(); 
} 

package com.test; 
import javax.ejb.Remote; 

@Remote 
public interface HelloWorldRemote 
{ 
    public String getGreeting(); 
} 

et ma mise en œuvre de ejb est

package com.test; 
import javax.ejb.Stateless; 

@Stateless 
public class HelloWorld implements HelloWorldRemote, HelloWorldLocal { 


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

public String getGreeting() { 
    // TODO Auto-generated method stub 
    return "First EJB People"; 
} 

} 

J'ai déployé cela comme une JAR explosé dans JBoss et il fonctionne très bien.

Ma première question est:

Que dois-je ajouter à cette explosion pot?

En second lieu, je créé un client autonome et a ajouté le pot ci-dessus à son classpath

Le code client est le suivant package

com.testejb;

import java.io.FileInputStream; import java.util.Properties;

import javax.naming.InitialContext;

public class TestBean { 

/** 
* @param args 
*/ 
public static void main(String[] args) 
{ 
    // TODO Auto-generated method stub 
     HelloWorldRemote getMess = null; 
     try { 
      Properties props = new Properties(); 
      Properties props = new Properties(); 
      props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory"); 
      props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming"); 
      props.setProperty("java.naming.provider.url", "localhost:1099"); 

      InitialContext ic = new InitialContext(props); 

      // 


      getMess = (HelloWorldRemote) ic.lookup("HelloWorldRemote/remote"); 
      System.out.println(getMess.getGreeting()); 
    } catch (Exception e) 
    { 
     // TODO: handle exception 
     e.printStackTrace(); 
    } 

} 

}

Le nom du pot est FirstEJB. J'ai essayé la recherche en tant que FirstEJB/HelloWorldRemote/remote.

Mais quand je lance le programme que j'obtiens l'erreur

javax.naming.NameNotFoundException: HelloWorldRemote not bound 

Si je tape la recherche comme HelloWorld/i obtenir à distance l'erreur

Caused by: java.io.InvalidClassException: org.jboss.ejb3.remoting.BaseRemoteProxy; local class incompatible: stream classdesc serialVersionUID = 1126421850898582900, local class serialVersionUID = -2711693270411201590 

Répondre

1

Que faire d'autre, je dois ajouter à ce pot explosé?

Rien, c'est utilisable.

J'ai essayé le regarder comme FirstEJB/HelloWorldRemote/le nom JNDI distant

Avec JBoss, sera:

<myEarName>/<EJB-Name>/remote 

Lorsque les paramètres par défaut EJB-Name au nom Bean si non spécifié. Donc, dans votre cas, sans utiliser un emballage EAR, le nom JNDI doit être:

HelloWorld/remote 

Cela devrait être enregistré dans les journaux du serveur au moment du déploiement par la voie.

Si je tape la recherche sous HelloWorld/remote j'obtiens l'erreur (...)

Le nom JNDI utilisé pour la recherche est correcte, cette erreur est un autre problème qui ressemble beaucoup à EJBTHREE-1118. Pourriez-vous essayer avec JBoss 4.2.3.GA?