Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

TransferObjekte über Netzt übertragen (EJB/Jboss)

0 views
Skip to first unread message

ralf sczepan

unread,
Oct 28, 2003, 6:12:17 AM10/28/03
to
Hallo Group

Ich möchte zur Kommunikation zwischen Client und Applicationserver
TransferObjekte verwenden. Dazu habe ich ein paar Fragen.

1. Kann ich das TransferObjekt schon an die Create-Methode der
Entity-Bean übergeben. Also die Session-Bean nimmt das Transfer-Objekt
entgegen, holt sich das HomeInteface der dem TransferObjekt
entspechenden Entity-Bean und übergibt der Create-Methode das
TransferObjekt. ejbCreate in der Bean-Implementation übernimmt das
kopieren der Attribute.

2. Wie ist das mit der Serialisierung? Ich habe mein TransferObjekt
von java.io.Serializable abgeleitet. Trotzdem bekomme ich eine
Exception die irgend etwas mit der Serialisierung zu tun haben muss.

java.lang.IllegalStateException: Failed to find method for
hash:-5570025471942239059
at org.jboss.invocation.MarshalledInvocation.getMethod(MarshalledInvocation.java:261)
......

Noch etwas Quelltext:

Der Client
.....
TransferArtikel ta1 = new TransferArtikel();
ta1.setArtnr(new Integer(1234));
ta1.setBezeichnung("Buch");
ta1.setBild("/path/to/bild");
Object objw = ctx.lookup( "WarenManager" );
WarenManagerHome warenHome =
(WarenManagerHome)javax.rmi.PortableRemoteObject.narrow(objw,
WarenManagerHome.class );
WarenManager waren = warenHome.create();
waren.createArtikel(ta1); //<-- wirft Exception

....

Der WarenManager (SessionBean)


public void createArtikel(TransferArtikel ta) {
try {
ArtikelLocalHome artikelHome =
(ArtikelLocalHome)ctx.lookup("java:comp/env/ejb/ArtikelLocalHome");
ArtikelLocal artikel = artikelHome.create(ta);
} catch (NamingException e) {
System.out.println("Fehler in WarenManager:createArtikel");
e.printStackTrace();
} catch (CreateException e) {
System.out.println("Fehler in WarenManager:createArtikel");
}
}

Die ArtikelBean

...
public Integer ejbCreate(TransferObjekt ta) throws CreateException {
System.out.println("create");
setArtnr(ta.getArtnr());
setBezeichnung(ta.getBezeichnung());
setBild(ta.getBild());
return getWarenid();
}
....

Danke schon mal für Eure Hilfe

Mfg Ralf

Peter Schütt

unread,
Oct 28, 2003, 6:36:39 AM10/28/03
to
Hallo,
[..]

> 2. Wie ist das mit der Serialisierung? Ich habe mein TransferObjekt
> von java.io.Serializable abgeleitet. Trotzdem bekomme ich eine
> Exception die irgend etwas mit der Serialisierung zu tun haben muss.
>
> java.lang.IllegalStateException: Failed to find method for
> hash:-5570025471942239059
> at
> org.jboss.invocation.MarshalledInvocation.getMethod(MarshalledInvo
> cation.java:261)
> ......
Ist bei mir schon alles etwas länger her, aber so etwas sieht nach
unterschiedlichen Versionen einer Klasse aus.
Bist Du sicher, daß auf Client wie auf Server-Seite die selbe Version der
zu serialisierenden Klasse ist?

Wir hatten früher bei JBoss auch manchmal das Problem, daß das Hot-
Deployment nicht immer klappte und daß man manchmal den Cache im JBoss
löschen mußte und alles neu deployen mußte.
Das ist jetzt aber schon über ein halbes Jahr her.

Ciao
Peter Schütt

--
Peters Homepage: www.pstt.de
Peter's Preacher Page: www.peprpg.de
Peters Programme: www.pstt.de/programs

Marek Lange

unread,
Oct 28, 2003, 7:09:36 AM10/28/03
to
ralf sczepan wrote:

> Hallo Group
>
> Ich möchte zur Kommunikation zwischen Client und Applicationserver
> TransferObjekte verwenden. Dazu habe ich ein paar Fragen.
>
> 1. Kann ich das TransferObjekt schon an die Create-Methode der
> Entity-Bean übergeben. Also die Session-Bean nimmt das Transfer-Objekt
> entgegen, holt sich das HomeInteface der dem TransferObjekt
> entspechenden Entity-Bean und übergibt der Create-Methode das
> TransferObjekt. ejbCreate in der Bean-Implementation übernimmt das
> kopieren der Attribute.

Das sollte so funktionieren, ja. Du musst im Entity Bean dann eine
ejbCreate()-Methode bereitstellen, die ein Value Objekt als Parameter
hat. Aber das hast du ja bereits getan und hast somit die Frage selbst
beantwortet.

> 2. Wie ist das mit der Serialisierung? Ich habe mein TransferObjekt
> von java.io.Serializable abgeleitet. Trotzdem bekomme ich eine
> Exception die irgend etwas mit der Serialisierung zu tun haben muss.
>
> java.lang.IllegalStateException: Failed to find method for
> hash:-5570025471942239059
> at org.jboss.invocation.MarshalledInvocation.getMethod(MarshalledInvocation.java:261)
> ......

Das scheint ein Problem mit der Serialisierung zu sein. Ich würde mal
darauf tippen, dass du

public int hashCode()

implementieren musst, weil JBoss die überschreiben will:

// Try the hash, the methodMap should be set
this.method = (Method)methodMap.get(new Long(methodHash));

if (this.method == null)
{
throw new IllegalStateException("Failed to find method for
hash:"+methodHash);
}

Empfehlung: lass dir die Value Objects mit XDoclet generieren, da sind
alle Methoden vorimplementiert!

-marek

Bernd Eckenfels

unread,
Oct 28, 2003, 7:22:37 AM10/28/03
to
ralf sczepan <r.sc...@satzmedia.de> wrote:
> java.lang.IllegalStateException: Failed to find method for
> hash:-5570025471942239059
> at org.jboss.invocation.MarshalledInvocation.getMethod(MarshalledInvocation.java:261)
...
> waren.createArtikel(ta1); //<-- wirft Exception

Hab ich noch nicht erlebt, aber geraten wuerde ich sagen dass die Klassen
fuer TransferArtikel im Client und Server Classpath unterschiedliche
Versionsstaende haben?

Demzufolge koennte der hash ueber die Klasse unterschiedlich sein und er
keine createArtikel() methode finden.

Du kannst mal zum testen die Methode auf (Object ta) aendern.

Gruss
Bernd
--
eckes privat - http://www.eckes.org/
Project Freefire - http://www.freefire.org/

Bernd Eckenfels

unread,
Oct 28, 2003, 7:24:08 AM10/28/03
to
"Peter Schütt" <news...@pstt.de> wrote:
> Wir hatten früher bei JBoss auch manchmal das Problem, daß das Hot-
> Deployment nicht immer klappte und daß man manchmal den Cache im JBoss
> löschen mußte und alles neu deployen mußte.
> Das ist jetzt aber schon über ein halbes Jahr her.

Ja das tmp/ Verzeichnis oder wo immer er die EAR auspackt sollte man bei
solchen Problemen loeschen und dann den JBoss wieder hochfahren. Tritt bei
mir allerdings in den neueren Versionen seltener auf. Eigentlich nur noch
wenn man eigene Threads einsetzt was natuerlich nicht erlaubt ist.

0 new messages