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

großes Problem in k leinem Corba Progra mm

0 views
Skip to first unread message

Christian Schröder

unread,
Oct 26, 2003, 7:05:15 PM10/26/03
to
Hi,
bin gerade dabei mir CORBA beizubringen und hab inen Client und einen
Server gebastelt, beide in Java.
Ist quasi ein billigrechner
Hier die idl:

module CalculatorServer {
interface Server {
long add(in long summ1, in long summ2);
string version();
};
};

Und nun ists so mein Server startet und meldet sich anscheinend beim
Tnameserv an (wie kann ich das rausfinden)
Beim Client geht auch fast alles gut, erst wenn ich eine Methode des
Servers aufrufe kommt folgender Stacktrace:

Serverfrage: 5 + 5 = ?
org.omg.CORBA.UNKNOWN: vmcid: SUN minor code: 202 completed: Maybe
at
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at
java.lang.reflect.Constructor.newInstance(Constructor.java:274)
at java.lang.Class.newInstance0(Class.java:308)
at java.lang.Class.newInstance(Class.java:261)
at
com.sun.corba.se.internal.iiop.messages.ReplyMessage_1_2.getSystemException(ReplyMessage_1_2.java:90)
at
com.sun.corba.se.internal.iiop.ClientResponseImpl.getSystemException(ClientResponseImpl.java:105)
at
com.sun.corba.se.internal.corba.ClientDelegate.invoke(ClientDelegate.java:314)
at
org.omg.CORBA.portable.ObjectImpl._invoke(ObjectImpl.java:457)
at CalculatorServer._ServerStub.add(_ServerStub.java:16)
at CalculatorServer.Client.main(Client.java:66)

So nun steht in der Client.main() nur der Aufruf der Funktion und der
Fehler ist in dem Codeteil den der idl Compiler erzeugt (Sofern der
Fehler in Zeile 2 von unten steckt). Ich hab schon gelesen, was 202
bedeuten kann "Wenn bei der Erzeugung des Aufrufs von Server.add()
halt ne Exception kommt" Hab auch gelesen das die CORBA
Fehlermeldungen eher einem Zufallsgenerator entspringen als einer
richtigen Fehlerzuordnung.
Ich weiß aber nicht was ich noch an Code posten soll, denn da wird ja
fast alles selber gemacht von dem idlj.
Ich finds sehr demotivierend, dass schon das einfachste der Welt nich
klappt.

java 1.4.02
win2000
eclipse 3.0M4

Vielen Dank
Christian
--
please youse replyTo

Mario Viertel

unread,
Oct 27, 2003, 12:04:16 AM10/27/03
to
"Christian Schröder" <spa...@gmx.net> schrieb im Newsbeitrag
news:cmnopvoqe0a1eo0tm...@4ax.com...

> Ich weiß aber nicht was ich noch an Code posten soll, denn da wird ja
> fast alles selber gemacht von dem idlj.
> Ich finds sehr demotivierend, dass schon das einfachste der Welt nich
> klappt.

Das der generierte Code stimmt, davon kannst du ausgehen. Also liegt der
Fehler bei dir.
Prüfe:

- Ist der Nameservice gestartet?
- Initialisierst du deinen ORB im Code auch mit den selben Port wie der
gestartete Nameservice? (ORB.init("-ORBInitialPort 1234", ...))
- Holt sich der Client die Referenz vom CORBA-Objekt (Server)?
- Stimmt auch beim Client der Port?
- und und und

Am besten du postet mal den entsprechenden Code. Das du folgenden Link
kennst, davon gehe ich aus
(http://java.sun.com/j2se/1.4.2/docs/guide/idl/index.html und da speziell:
http://java.sun.com/j2se/1.4.2/docs/guide/idl/GShome.html).


bye
Mario

--
-- ***-


Christian Schröder

unread,
Oct 27, 2003, 2:34:31 AM10/27/03
to
"Mario Viertel" <sp...@microsoft.com> schrieb:

>- Ist der Nameservice gestartet?

ja, tnameserv -ORBInitialPort 950

>- Initialisierst du deinen ORB im Code auch mit den selben Port wie der
>gestartete Nameservice? (ORB.init("-ORBInitialPort 1234", ...))

Ja, habs mit falschen Werten probiert -> andere Exception

>- Holt sich der Client die Referenz vom CORBA-Objekt (Server)?

wie kann ich das rausfinden?

Hier Code vom Server, dahinter von der ClientImplementierung
die großen try/catch Blöcke hatte ich später eingefügt, in der
Hoffnung die Exception eher zu kriegen, hat aber nicht funktioniert.
Die Zeile:
System.out.println("Obtained a handle on server object: " +
server);
liefert mir dieselbe Zahl, die beim tnamserv am Anfang als IOR
angegeben ist. ich denke mal, das heißt, dass das Referenzenholen
geklappt hat.
Fehler tritt erst in
System.out.println("Serverantwort:" + server.add(5, 5));
auf, also beim Benutzen des Serverobjekts.

Danke schonmal.

---------Server------------------------

package CalculatorServer;

import org.omg.CORBA.ORB;
import org.omg.CORBA.Object;
import org.omg.CORBA.ORBPackage.InvalidName;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContext;
import org.omg.CosNaming.NamingContextHelper;
import org.omg.CosNaming.NamingContextPackage.CannotProceed;
import org.omg.CosNaming.NamingContextPackage.NotFound;

public class ServerImpl extends _ServerStub {

public static void main(String[] s) {
try {
String[] args = new String[4];
args[0] = "-ORBInitialHost";
args[1] = "10.51.1.3";
args[2] = "-ORBInitialPort";
args[3] = "950";
ORB orb = ORB.init(args, null);

ServerImpl server = new ServerImpl();
orb.connect(server);
Object nameservice = null;
try {
//org.omg.CORBA.Object
//NameService Objekt vom CORBA ORB holen
nameservice =
orb.resolve_initial_references("NameService");
} catch (InvalidName ine) {
// TODO Auto-generated catch block
ine.printStackTrace();
}
if (nameservice == null)
return;
NamingContext namingcontext =
NamingContextHelper.narrow(nameservice);
//Name erzeugen, quasi eine Visitenkarte für mein Objekt
NameComponent name = new NameComponent("MeinServer", "");
//Visitenkartenbuch mit meiner Visitenkarte füllen
NameComponent path[] = {name};
try {
//Visitenkarte dem Orb geben, "ich kann das alles hier"
namingcontext.rebind(path, server);
} catch (NotFound e) {
e.printStackTrace();
} catch (CannotProceed e) {
e.printStackTrace();
} catch (org.omg.CosNaming.NamingContextPackage.InvalidName
e) {
e.printStackTrace();
}

System.out.println("Server bereit");
orb.run();

} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
public int add(int summ1, int summ2) {
System.out.println("Addiere: " + summ1 + " + " + summ2);
return (summ1 + summ2);
}
public String version() {
return "Squiddle's CORBA Rechner 0.1";
}
}


--------Version----------------------------


package CalculatorServer;

import org.omg.CORBA.ORB;
import org.omg.CORBA.Object;
import org.omg.CORBA.ORBPackage.InvalidName;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContext;
import org.omg.CosNaming.NamingContextHelper;
import org.omg.CosNaming.NamingContextPackage.CannotProceed;
import org.omg.CosNaming.NamingContextPackage.NotFound;

public class Client {
public static void main(String[] s) {
String[] args = new String[4];
args[0] = "-ORBInitialHost";
args[1] = "10.51.1.3";
args[2] = "-ORBInitialPort";
args[3] = "950";
ORB orb = ORB.init(args, null);
Server server = new ServerImpl();
orb.connect(server);
Object nameservice = null;
try {
//org.omg.CORBA.Object
//NameService Objekt vom CORBA ORB holen
nameservice = orb.resolve_initial_references("NameService");
} catch (InvalidName ine) {
// TODO Auto-generated catch block
ine.printStackTrace();
}
if (nameservice == null)
return;

NamingContext namingcontext =
NamingContextHelper.narrow(nameservice);
//Name erzeugen, quasi eine Visitenkarte für mein Objekt
NameComponent name = new NameComponent("MeinServer", "");
//Visitenkartenbuch mit meiner Visitenkarte füllen
NameComponent path[] = {name};
try {
//Visitenkarte dem ORB geben und sagen, hier "den brauch ich"
//server = ServerHelper.narrow(namingcontext.resolve(path));
server = ServerHelper.narrow(namingcontext.resolve(path));
} catch (NotFound e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CannotProceed e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (org.omg.CosNaming.NamingContextPackage.InvalidName e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Obtained a handle on server object: " +
server);
System.out.println("Serverfrage: 5 + 5 = ?");
try {
//System.out.println("Serverversion: " + server.version());
System.out.println("Serverantwort:" + server.add(5, 5));
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

}
}

Mario Viertel

unread,
Oct 27, 2003, 3:48:52 AM10/27/03
to
Hi,

so wie du das da gemacht hat, wird das nix. Ohne auf Details einzugehen:
Deine Serverimplementierung muss von der entsprechenden xxxPOA Klasse erben.
Bei deinem Verbindungsaufbau im Server bin ich mir auch nicht sicher ob das
klappt. Auch vermisse ich den POA.

Am besten du schaust dir
http://java.sun.com/j2se/1.4.2/docs/guide/idl/jidlExample.html und die Links
die ich dir schon geschickt habe an. Dann wirst du selber erkennen wo deine
Fehler sind.

Alexander Gran

unread,
Oct 27, 2003, 7:19:46 AM10/27/03
to
Christian Schröder wrote:

> org.omg.CORBA.UNKNOWN: vmcid: SUN minor code: 202 completed: Maybe

Code 202 kann auch auf eine Exception beim server hindeuten.
Ich mache darum immer sowas:

aus
long add(long a, long b) {
return a +b;
}

wird
long add(long a, long b) {
try {
return a +b;
catch (RuntimeException e)
{
e.printStackTrace();
throw e;
return 0;
}
}
--
Some operating systems are called `user friendly',
Linux however is `expert friendly'.
Encrypted Mails welcome. Send spam to toZo...@gmx.net, please.
PGP-Key at http://zodiac.dnsalias.org/misc/pgpkey.asc | Key-ID: 0x6D7DD291

Christian Schröder

unread,
Oct 27, 2003, 12:00:33 PM10/27/03
to
"Mario Viertel" <Mario....@tewisoft.de> schrieb:

>so wie du das da gemacht hat, wird das nix. Ohne auf Details einzugehen:
>Deine Serverimplementierung muss von der entsprechenden xxxPOA Klasse erben.
>Bei deinem Verbindungsaufbau im Server bin ich mir auch nicht sicher ob das
>klappt. Auch vermisse ich den POA.

Danke der POA wars, hatte ein Buchbeispiel genommen und da wird der
POA gar nicht erwähnt. Mit dem Ding klappts perfekt.

Das war die veraltete Variante in dem Buch mit dem idlj Schalter
"-oldImplBase", den es natürlich damals nicht gab und der idl Compiler
hieß da auch noch idltojava. Wie soll man denn da drauf kommen :)
Aber zum Glück gibts "Orte" wie diese.

gruß
Christian

0 new messages