# Wie bekomme ich denn einen Zugriff auf die EJB ???



## LastUnicorn (10. Jun 2004)

Hallo,

ich will mir gerade EJB beibringen und stosse gleich mal auf ein Problem. Um den Ablauf des deploys und so zu kennen habe ich einfach mal ein Beispiel aus einem Buch abgetippt. (Session Beans) die Session, SessionHome und SessionImpl Klasse hab ich dann über das Deployment Tool von Java zusammengefasst zu einem ear file und habe das dann deployd. In der Info steht auch, dass diese gestartet ist mit dem JNDI Namen "HelloWorld" (wer hätte das gedacht)

Nun hab ich eine Client Klasse geschrieben:


```
public class TestHallo {
    
    /** Creates a new instance of TestHallo */
    public TestHallo() 
    {
        
    }
    
    public static void main(String[] args)
    {
        try
        {           
            
            // JNDI Namenskontext erstellen
            Context context = new InitialContext();
            
            // nach HelloWorld suchen
            HelloWorldSessionHome home = (HelloWorldSessionHome) 
            PortableRemoteObject.narrow(context.lookup("HelloWorld"), HelloWorldSessionHome.class);
        
            // neue Session Bean erstellen
            HelloWorldSession session = (HelloWorldSession) home.create();

	    System.out.println("Default Greeting is : " + session.getGreeting());

            session.remove();
        }
        catch (Throwable t)
        {
            t.printStackTrace();
        }
    }
    
}
```

wie man sieht hab ich im LookUp auch "HelloWorld" aber ich bekomme immer folgende Exception:

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(NamingManager.java:640)
        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243)
        at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:280)
        at javax.naming.InitialContext.lookup(InitialContext.java:347)
        at SessionBeans.TestHallo.main(TestHallo.java:35)


Jetzt weiss ich nicht was mein Fehler ist. Ich hab schon durchs Buch geblättert und im J2ee Tutorial nachgesehen aber entweder erschlagen die einen mit Infos oder es steht garnichts dazu da. Das richtige hab ich leider noch nicht raus gefunden. 

Muss ich vielleicht irgendwo die Domain angeben? Momentan versuche ich das aus dem Netbeans raus zu starten. Kann es sein, dass ich die Klasse mit irgendeinem Parameter aufrufen muss ?


----------



## LastUnicorn (10. Jun 2004)

Hat denn wirklich keiner Ahnung davon ? *seufz*


----------



## nollario (11. Jun 2004)

hast du eine jndi.properties datei? darin müssen die jndi einstellungen gemacht werden (initial context etc.)


----------



## Guest (11. Jun 2004)

danke,

die muss ich dann sicher auf der client seite setzen oder ? Bis jetzt habe ich da noch keine


----------



## nollario (11. Jun 2004)

jep... und die sieht ungefähr so aus (für localhost, jboss als appserver):


```
### JBossNS properties
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=jnp://localhost:1099
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
```

müsstest du eben anpassen... welchen server nutzt du denn?


----------



## LastUnicorn (11. Jun 2004)

momentan benutze ich den Sun Application Server. Aber auch nur weil sich mein Buch darauf bezieht. Wenn ich das erstmal einigermaßen auf die Reihe bekommen habe, dann will ich auf den JBoss umsteigen weil ich mit dem dann ab November auch arbeiten werde. 

Vielleicht steig ich auch gleich um. Aber das sollte ja eigentlich egal sein. Der Server scheint das ja deployd zu haben nur ich komm halt nicht rauf (localhost). Die jndi.properties....muss die einfach irgendwo in den ClassPath oder sucht er danach explizit an irgendeinem platz ?

Auf jeden fall ist die Hilfestellung total nett


----------



## nollario (11. Jun 2004)

schau mal unter folgender url nach:

http://www.developer.com/java/ent/article.php/10933_2215571_4

es gibt 2 möglichkeiten:

- eigenschaften in einem file setzen
- eigenschaften direkt im code setzen

das file sollte dann dort liegen, so dass dein client ihn nutzen kann... classpath denke ich sollte tun... das ist mords die fummelei! ich weiss, aber du schaffst das schon


----------



## LastUnicorn (11. Jun 2004)

Hey, na wenn ich damit das nicht hin bekomme, dann ist mir wahrscheinlich auch nicht mehr zu helfen *g. Ich werd mir das am Wochenende mal durchprobieren  :### . Danke, die Seite ist ein super Tip


----------

