Avatar billede javanewbie11 Nybegynder
08. marts 2003 - 19:11 Der er 29 kommentarer og
1 løsning

JBoss/Tomcat i JBuilder 8 (JNDI lookup)

Jeg har et problem med min JNDI lookup fra min servlet på Webserver (Tomcat 4.0). Den skal lookup en bean på appServer (JBoss 3.2.0 RC2).
Den kaster følgende exception:

javax.naming.CommunicationException.  Root exception is java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
    java.rmi.UnmarshalException: error unmarshalling arguments;

Nogen der kan hjælpe?
Avatar billede arne_v Ekspert
08. marts 2003 - 19:16 #1
1)  Check om jbossall-client.jar er i servlettens classpath.
Avatar billede javanewbie11 Nybegynder
08. marts 2003 - 19:17 #2
Det er den!
Avatar billede arne_v Ekspert
08. marts 2003 - 19:18 #3
2) Check om dine JNDI properties er korrekte.

JBoss 3.0.x bruger:

java.naming.factory.initial = org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs = org.jnp.interfaces
java.naming.provider.url = localhost:1099
Avatar billede javanewbie11 Nybegynder
08. marts 2003 - 19:20 #4
Hvor gør jeg lige det?
Avatar billede arne_v Ekspert
08. marts 2003 - 19:21 #5
Og nu skriver du JBuilder.

Jeg har haft store problemer med at connecte til JBoss 3.0.x
fra et client-program som kørte inde fra JBuilder 7 Enterprise Edition.

Kører du servleten fra JBuilder ?
Avatar billede arne_v Ekspert
08. marts 2003 - 19:23 #6
Du kan enten lave en:
  WEB-INF/classes/jndi.properties
med de 3 linier eller hardcode med:
  System.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
  System.setProperty("java.naming.factory.url.pkgs", "org.jnp.interfaces");
  System.setProperty("java.naming.provider.url", "localhost:1099");
Avatar billede javanewbie11 Nybegynder
08. marts 2003 - 19:25 #7
Det foregår på den måde at Tomcat indeholder html sider og en jsp side. Fra html siden kaldes til servletten. Der senere skal dirigere videre til en jsp side som klient får tilbage på sit request.

Jeg kører html siden inde fra JBuilder og sender mit request, der går den ned under init() metoden i servletten. som sagt JNDI lookup!
Avatar billede arne_v Ekspert
08. marts 2003 - 19:30 #8
Har du en standalone Tomcat eller en JBoss+Tomcat ?

Muligvis kunne det være interesant at prøve at køre det helt udenfor
JBuilder.

Ihvertfald hvis ikke JNDI properties kan løse problemet.
Avatar billede javanewbie11 Nybegynder
08. marts 2003 - 19:32 #9
Har standalone JBoss og kører med JBuilder 8's integrede Tomcat 4.0.6
Avatar billede arne_v Ekspert
08. marts 2003 - 19:35 #10
Prøv med de JNDI properties.

Virker det så er det fint.

Hvsi ikke synes jeg du skulle prøve at hente en standalone
Tomcat 4.1.18 og prøve at deploye den web app på den (helt
uændret).
Avatar billede javanewbie11 Nybegynder
08. marts 2003 - 19:37 #11
Jeg laver en jndi.properties.ini-fil og placerer den i class biblioteket med servletten .class filen. Er det korrekt?
Avatar billede arne_v Ekspert
08. marts 2003 - 19:38 #12
Den skal ligge i WEB-INF/classes.

Der ligger dine servlets også hvis de ligger i default package.
Avatar billede mfalck Praktikant
08. marts 2003 - 20:48 #13
hm - bare lige en strøtanke - implementerer bønnen Serializable-interfacet? Det er jo en "java.rmi.UnmarshalException: error unmarshalling arguments", så noget kunne tyde på at den ikke kan lave objekterne om.
Avatar billede arne_v Ekspert
08. marts 2003 - 21:45 #14
Det er ganske rigtigt, at alle argumenter til metoder i remote
og home interfaces skal være serializable.

Men jeg har forstået at det er JNDI lookup af home interfacet
der fejler.

Og det er jo container generated kode, så det skal nok være
serializable.
Avatar billede mfalck Praktikant
09. marts 2003 - 09:17 #15
ok - den eneste grund til at jeg nævner det er at jeg på et tidspunkt også fik en unmarshalException og der var det pga jeg prøvede at overføre objekter som ikke implementerede Serializable-interfacet - men det var under WebLogic (erfaringen siger mig at jeg ikke bør drage Arnes indlæg i tvivl, til trods for Descartes dicto om at man bør tvivle om alt :-) ).
Avatar billede arne_v Ekspert
09. marts 2003 - 10:04 #16
Jeg tager nu også fejl engang imellem.

:-)

Hvis vi deler en EJB interaktion op i 3 dele:
  home = JNDI lookup
  bean = home.create/find
  bean.xxxx
så er manglende serializable også en glimrende forklaring, hvis man får fejlen
på en af de sidste to operationer.

Men bare ikke på den første operation.
Avatar billede javanewbie11 Nybegynder
09. marts 2003 - 16:02 #17
mfalck:

Ved du hvor i JBuilder jeg ser om bønnen implementerer Serializable?
Avatar billede mfalck Praktikant
09. marts 2003 - 16:25 #18
i klasse definitionen skal du skrive

public class bønnenavn implements java.io.Serializable
Avatar billede javanewbie11 Nybegynder
11. marts 2003 - 11:24 #19
Skal jeg læse property filen i servlettens init metode inden jeg laver min initialcontext og jndi lookup?
Avatar billede arne_v Ekspert
11. marts 2003 - 13:57 #20
Du behøver slet ikke læse jndi.properties i din kode !

Det sørger noget af SUN koden for (InitialContext eller
noget den kalder).
Avatar billede javanewbie11 Nybegynder
11. marts 2003 - 15:30 #21
jndi.properties ligger i mappen...

Men der opstår stadig exception!!!!!

Context ok!

Catched Exception

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

    at org.apache.naming.NamingContext.lookup(NamingContext.java:811)

    at org.apache.naming.NamingContext.lookup(NamingContext.java:194)

    at org.apache.naming.SelectorContext.lookup(SelectorContext.java:183)

    at javax.naming.InitialContext.lookup(InitialContext.java:347)

    at security.ControllerServlet.init(ControllerServlet.java:23)

    at javax.servlet.GenericServlet.init(GenericServlet.java:256)
Avatar billede javanewbie11 Nybegynder
11. marts 2003 - 15:31 #22
init() koden i servletten ser således ud:

import java.io.*;
import javax.naming.*;
import javax.rmi.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ControllerServlet extends HttpServlet
{
  private CustomerRemoteHome home = null;
  private String jndiName = "ejb/CustomerRemote";

  //Initialize global variables
  public void init() throws ServletException {
    try
    {
      //get naming context
      Context context = new InitialContext();
      System.out.println("Context ok!");

      //look up jndi name
      Object ref = context.lookup(jndiName);
      System.out.println("Lookup ok!");

      //look up jndi name and cast to Home interface
      home = (CustomerRemoteHome) PortableRemoteObject.narrow(ref,
          CustomerRemoteHome.class);
      System.out.println("JNDI Ok!");
    }
    catch (Exception e) {
      System.out.println("Catched Exception");
      e.printStackTrace();
    }
  }
Avatar billede arne_v Ekspert
11. marts 2003 - 15:42 #23
Hov det er jo en anden exception !

Du har fat i JBoss nu.

De kender bare ikke navnet "ejb/CustomerRemote".
Avatar billede arne_v Ekspert
11. marts 2003 - 15:44 #24
Sandsyneligvis er din EJB blevet registreret under et andet navn.

Hvis du ikke har en jboss.xml, så hedder en EJB kun dens
navn d.v.s. "CustomerRemote".

Hvis du har en jboss.xml kan du ændre JNDI navnet til "ejb/CustomerRemote"
i den.
Avatar billede arne_v Ekspert
11. marts 2003 - 15:49 #25
Hvis du kører JBoss+Tomcat bundle kan du iøvrigt browse JNDI tree
med jmx-console.

(men du kører jo Tomcat bundlet med JBuilder så det virker næppe for dig)
Avatar billede javanewbie11 Nybegynder
11. marts 2003 - 16:12 #26
Jeg skiftet til JBoss+Tomcat... Hvilken fil i jmx-console.war er det?
Avatar billede arne_v Ekspert
11. marts 2003 - 16:35 #27
Ikke nogen.

Du starter bare JBoss+Tomcat og lader din browser
pege på http://localhost:8080/jmx-console
så er du inde i jmx-console.

Så kommer der en totalt overskuelig side op. Du går ned og vælger
JNDIView.

Så kommer du ind i en ligeså uoverskueligt side, hvor du gør ned
og klikker på en "List" button.

Så kan du se alle de navne der er i JNDI tree.
Avatar billede arne_v Ekspert
12. marts 2003 - 19:40 #28
Har du fået fat i din EJB ?
Avatar billede javanewbie11 Nybegynder
13. marts 2003 - 07:27 #29
Nej aner ikke hvorfor?
Men ellers tak for hjælpen!
Avatar billede javanewbie11 Nybegynder
13. marts 2003 - 07:28 #30
Hvis du stadig er interesseret i at hjælpe mig: må du gerne maile mig:
postmaster@theemann.dk

Men ellers får du her dine velfotjente points...! :)
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