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

Status
Nicht offen für weitere Antworten.

norbertbaum

Mitglied
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 🙂
 
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
 
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
 
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
 
so ich poste jetzt mal n bissel Code

EJB-Klassen - die auf den Server sollen!!
testRemote
Code:
package server;
import javax.ejb.Remote;

@Remote
public interface testRemote {

    String os();
}
testBean.java
Code:
package server;
import javax.ejb.Stateless;

@Stateless
public class testBean implements testRemote {

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



Client - Main-Methode

Code:
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)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(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
 
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
 
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)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.sun.enterprise.appclient.jws.boot.JWSACCMain.run(JWSACCMain.java:221)
at com.sun.enterprise.appclient.jws.boot.JWSACCMain.main(JWSACCMain.java:182)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.javaws.Launcher.executeApplication(Unknown Source)
at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
at com.sun.javaws.Launcher.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.RuntimeException: java.lang.NoClassDefFoundError: server/testRemote
at com.sun.enterprise.appclient.MainWithModuleSupport.<init>(MainWithModuleSupport.java:487)
... 15 more
Caused by: java.lang.NoClassDefFoundError: server/testRemote
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
at com.sun.enterprise.util.Utility.invokeApplicationMain(Utility.java:236)
at com.sun.enterprise.appclient.MainWithModuleSupport.<init>(MainWithModuleSupport.java:449)
... 15 more
Caused by: java.lang.ClassNotFoundException: server.testRemote
at com.sun.enterprise.loader.EJBClassLoader.findClassData(EJBClassLoader.java:737)
at com.sun.enterprise.loader.EJBClassLoader.findClass(EJBClassLoader.java:627)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
... 21 more
 
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))
Code:
// 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
Code:
// 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));
 
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 🙁
 
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
Code:
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
 
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 hat gesagt.:
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 🙁
Ä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:
 
So war's gemeint
Code:
@Stateless
@Remote(MathService.class) 
@Local(MathServiceLocal.class) 
public class MathServiceBean implements MathServiceLocal 
...
 
sorry, aber irgendwas stimmt an meinem Server nicht 🙁

er sagt mir immer NoClassDefFoundError test/MathService


immer wieder der selbe Fehler :'(
 
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
 
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
 
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
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben