Avatar billede markymarc Nybegynder
27. august 2003 - 13:42 Der er 24 kommentarer og
1 løsning

Hvordan kalder jeg min sessionbean med jndi??

Jeg har lavet en flot ejb, med interfaces og det hele(eks fra mastering ejb). Jeg har så deployed den i min jboss. Og kan se den virker der. Nu har jeg så lavet en client der kan kalde den. Men jeg kan ikke rigtigt få den til at virke.
Kode er som så:
import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Properties;

public class HelloClient
{
    public static void main(String[] args) throws Exception
    {
        Properties props = System.getProperties();
        Context ctx = new InitialContext(props);
        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();
    }
}
Men hvordan F..... compiler jeg den og få den til at virke???
Avatar billede arne_v Ekspert
27. august 2003 - 13:54 #1
Du retter en enkelt lille stave fejl helloHome.class med lille h i.s.f. stort H.

Du compiler med j2ee.jar og de to interface si classpath.

Du kører med samme plus jboss client libs i classpath og de 3 properties
sat.
Avatar billede markymarc Nybegynder
27. august 2003 - 14:12 #2
Hvordan sætter jeg de to interface si classpath i min ant??
Avatar billede arne_v Ekspert
27. august 2003 - 14:18 #3
Det nemmeste er hvis du laver en jar-fil med dem og putter den i
classpath attributten.
Avatar billede markymarc Nybegynder
27. august 2003 - 14:28 #4
Hvad?? Det skal jeg vist lige havde skåret ud i pap?
Avatar billede markymarc Nybegynder
27. august 2003 - 14:29 #5
Altså hvad skal der i den jar fil
Avatar billede arne_v Ekspert
27. august 2003 - 14:34 #6
Du kan enten lave en specielt dinclient.jar med de to interfaces og
evt. hjælpe klasser.

Eller så kan du gøre ligesom os andre dovne hunde og bare lade clienten
bruge EJB jar filen (som jo har de 2 interfaces og alt der behøves).
Avatar billede markymarc Nybegynder
27. august 2003 - 14:47 #7
<target name="test">
        <mkdir dir="${testdir}"/>
        <javac classpath="${j2ee}; dist/ejb-generic.jar" srcdir="${testsrc}" destdir="${testdir}"/>
    </target>
Nu har jeg lavet sådan et target her. Burde det ikke virke??
Avatar billede arne_v Ekspert
27. august 2003 - 14:58 #8
Det virker meget rigtigt !

Får du fejl ? Hvilken ?
Avatar billede markymarc Nybegynder
27. august 2003 - 15:02 #9
/opt/java/fam/src/java/HelloClient.java (19:9)cannot resolve symbol class HelloHome

Sådan en fem fejl her.
Avatar billede arne_v Ekspert
27. august 2003 - 16:02 #10
Så er ejb jar filen angivet forkert eller pakket forkert eller noget - den
klasse skal være i ejb jar filen.
Avatar billede markymarc Nybegynder
27. august 2003 - 16:29 #11
Det fatter jeg ikke en skid af. Den ligger det rigtigt sted og alt ser rigtigt ud. Jeg prøver at at lave de sample's der er med i jboss doc først. Så må jeg jo se om jeg kan få det til at lykkes. Det er sku da til at få lange hænge b..... af ;-)
Avatar billede arne_v Ekspert
27. august 2003 - 16:48 #12
Det hjælper ikke med andre eksempler.

Det er classpath til jar og indholdet af jar og den måde
interfacene bruge spå der er problemet.

Kan lige vise lidt dir struktur og liste indhold af jar ?
Avatar billede markymarc Nybegynder
27. august 2003 - 17:05 #13
Ja tak, men må løbe nu, men svare lige tilbage i morgen.
Avatar billede markymarc Nybegynder
28. august 2003 - 12:25 #14
Nu har jeg fået det compilet, hvordan køre jeg det så??
Når jeg prøver melder den tilbage med denne fejl:
Exception in thread "main" 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
Avatar billede arne_v Ekspert
28. august 2003 - 12:28 #15
Du spurgte ikke til "og de 3 properties sat" !?

:-)
Avatar billede arne_v Ekspert
28. august 2003 - 12:29 #16
Du skal have sat følgende 3 properties:

java.naming.factory.initial = org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs = org.jnp.interfaces
java.naming.provider.url = localhost:1099

enten i en jndi.properties eller bare hard codet med System.setProperty ...
Avatar billede arne_v Ekspert
28. august 2003 - 12:30 #17
Og så client\jbossall-client.jar i classpath for kørsel, så begynder
det formentlig at virke !
Avatar billede markymarc Nybegynder
28. august 2003 - 12:52 #18
Sorry men det skal jeg nok havde skåret lidt mere ud i pap.
Skal jeg lave en fil der hedder jndi.properties og skriver de 3 linjer ind i den??
og hvad er System.setProperty??
Avatar billede arne_v Ekspert
28. august 2003 - 12:55 #19
Start med den nemme løsning.

Sæt linierne:

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");

ind i dit client program - inden du laver lookup.
Avatar billede markymarc Nybegynder
28. august 2003 - 13:02 #20
DET VIRKEDE HURRA.
Så ville det bare være rart vist jeg vidste hvordan :-)
Avatar billede arne_v Ekspert
28. august 2003 - 13:07 #21
Hvad mener du med hvordan ?
Avatar billede markymarc Nybegynder
28. august 2003 - 13:12 #22
Kan godt se at jeg sætter min alle property's selv. Men det gider jeg jo ikk. Kan man ikke sætte det i deplyment descriptoren???
Avatar billede arne_v Ekspert
28. august 2003 - 13:18 #23
Nej - ikke i deployment descriptor.

Til mere proffesionel brug sætter man dem i jndi.properties og den
skal bare anbringes passende i classpath.
Avatar billede markymarc Nybegynder
28. august 2003 - 13:24 #24
Ok men er jndi.properties en fil? eller hvad er det??

Og hvor er de to interfaces fra?(de to første)
Avatar billede arne_v Ekspert
28. august 2003 - 14:43 #25
Ja - det er en fil.

De to første properties er navne på klasser som kommer med JBoss.

Når InitialContext som er fælles for alle app-servere skal snakke med
JBoss skal den bruge nogle klasser og de properties er navnene på
de JBoss specifikke klasser.
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