# Problem mit EJB Verständnis



## sirius76 (23. Dez 2011)

Liebe Community

Ich bin dabei mich in EJB einzuarbeiten, einiges ist mir einigermassen  klar, aber halt noch immer nicht alles. Unter der URL Zuerst erstelle ich ein neues EJB Projekt mit Namen HelloWorld-Service habe ich ein Projekt erstellt und beschrieben was geht und was nicht geht. 

Ich waere sehr froh wenn ihr mir helfen könnt, da ich einfach nicht mehr weiterkomme.

Danke euch und schöne Festtage.


----------



## Marcinek (23. Dez 2011)

HI 

du hast ein im vergleich zu dem EJB Drumherum ein simples Problem ..

Java: Paketdeklarationen in Java

Du musst deine Class Datei in deine Packetstruktur reinpacken und dann java bla.business.MeineKlasse aufrufen.

Gruß,

Martin


----------



## sirius76 (23. Dez 2011)

meinst du so
java -cp " HelloWorld-Service.jar;jbossall-client.jar"; EjbHelloWorldClient 

auch mit dem erhalte ich die Fehlermeldung


----------



## KSG9|sebastian (23. Dez 2011)

-cp/-classpath funktioniert nicht bei Jars. Du musst den Klassenpfad im Jar-File unter META-INF/MANIFEST.MF angeben:

...
Class-Path: a.jar b.jar c.jar
Main-Class: a.b.C


----------



## sirius76 (23. Dez 2011)

Ich bin nun wie folgt vorgegangen im Verzeichnis C:\Users\pudr\Desktop\NeuerOrdner
befinden sich zwei Dateien

EjbHelloWorld.java

```
import javax.ejb.Remote;
@Remote
public interface EjbHelloWorld {
    public void hello(String text);
}
```


Und EjbHelloWorldBean.java

```
import javax.ejb.Stateless;
@Stateless
public  class EjbHelloWorldBean implements EjbHelloWorld {
 
    public void hello(String hello) {
       System.out.println(hello);
         
    }
  }
```


*Nun kompiliere ich EjbHelloWorld.java mit*

cd c:\
cd Users\pudr\Desktop\NeuerOrdner
javac EjbHelloWorld.java -classpath C:\JEE6\jboss-6.0.0.Final\client\jboss-ejb-api_3.1_spec.jar

Hat funktioniert und ich erhielt im Verzeichnis C:\Users\pudr\Desktop\NeuerOrdner
die  EjbHelloWorld.class


*Nun compiliere ich EjbHelloWorldBean.java mit*


cd c:\
cd Users\pudr\Desktop\NeuerOrdner
javac EjbHelloWorldBean.java -classpath C:\JEE6\jboss-6.0.0.Final\client\jboss-ejb-api_3.1_spec.jar;C:\Users\pudr\Desktop\NeuerOrdner

Hat funktioniert und ich erhielt im Verzeichnis C:\Users\pudr\Desktop\NeuerOrdner
die  EjbHelloWorldBean.class


*Nun erstelle ich aus diesen zwei classes das jar*


cd c:\
cd Users\pudr\Desktop\NeuerOrdner
jar cf hello.jar EjbHelloWorld.class EjbHelloWorldBean.class


hat auch funktioniert. Diese jar kopiere ich nun in das Verzeichnis meines Applikationsservers unter

hineinkopieren C:\JEE6\jboss-6.0.0.Final\server\default\deploy



Nun der Client EjbHelloWorldClient.java

```
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;


public class EjbHelloWorldClient {
    public static void main(String[] args) {
         
        Properties props = new Properties();
        props.put("java.naming.factory.initial", "org.jboss.naming.HttpNamingContextFactory" );
        props.put("java.naming.provider.url", "http://localhost:8080/invoker/JNDIFactory");
        props.put("java.naming.factory.url.pkgs", "org.jboss.naming");
        try {
            Context context = new InitialContext(props);
                       try {
                                EjbHelloWorld helloWorld = (EjbHelloWorld)context.lookup("EjbHelloWorldBean/remote-EjbHelloWorld");
                helloWorld.hello("Hello World Ejb  3.1");
                 
            } catch (NamingException e) {
                System.out.println("couldn't look ");
                e.printStackTrace();
            }
        } catch (NamingException e) {
            System.out.println("naming exception occoured");
            e.printStackTrace();
        }
    }
}
```


Dieser habe ich ebenfalls im Verzeichnis C:\Users\pudr\Desktop\NeuerOrdner eingefügt.

*Die EjbHelloWorldClient.class erstelle ich wie folgt*


cd c:\
cd Users\pudr\Desktop\NeuerOrdner
javac EjbHelloWorldClient.java -classpath C:\JEE6\jboss-6.0.0.Final\client\jbossall-client.jar;C:\JEE6\jboss-6.0.0.Final\server\default\deploy\hello.jar

auch das funktioniert einwandfrei und ich erhalte die EjbHelloWorldClient.class


*nun will ich diese wie folgt ausführen*

cd c:\
cd Users\pudr\Desktop\NeuerOrdner
java EjbHelloWorldClient


*Dann erhalte ich aber diese Fehlermeldung:*


c:\Users\pudr\Desktop\NeuerOrdner>java EjbHelloWorldClient
naming exception occoured
javax.naming.NoInitialContextException: Cannot instantiate class: org.jboss.nami
ng.HttpNamingContextFactory [Root exception is java.lang.ClassNotFoundException:
 org.jboss.naming.HttpNamingContextFactory]
        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:6
57)
        at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288
)
        at javax.naming.InitialContext.init(InitialContext.java:223)
        at javax.naming.InitialContext.<init>(InitialContext.java:197)
        at EjbHelloWorldClient.main(EjbHelloWorldClient.java:16)
Caused by: java.lang.ClassNotFoundException: org.jboss.naming.HttpNamingContextF
actory
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:247)
        at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.jav
a:46)
        at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:6
54)
        ... 4 more



Was habe ich nun wieder falsch gemacht ?
Danke euch vielmals


----------

