Newsgroup: it.comp.java
Titolo: EJB e JNDI

Salve a tutti , mi sto cimentando con lo sviluppo di EJb .
Ho creato il mio primo Session Bean e l'ho deployato sul server (Quello
incluso nel pacchetto Sun j2ee 1.3 ).
Addesso però non ho idea di come testarlo (in un applicazione stand alone)
poichè non so quali parametri passare all' initial Context per farlo puntare
al mio server j2ee. C'è qualche anima pia che mi può mandare un esempio   ?
Ciao
Marco



se hai sviluppato le intefacce remote, ad esempio:
mypackage.mysessionEJB
mypackage.mysessionEJBHome
mypackage.mysessionEJBBean
con nome JNDI: sessionEJB1
e il classico public void HelloWorld()
    try{
      java.util.Hashtable env = new java.util.Hashtable();
      env.put("java.naming.factory.initial","com.sun.jndi.cosnaming.CNCtxFactory");
      env.put("java.naming.provider.url", "iiop://<host dove gira j2eeri>:1050");
      InitialContext ic = new InitialContext(env);
      Object objRef = ic.lookup("sessionEJB1");
      mysessionEJB sessione = ((mysessionEJBHome)PortableRemoteObject.narrow(objRef,
        mypackage.mysessionEJBHome.class)).create();
      sessione.HelloWorld();
    } catch (NamingException ex) {
    } catch (CreateException ex) {
    } catch (RemoteException ex) {
    } 
  }
poi scarichi dalla porta 9191 dell'host dove gira j2eeri il jar con gli
Stub per l'RMI (se hai chiamato l'app. miaApp si chiama miaAppClient.jar).
Dopo aver compilato il tuo client lo fai girare come un normale prog. java
includendo nel classpath il jar scaricato.
Per la compilazione puoi usare sia il jar scaricato sia i sorgenti
compilati, come preferisci.

Ho fatto esattamente quanto mi hai detto .
Il client però mi va in eccezione al momento di chiamare tramite la remote
il metodo hello() del bean.
Io di questa eccezione sinceramente ci ho capito poco.
Se potessi dare un occhio te ne sarei grato.
Ciao
Marco
package examples;
import examples.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Properties;
public class HelloClient {
public static void main(String[] args) throws Exception {
java.util.Hashtable env = new java.util.Hashtable();
      env.put("java.naming.factory.initial","com.sun.jndi.cosnaming.CNCtxFac
tory");
      env.put("java.naming.provider.url", "iiop://localhost:1050");
      InitialContext ctx = new InitialContext(env);
Object obj = ctx.lookup("HelloHome");
HelloHome home = (HelloHome)javax.rmi.PortableRemoteObject.narrow(obj,
HelloHome.class);
Hello hello = home.create();
System.out.println(hello.hello());
hello.remove();
}
}
Exception in thread "main" java.rmi.RemoteException: CORBA BAD_OPERATION 0
No; n
ested exception is:
        org.omg.CORBA.BAD_OPERATION:   vmcid: 0x0  minor code: 0  completed:
No
        at
com.sun.corba.se.internal.iiop.ShutdownUtilDelegate.mapSystemExceptio
n(ShutdownUtilDelegate.java:134)
        at javax.rmi.CORBA.Util.mapSystemException(Util.java:65)
        at examples._Hello_Stub.hello(Unknown Source)
        at examples.HelloClient.main(HelloClient.java:71)
Caused by: org.omg.CORBA.BAD_OPERATION:   vmcid: 0x0  minor code: 0
completed:
No
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
        at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstruct
orAccessorImpl.java:39)
        at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingC
onstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
        at java.lang.Class.newInstance0(Class.java:308)
        at java.lang.Class.newInstance(Class.java:261)
        at
com.sun.corba.se.internal.iiop.messages.ReplyMessage_1_2.getSystemExc
eption(ReplyMessage_1_2.java:90)
        at
com.sun.corba.se.internal.iiop.ClientResponseImpl.getSystemException(
ClientResponseImpl.java:105)
        at
com.sun.corba.se.internal.POA.GenericPOAClientSC.invoke(GenericPOACli
entSC.java:129)
        at org.omg.CORBA.portable.ObjectImpl._invoke(ObjectImpl.java:457)
        at examples._Hello_Stub.hello(Unknown Source)
        ... 1 more
Press any key to continue...

A me questo tipo di errori capitano quando c'è un disallineamento tra il
codice presente sull'AS j2eeri e quello presente sul client .jar.
Tieni presente che ogni volta che cambi la firma dei metodi nel helloBean.java
devi aggiornare anche l'interfaccia hello.java (helloHome.java di solito
non cambia mai), compilare tutto, aggiornare l'ear e deploiare di nuovo,
ricaricarti helloClient.jar e poi puoi continuare.
Quindi controlla che la remote e il Bean file siano allineati, compila
tutto, aggiorna l'ear (il deploytool ha un pulsante update & redeploy).
Un'altro consiglio: prima di eseguire il deploy, fai sempre una passata
con il verifier, per controllare eventuali problemi.
In ogni caso se vuoi postare il codice posso dargli un'occhiata.
