# erstes Java EE Projekt - Server/ EJB-Verbindung-Anfängerfage



## norbertbaum (1. Apr 2008)

Hallo Java-Entwickler,

ich studiere Informatik und wir haben über 2Semester ein Projekt.
ich möchte einen Client schreiben, der auf einen Server zugreift und der Server auf die DB

Client kann nichts - er schickt alles an den Server
Server kann alles - er erstellt pdfs, macht die ganze verarbeitung der DB-daten etc...

ich habe bis jetzt nur in Java2SE gearbeitet!


jetzt mein Eigentliches Problem:

ich habe mir auf meinem Entwicklungs-PC JavaEE mit Sun App Server installiert
- es ist aus NetBeans ein Enterprise Projekt - wo ich einfach nur auf die klassen/Methoden des EJB-Projekts zugreife

ich habe mir jetzt auf meinem Server(anderer PC) JavaEE+SDK+AppServer installiert.
- habe in dem Projekt den neuen server eingetragen
- beim ausführen (nur der client.jar) sagt er mir, das er die klassen von der EJB-ServerProjekt nicht kennt.


wie kann ich dem sagen, wo im Netzwerk der Server steht?
oder ist der AppServer von Sun mist? weil ich viel über JBoss gelesen hatte.


(in C# würde ich es über Webservice machen)



ICH DANKE euch schon einmal


----------



## benders (2. Apr 2008)

Hallo Norbert,

der App-Server von SUN (glassfish V2) finde ich sehr gut.
Ich habe damit schon mehrere Projekte durchgeführt.

1. ) Du kannst es natürlich auch mit WebServices realisieren.

2.) Welchen Projekt-Typ hast Du in Netbeans ausgewählt?

Ich gehe davon aus, das Du eine Enterprise Application erstellt hast.

Wenn Du den Server änderst, musst Du in jedem Teil-Projekt (EJB,App-Client) in den Properties unter RUN den neuen Server eintragen. Dann das ganze Projekt neu deployen.


Bernd


----------



## norbertbaum (2. Apr 2008)

Hallo Bernd,
vielen Dank.
ok da werde ich den glassfish V2 weiter verwenden.

ich muss es nicht als Webservices machen!
Das Projekt hat richtige Clients(kein webfront-end)

ich habe mir noch mal ein neues Enterprise Projekt angelegt.

jetzt ist die einfache frage.
wie komme ich vom client auf klassen/methoden auf dem Server?
Server = EJB - auf glassfish


ich danke dir schon einmal


----------



## benders (2. Apr 2008)

Hi!

Ich gehe mal davon aus, das Du Dir zu deinen Entities auf Remote-SessionBeans mit Methoden erstellt hast.

Wichtig, ist das Remote.

Wenn Du dann in der Client-Source-Datei bist, klicke bin der RechtenMausTase in den Hintergrund.

Unter Enterprise Resources findest Du Call EnterpriseBeans.

Bernd


----------



## norbertbaum (2. Apr 2008)

so ich poste jetzt mal n bissel Code

EJB-Klassen - die auf den Server sollen!!
testRemote

```
package server;
import javax.ejb.Remote;

@Remote
public interface testRemote {

    String os();
}
```
testBean.java

```
package server;
import javax.ejb.Stateless;

@Stateless
public class testBean implements testRemote {

    public String os()
    {
        return System.getProperty("os.name");
    }
 }
```



Client - Main-Methode


```
package test;
import javax.ejb.EJB;
import server.testRemote;

public class Main {
    @EJB
    private static testRemote testBean;

    public static void main(String[] args) {
        testBean = new server.testBean();
        System.err.println(testBean.os());
    }
}
```


auf dem Sun Server liegen die daten!



> java -jar Test-app-client.jar
> Exception in thread "main" java.lang.NoClassDefFoundError: server/testRemote
> Caused by: java.lang.ClassNotFoundException: server.testRemote
> at java.net.URLClassLoader$1.run(Unknown Source)
> ...



in dem ordner liegt NUR die Test-app-client.jar

ich hoffe du kannst mir helfen
oder muss ich bei den jar noch was reinpacken


----------



## benders (2. Apr 2008)

Ein Deploy hast Du doch ausgeführt? Oder!

Das Starten der Client-Anwendung geht so nicht!

Probier mal über die Glassfish-Web-Frontend
http//<ip-address>:4848

Anmelden: Standard admin/adminadmin

Unter den Enterprise-Applications sollte Deine Anwendung jetzt auftauchen.

DoppelKlick
app-client suchen - Launch  -Launch

Wenn Java-Console aktiviert, siehst Du die Ausgabe!

Bernd


----------



## norbertbaum (2. Apr 2008)

vielen dank!

Geht, bis auf den Fehler 




> java.lang.reflect.InvocationTargetException
> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
> at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
> ...


----------



## Guest (2. Apr 2008)

Das, was NetBeans generiert, ist ziemlicher Mist. Die Annotationen können aber sollten nicht in den Interfaces stehen,
sonst muss man clientseitig Abhängigkeiten zu den JEE Annotations hinzufügen. Alles nur wegen einem blöden @Remote

Baue dir folgende Hierarchie auf (hier am Beispiel einer Funktion sum(int, int))
	
	
	
	





```
// Das hier ist das Remote-Interface
public interface MathService
{
   int sum(int v1, int v2);
}

// Das hier ist das Local-Interface.
public interface MathServiceLocal extends MathService
{
   // Hierher kommen Methoden, die nur serverseitig erreichbar sein sollen
}

@Session
@Remote(MathService.class)
@Local(MathServiceLocal.class)
public class MathServiceBean implements MathServiceLocal
{
   public MathServiceBean
   {
   }

   public int sum(int v1, int v2)
   {
      return v1+v2;
   }
}
```
Remote-Zugriff dann über
	
	
	
	





```
// Bei dem JNDI-Namen gehe ich davon aus, dass du keinen speziellen JNDI-Namen für die Bean definiert hast.
// z.B. @Stateless(mappedName="ejb/MathService") in MathServiceBean 
MathService service = InitialContext.doLookup(MathService.class.getName());
System.out.println(service.sum(19, 23));
```


----------



## norbertbaum (3. Apr 2008)

Hallo Gast,
vielen dank!

nur leider habe ich Probleme bei @Session - welchen Import?

Exception in thread "main" java.lang.NoClassDefFoundError: test/MathServiceRemote
        at eetest.Main.main(Main.java:29)


irgendwie binich n bissel blöd oder stehe auf dem schlauch


----------



## benders (3. Apr 2008)

Moin Norbert,

Die Exception die Du nun erhältst sagt eigentlich das selbe aus.
Die SessionBean kann nicht gefunden werden.
Es ist also ein grundsächliches Problem.



Ich habe versucht den Fehler auch bei mir zu provozieren.
Ist mir nicht gelungen. :wink: 

Zu Deinem ersten Versuch:

In der main-Methode kannst Du die Zeile 

```
testBean = new server.testBean();
```
löschen.

Weitere Versuche:

1. Undeploy der ganzen Application über das Web-Frontend, dann erneutes deployen mit Netbeans.
2. Neu-Start des Glassfishes.

Welche Versionen von Netbeans und Glassfish benutzt Du?


Ich könnte Dir ja auch ein (bei mir) funktionierendes Projekt mailen.

Bernd


----------



## norbertbaum (3. Apr 2008)

das Projekt wäre schön wenn du mir das mal schicken könntest 
//edit: mail entfernt

wegen den Versions Infos mache ich dann
ich muss erst mal in die hochschule, aber habe ja immer alles dabei 


DANKE DIR


----------



## norbertbaum (3. Apr 2008)

Versionen:
Server: Sun Java System Application Server 9.1_01 (build b09d-fcs)
glassfish-v2ur1

Java EE5


----------



## Guest (3. Apr 2008)

norbertbaum hat gesagt.:
			
		

> Hallo Gast,
> vielen dank!
> 
> nur leider habe ich Probleme bei @Session - welchen Import?
> ...


Ätsch, sorry, ich meinte @Stateless :shock: 
Ich habe es hier eingetippt, sonst hätte ich es in IDE direkt bemerkt. Im Kommentar zum Aufruf 
der Bean habe ich die korrekte Annotation benannt... Was mir da wohl durch den Kopf ging? :roll::wink:


----------



## Guest (3. Apr 2008)

So war's gemeint
	
	
	
	





```
@Stateless
@Remote(MathService.class) 
@Local(MathServiceLocal.class) 
public class MathServiceBean implements MathServiceLocal 
...
```


----------



## norbertbaum (4. Apr 2008)

sorry, aber irgendwas stimmt an meinem Server nicht 

er sagt mir immer NoClassDefFoundError test/MathService


immer wieder der selbe Fehler :'(


----------



## benders (4. Apr 2008)

Hallo Norbert,

Du hast leider gleich mehrere Baustellen angefangen.

- Glassfish aufsetzten

- Netzwerk einrichten (Zugriff von verschieden Standorten über dyndns)
    dabei spielen so viele Komponenten (Firewalls, vergebene IP,....) mit.

- Erste Schritte in JEE5

Damit machst Du es Dir selber schwer.

Mein Rat, konzentriere Dich erst einmal auf nur ein Thema.
Dann können Deine Fragen auf präziser gestellt werden.
Und das Forum kann Dir besser helfen.

Bernd


----------



## norbertbaum (4. Apr 2008)

Hallo Bernd,

aber ich hatte dir ja per Mail geschrieben
im NetBeans run geht  mit lokalen Server

aber wenn ich mir den client mit java webstart holen will treten die fehler auf
im netzwerk sowie lokal

danke dir ich hoffe du kannst mir helfen
ich kann dir auch gerne per mail die server adresse geben


----------



## norbertbaum (7. Apr 2008)

Jetzt noch einmal für alle
das Problem war wieder einmal nur der User 

also ich hatte mir immer den normalen client geladen und nicht der vom EnterpriseProjekt ausgeleifert wird und deswegen kamen die Fehler, ich melde mich wenn ich die nöchsten Probleme habe


----------

