Avatar billede howisch Nybegynder
05. marts 2004 - 11:09 Der er 11 kommentarer og
1 løsning

Forbindelse mellem Servlets og session beans

Dette er koden jeg skriver for at få forbindelse fra servlet til min session bean:

try {   
InitialContext initCtx = new InitialContext();
Object homeObject = initCtx.lookup ("java:comp/env/ejb/OpretHome");
opretHome = (OpretHome)PortableRemoteObject.narrow(homeObject,OpretHome.class);
} catch (NamingException ex) {
ex.printStackTrace();
}
Og her er så den fejlmeddelelse jeg får tilbage:

javax.naming.NameNotFoundException: Name ejb is not bound in this Context

Hvad gør jeg forkert?
Avatar billede arne_v Ekspert
05. marts 2004 - 18:54 #1
java:comp/env/ejb/OpretHome er ikke i din JNDI server !

Og for at kunne sige hvorfor den ikke er det skal vi vide hvilken app-server
du bruger og vi skal se de app-server specifikke deployment descriptorer.
Avatar billede howisch Nybegynder
08. marts 2004 - 08:36 #2
Hej.
Vi benytter os af Tomcat 4.1.29.
Kan du uddybe lidt nærmere hvad det er du gerne vil se? Web.xml filen?
Avatar billede arne_v Ekspert
08. marts 2004 - 08:51 #3
Det er EJB siden jeg er interesseret i.
Avatar billede howisch Nybegynder
08. marts 2004 - 08:54 #4
Her er koden for de to sessionbeans:

<?xml version="1.0" encoding="UTF-8"?>
<!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 id="ejb-jar_ID">
    <display-name>admPMPsessionEJB</display-name>
    <enterprise-beans>
        <session id="Opret">
            <ejb-name>Opret</ejb-name>
            <home>adm.pmp.cmp.OpretHome</home>
            <remote>adm.pmp.cmp.Opret</remote>
            <ejb-class>adm.pmp.cmp.OpretBean</ejb-class>
            <session-type>Stateless</session-type>
            <transaction-type>Container</transaction-type>
            <ejb-local-ref id="EJBLocalRef_1078303895453">
                <ejb-ref-name>ejb/Afdeling</ejb-ref-name>
                <ejb-ref-type>Entity</ejb-ref-type>
                <local-home>adm.pmp.cmp.AfdelingLocalHome</local-home>
                <local>adm.pmp.cmp.AfdelingLocal</local>
                <ejb-link>admPMPEJB.jar#Afdeling</ejb-link>
            </ejb-local-ref>
        </session>
        <session id="Stateful">
            <ejb-name>Stateful</ejb-name>
            <home>adm.pmp.cmp.StatefulHome</home>
            <remote>adm.pmp.cmp.Stateful</remote>
            <ejb-class>adm.pmp.cmp.StatefulBean</ejb-class>
            <session-type>Stateful</session-type>
            <transaction-type>Container</transaction-type>
            <ejb-ref id="EjbRef_1078306081265">
                <ejb-ref-name>ejb/AfdelingRemote</ejb-ref-name>
                <ejb-ref-type>Entity</ejb-ref-type>
                <home>adm.pmp.cmp.AfdelingHome</home>
                <remote>adm.pmp.cmp.Afdeling</remote>
                <ejb-link>admPMPEJB.jar#Afdeling</ejb-link>
            </ejb-ref>
            <ejb-local-ref id="EJBLocalRef_1078316572453">
                <ejb-ref-name>ejb/Afdeling</ejb-ref-name>
                <ejb-ref-type>Entity</ejb-ref-type>
                <local-home>adm.pmp.cmp.AfdelingLocalHome</local-home>
                <local>adm.pmp.cmp.AfdelingLocal</local>
                <ejb-link>admPMPEJB.jar#Afdeling</ejb-link>
            </ejb-local-ref>
        </session>
    </enterprise-beans>
    <assembly-descriptor>
        <container-transaction>
            <method>
                <ejb-name>Opret</ejb-name>
                <method-intf>Remote</method-intf>
                <method-name>getNavn</method-name>
                <method-params>
                    <method-param>int</method-param>
                </method-params>
            </method>
            <trans-attribute>Required</trans-attribute>
        </container-transaction>
    </assembly-descriptor>
</ejb-jar>
Avatar billede howisch Nybegynder
08. marts 2004 - 12:04 #5
Var det det du skulle bruge? Tror du at du kan hjælpe os med problemet?
Avatar billede arne_v Ekspert
08. marts 2004 - 12:11 #6
Ikke helt.

Det er JNDI navnet som er kritisk.

Og det defineres normalt den app-server specifikke deployment descriptor.

Hvilken container kører EJB'erne i ?

Hvordan ser den app-server specifikke deployment descriptor ud ?
Avatar billede howisch Nybegynder
08. marts 2004 - 13:04 #7
Vi har to EJB-projekter. Et indeholdende entity beans og et andet indeholdende session beans.

Vi har også to servere. En Websphere test environment 5.1 og en Tomcat v4.1 local server.

Hvad er det for en deployment descriptor du vil se?
Avatar billede arne_v Ekspert
08. marts 2004 - 13:09 #8
Når man deployer sin EJB får den et navn i JNDI træet.

Det navn angiver man normalt i en app-server specifik deployment
descriptor (hvis ikke får den et default navn).

Og spørgsmålet her er om EJB'en Opret har JNDI navn java:comp/env/ejb/OpretHome ...
Avatar billede arne_v Ekspert
08. marts 2004 - 13:12 #9
I WebSphere plejer de at hedde:
  ibm-ejb-jar-bnd.xmi
  ibm-ejb-jar-ext.xmi
Avatar billede arne_v Ekspert
08. marts 2004 - 13:12 #10
Men har I sat Tomcat op til at bruge JNDI træet i WebSphere ?
Avatar billede howisch Nybegynder
08. marts 2004 - 13:27 #11
Vi fandt det korrekte jndiName og nu virker det bare. Tusind tak for hjælpen.
Avatar billede arne_v Ekspert
08. marts 2004 - 13:31 #12
Et svar såfremt I mener at jeg har hjulpet jer lidt på rette vej
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester