# Probleme mit Tutorial



## raboffel (11. Jul 2005)

Hi,
Ich versuche mich gerade im J2EE-Tutorial-Lesson 2 Stateless Session Bean. Leider bekomme ich bei der Ausführung immer folgenden Fehler:

javax.servlet.ServletException: BonusCalculatorHome could not be created due to BonusCalculatorHome not found.

Der Code dazu ist:

<code>
Context context = new InitialContext();
    Object homeObject = context.lookup("BonusCalculatorHome");
    bonusCalculatorHome = (BonusCalculatorHome)PortableRemoteObject.narrow(
        homeObject,
        BonusCalculatorHome.class);
</code>

Die Beschreibung des Deploytools zeigt die GUI etwas anders und manche Schritte sind nicht erreichbar, daher bin ich mir nicht sicher, was ich vergessen haben könnte, obwohl ich alles nach bestem Gewissen eingetragen habe 

Wo liegt das Problem?


----------



## Bleiglanz (11. Jul 2005)

welches Tutorial ist das denn?

Ist das ein Servlet in einer anderen Webapp (oder einer andren VM)?
Dann musst du den JNDI-Context richtig konfigurieren...
Welcher Appserver eigentlich? Für die Sun RI vielleicht

```
Properties jp = new Properties();
 	        jp.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.cosnaming.CNCtxFactory");
  	        jp.put(Context.PROVIDER_URL,"iiop://localhost:3700/");
            Context initial = new InitialContext(jp);
```

Oder ist das Servlet in einem .war das in einem .ear gemeinsam mit den EJB-Klassen liegt?

in diesem Fall musst du die web.xml anpassen und einen Lookup Namen deklarieren und den ENC verwenden

```
<ejb-local-ref>
...
</ejb-local-ref>
```


----------



## Guest (11. Jul 2005)

hi Bleiglanz,
danke für die schnelle Antwort.

http://java.sun.com/developer/onlineTraining/J2EE/Intro2/session_bean/session.html

Ich benutze auch den Sun App Server. 

Wenn ich es richtig verstanden habe liegt das EJB und das Servlet im gleichen .ear

web.xml des Servlets (Ausschnitt)
<code>
<ejb-ref>       
 <ejb-ref name>com.test.bonuscalculator.BonusCalculatorBean</ejb-ref-name>       
 <ejb-ref-type>Session</ejb-ref-type>       
 <home>com.test.bonuscalculator.BonusCalculatorHome</home> <remote>com.test.bonuscalculator.BonusCalculator</remote>    </ejb-ref>


</code>
Der JNDI-Eintrag war falsch gesetzt, jetzt geht es. 

Die Zeile 

<code>
Object homeObject = context.lookup("BonusCalculatorHome"); 
</code>

hat mich verwirrt, eigentlich gibt man unter context.lookup nicht den Namen des Home-Objects an sondern den der Bean, bzw. der JNDI Eintrag der EJB (also <ejb-name> in descriptor des EJBs), richtig?

Bin noch blutiger Anfänger, kann mir jemand bestätigt dass ich so richtig denke?


----------



## Bleiglanz (11. Jul 2005)

genau, das

```
<ejb-ref name>com.test.bonuscalculator.BonusCalculatorBean
```
stiftet nur Verwirrung. Als JNDI Namen kannst jeden x-beliebigen String verwenden, es muss noch nicht einmal der ejb-name aus der ejb-jar.xml sein

es gibt da mindestens 3 Namen die du dir merken musst

1) der Name der EJB (<ejb-name>)

2) der "physikalische" JNDI Name (also der Name, unter dem die EJB tatsächlich im JNDI-Baum gebunden ist)

3) der "relative" JNDI Name: jede Komponente hat eine eigene persönliche Sicht auf den JNDI-Baum (beginnt immer mit java:comp/env/), damit kann man nochmal eine zusätzliche Indirektion einbauen und nochmal einen neuen Namen vergeben

alle diese Strings sind aber völlig frei wählbar und haben nichts mit dem packagenamen zu tun


----------



## Guest (11. Jul 2005)

ah ok, vielen dank vorerst mal !


----------

