Avatar billede cogitans Nybegynder
11. januar 2003 - 15:50 Der er 56 kommentarer og
1 løsning

RMI og CORBA

Er der nogle, som kan forklare mig, hvordan RMI (Remote Method Invocation) og CORBA (Common Object Request Broker Architecture) virker? Og helst på dansk...tak.
Avatar billede soreno Praktikant
11. januar 2003 - 15:57 #1
Begge teknologier bruges til at distribuere objekter. De bruges i forbindelse med programmering hvor det kan være en fordel at fordele sin applikation over et netværk.
RMI er en Java only teknologi som er utrolig nem at bruge (hvis man programmerer Java).
CORBA er sproguafhængigt og kræver lidt mere af programmøren at få op at stå.

Traditionelle netværksprotokoller som f.eks. http, ftp, dns virker ved socket forbindelse (som er lag 4 i OSI modellen).
Distribueret objekt fungere i højere lag, da både syntaks og semantik varetages af protokollen (Endian, Datatyper, osv.).
Avatar billede wave Nybegynder
11. januar 2003 - 15:58 #2
det tætteste du kommer på en kort forklaring på dansk er vel kursus beskrivelserne fra teknologisk

http://www.cit.teknologisk.dk/a-kurser/-kursus.asp?kknr=11733
http://www.cit.teknologisk.dk/a-kurser/-kursus.asp?kknr=11850
Avatar billede olly Nybegynder
11. januar 2003 - 15:58 #3
Meget lidt om det er her:

http://www.ifi.uio.no/inods/foiler/Corbajava.pdf

Brug google til at søge efter det og hvor dybt skal det gå skal du nok fortælle for man kan hjælpe.
Avatar billede arne_v Ekspert
11. januar 2003 - 16:20 #4
RMI er relativt simpelt at forklare.

Det er et eksempel på det man kalder et proxy pattern (hvis
du har studeret GoF patterns).

Ideen er at du kode-mæssigt kalder en metode, der reeelt
bliver udført på en anden maskine, som om det var lokal
kode der kørte på din egen maskine.

Rent praktisk foregår det ved at der bliver genereret
stub kode til client og skeleton kode til server.

Client koden kalder stub koden som har præcis de samme
metoder som på server. Stub koden serialiserer argumenterne
og sender dem over netværket til skeleton koden som så
deserialiserer og kalder server koden.

RMI er en implementation af dette i Java.

CORBA er en ret stor sag, som jeg ikke engang vil forsøge
at forklare her (jeg er heller ikke skrap til CORBA !).

Det er et fuldt framework for distrbuted computing ligesom
DCOM og J2EE.
Avatar billede cogitans Nybegynder
11. januar 2003 - 17:15 #5
Jo - det I har været inde på her, var de ting, som jeg vidste i forvejen. Jeg har brug for noget til bundsgående forklaring (og eksempler - gerne i javakode), da jeg har studeret dette en del, men ikke helt er med på, hvordan det egentlig fungerer.
Som eksempler kan det bare være nogle små programer, som f.eks. sender en sætning fra 1 computer over til 1 anden computer. Håber der er nogle, som stadig kan hjælpe?
Avatar billede soreno Praktikant
11. januar 2003 - 17:43 #6
F.eks.:

---------ServerInterface.java---------
import java.rmi.*;

public interface ServerInterface extends Remote
{
  public String getText() throws RemoteException;
  public void setText(String text) throws RemoteException;
}

---------RMIServer.java---------
import java.rmi.server.UnicastRemoteObject;
import java.rmi.*;

public class RMIServer extends UnicastRemoteObject implements ServerInterface
{
  private String text;

  public RMIServer() throws RemoteException
  {
    super();
  }

  public synchronized void setText(String text) throws RemoteException
  {
    this.text = text;
  }

  public synchronized String getText() throws RemoteException
  {
    return text;
  }
}

---------ServerMain.java---------
import java.rmi.*;

public class ServerMain
{
  public static void main(String argv[])
  {
    try
    {
      String name = "RMIServer";
      System.out.println("Registrerer som: \"" + name + "\"");
      RMIServer server = new RMIServer();
      Naming.rebind(name, server);
      System.out.println(name + " klar...");
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
  }
---------RMIClient.java---------
import java.rmi.server.*;
import java.rmi.*;

public class RMIClient
{
  public static void main(String argv[])
  {
    String host = "127.0.0.1";
        String name = "rmi://" + host + "/RMIServer";
        System.out.println("Leder efter: " + name);

        ServerInterface server;
        try
        {
          server = (ServerInterface)Naming.lookup(name);
          server.setText("Hello World!");
          System.out.println(server.getText());
        }
        catch(Exception e)
        {
          e.printStackTrace();
        }
  }
}
Avatar billede arne_v Ekspert
11. januar 2003 - 17:54 #7
Nu kom Søren jo før mig, men du skal da alligevel have mit eksempel.

Test.java (remote interface):

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Test extends Remote {
    public String test(String s) throws RemoteException;
}

TestImpl.java (server):

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class TestImpl extends UnicastRemoteObject implements Test {
    public TestImpl() throws RemoteException {
    }
    public String test(String s) {
        return (s + s);
    }
    public static void main(String[] args) {
        try {
            Naming.rebind("test", new TestImpl());
        } catch (RemoteException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
}

TestTest.java (client):

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

public class TestTest {
    public static void main(String[] args) {
        try {
            Test t = (Test) Naming.lookup("test");
            System.out.println(t.test("a"));
            System.out.println(t.test("bb"));
            System.out.println(t.test("ccc"));
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (RemoteException e) {
            e.printStackTrace();
        } catch (NotBoundException e) {
            e.printStackTrace();
        }
    }
}

Test.bat (test på PC platform):

javac *.java
rmic TestImpl
start rmiregistry
start java TestImpl
pause
java TestTest
Avatar billede cogitans Nybegynder
11. januar 2003 - 21:42 #8
Et andet spørgsmål (vedrørende det samme emne): kan man køre sådan en forbindelse, compilere programet og starte RMI-registry fra alle computere? Altså nogle som har et programeringsværktøj til f.eks. Java? Eller skal man have noget specielt installeret?
Avatar billede arne_v Ekspert
11. januar 2003 - 21:47 #9
Installer ganske almindelig JDK som kan downloades
gratis fra SUN.

Så kan du køre RMI.
Avatar billede cogitans Nybegynder
11. januar 2003 - 21:59 #10
Yep, den har jeg allerede installeret ;-)
Avatar billede arne_v Ekspert
11. januar 2003 - 22:43 #11
Så er du klar til at starte med at lege med RMI.
Avatar billede cogitans Nybegynder
11. januar 2003 - 23:17 #12
Okay; men RMI var også den leteste af de 2 muligheder (efter min mening). Så nu mangler vi (læs "jeg") bare at få en forklaring (forståelse) for CORBA...?
(og måske noget teknisk viden om NamingService'n i RMI(DNS))
Avatar billede arne_v Ekspert
11. januar 2003 - 23:37 #13
RMI er meget meget simplere end CORBA.

Der er ikke meget at sige om Naming service i RMI.

Serveren binder til en RMIregistry on client lookup'er
på samme.

URL = rmi://ipforrmiregistry:portforrmiregistry/servicenavn

rmi: er optional

ipforrmiregistry er default localhost

portforrmiregistr er default 1099

Ingen specielt avancerede funktionaliteter.
Avatar billede arne_v Ekspert
11. januar 2003 - 23:50 #14
Hvis du vil have en gratis CORBA og har Java, så kan du
kigge på:
  http://openorb.sourceforge.net/
eller for en ikke java version:
  http://www.uk.research.att.com/omniORB/omniORB.html
(jeg har ikke selv brugt nogen af dem)

CORBA er som dsagt ret kompliceret.

Men et sted at starte var:
  http://www.omg.org/gettingstarted/corbafaq.htm
Avatar billede soreno Praktikant
12. januar 2003 - 10:13 #15
Eksempel på Corba:

--------Interface.idl
module HelloApp
{
    interface Hello
    {
        string sayHello();
    };
};

---------HelloServer.java
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;

public class HelloServer
{

        public static void main(String args[])
        {
                try {
                        ORB orb = ORB.init(args, null);
                        HelloServant helloRef = new HelloServant();
                        org.omg.CORBA.Object objRef = orb.resolve_initial_refere
nces("NameService");
                        NamingContext ncRef = NamingContextHelper.narrow(objRef)
;
                        NameComponent nc = new NameComponent("Hello", "");
                        NameComponent path[] = {nc};
                        ncRef.rebind(path, helloRef);
                        orb.connect(helloRef);

                        java.lang.Object sync = new java.lang.Object();
                        synchronized(sync){
                                sync.wait();
                        }
            }
            catch(Exception e){
                System.out.println("A damn error occured!");
            }
        }
}

class HelloServant extends _HelloImplBase
{

        public String sayHello()
        {
                return "\nHello World!!\n";
        }
}

---------HelloClient.java
import org.omg.CosNaming.*;
import org.omg.CORBA.*;

public class HelloClient
{
        public static void main(String args[])
        {
                try {
                        ORB orb = ORB.init(args, null);
                        org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
                        NamingContext ncRef = NamingContextHelper.narrow(objRef);
                        NameComponent nc = new NameComponent("Hello", "");
                        NameComponent path[] = {nc};
                        Hello helloRef = HelloHelper.narrow(ncRef.resolve(path));

                        String hello = helloRef.sayHello();
                        System.out.println(hello);

            }
            catch(Exception e){
                System.out.println("A damn error occured!");
            }
        }
}

----------
Compilerings processen kan jeg faktisk ikke huske - andet end at en betaversion af idltojava skulle bruges for at få det til at virke.
Men koden virker.. :-)
Avatar billede soreno Praktikant
12. januar 2003 - 10:25 #16
Avatar billede soreno Praktikant
12. januar 2003 - 16:46 #17
Hmmm, jeg har kigge lidt mere på det og lavet noget der faktisk kan compile :-)

------Interface.idl
module HelloApp
{
  interface Hello
  {
      string sayHello();
      oneway void shutdown();
  };
};

------HelloServer.java
import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import org.omg.PortableServer.*;
import org.omg.PortableServer.POA;
import java.util.Properties;

public class HelloServer
{

    public static void main(String args[])
    {
        try
        {
            // create and initialize the ORB
            ORB orb = ORB.init(args, null);

            // get reference to rootpoa & activate the POAManager
            POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
            rootpoa.the_POAManager().activate();

            // create servant and register it with the ORB
            HelloImpl helloImpl = new HelloImpl();
            helloImpl.setORB(orb);

            // get object reference from the servant
            org.omg.CORBA.Object ref = rootpoa.servant_to_reference(helloImpl);
            Hello href = HelloHelper.narrow(ref);

            // get the root naming context
            // NameService invokes the name service
            org.omg.CORBA.Object objRef =
            orb.resolve_initial_references("NameService");

            // Use NamingContextExt which is part of the Interoperable
            // Naming Service (INS) specification.
            NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);

            // bind the Object Reference in Naming
            String name = "Hello";
            NameComponent path[] = ncRef.to_name( name );
            ncRef.rebind(path, href);

            System.out.println("HelloServer ready and waiting ...");

            // wait for invocations from clients
            orb.run();
        }
            catch (Exception e)
        {
            System.err.println("ERROR: " + e);
            e.printStackTrace(System.out);
        }

        System.out.println("HelloServer Exiting ...");
    }
}

class HelloImpl extends HelloPOA
{
    private ORB orb;

    public void setORB(ORB orb_val)
    {
        orb = orb_val;
    }

    // implement sayHello() method
    public String sayHello()
    {
        return "\nHello world !!\n";
    }

    // implement shutdown() method
    public void shutdown()
    {
        orb.shutdown(false);
    }
}

-------HelloClient.java
import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;

public class HelloClient
{
    static Hello helloImpl;

    public static void main(String args[])
    {
        try
        {
            // create and initialize the ORB
                ORB orb = ORB.init(args, null);

            // get the root naming context
            org.omg.CORBA.Object objRef =
            orb.resolve_initial_references("NameService");
            // Use NamingContextExt instead of NamingContext. This is
            // part of the Interoperable naming Service.
            NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);

            // resolve the Object Reference in Naming
            String name = "Hello";
            helloImpl = HelloHelper.narrow(ncRef.resolve_str(name));

            System.out.println("Obtained a handle on server object: " + helloImpl);
            System.out.println(helloImpl.sayHello());
            helloImpl.shutdown();

            }
        catch (Exception e)
        {
            System.out.println("ERROR : " + e) ;
                e.printStackTrace(System.out);
            }
    }
}

Fremgangsmåde (på Linux):
$ idlj -fall Interface.idl
$ javac *.java HelloApp/*.java
$ orbd -ORBInitialPort 1050 &
$ java HelloServer -ORBInitialPort 1050 -ORBInitialHost localhost &
$ java HelloClient -ORBInitialPort 1050 -ORBInitialHost localhost
Avatar billede cogitans Nybegynder
12. januar 2003 - 19:27 #18
Jeg har prøvet, at skrive det første program ned i java. Det vil også godt kompileres. Men jeg kan ikke få den til at køre "rmic". Og det er her, hvor jeg er i tvivl, om man skal have et specielt program, eller nogle specielle filer, for at man kan få en RMI-forbindelse op at stå??
Avatar billede arne_v Ekspert
12. januar 2003 - 19:29 #19
Lidt mystisk.

RMIC.EXE skulle gerne ligge lig ved siden af JAVAC.EXE i BIN
directoriet.

Hvilken JDK version bruger du ?
Avatar billede cogitans Nybegynder
12. januar 2003 - 19:45 #20
Jeg bruger Forte for Java 4.0
Avatar billede arne_v Ekspert
12. januar 2003 - 19:48 #21
Aha.

Så skal du jo enten finde en måde at køre RMIC indefra den
eller køre RMIC fra en kommando-prompt "ved siden af".

Jeg kender desværre ikke NetBeans/Forte ret godt.
Avatar billede arne_v Ekspert
12. januar 2003 - 19:54 #22
Der står en del om RMI og om NetBeans/Forte i:
  http://www.cs.columbia.edu/~lok/3101/lectures/06-rmi.pdf
Avatar billede arne_v Ekspert
12. januar 2003 - 22:55 #23
Hmmm.

Jeg har lige checket.

Jeg kan ikke finde RMI i SUN ONE Studio 4 CE men godt i NetBeans 3.4 !

Shame on Sun.
Avatar billede arne_v Ekspert
12. januar 2003 - 22:56 #24
Men i NetBeans 3.4 kan du vælge:
  New
  RMI
  alt det du behøver

Og så skal build også nok virke.
Avatar billede arne_v Ekspert
14. januar 2003 - 20:37 #25
Er du kommet videre ?
Avatar billede cogitans Nybegynder
14. januar 2003 - 21:56 #26
Nej, ikke rigtigt. Jeg læser til eksamen for tiden, så jeg har ikke for meget tid ;-)
Men derfor vil jeg skam gerne stadig have et eksempel på CORBA....?
Avatar billede soreno Praktikant
15. januar 2003 - 11:29 #27
CORBA eksemplet er skam postet (og kan compile med jdk1.4.1) "12/01-2003 16:46:55"
Avatar billede cogitans Nybegynder
22. januar 2003 - 10:52 #28
Jeg har nu prøvet, at skrive det samme eksempel, som der er skrevet herinde. Men "module"'et vil ikke kompileres (og efterfølgende heller ingen af de andre). Det er vel fordi, jeg kompilerer dem inde fra Forte af? Hvordan lyder kompileringskommandoerne ude fra prompten af?
Avatar billede soreno Praktikant
22. januar 2003 - 11:03 #29
Jeg har ikke lige en windows maskine her, men jeg vil tro at dette virker:
idlj -fall Interface.idl
javac *.java HelloApp/*.java
start orbd -ORBInitialPort 1050 &
start java HelloServer -ORBInitialPort 1050 -ORBInitialHost localhost &
start java HelloClient -ORBInitialPort 1050 -ORBInitialHost localhost
Avatar billede cogitans Nybegynder
22. januar 2003 - 11:08 #30
Hvordan laver jeg det interface til den rette type? Altså hvis jeg bare laver en alm. interfacefil i Forte, så har filen efternavnet "java". Men filen skal jo gerne hedder "idl"?
Avatar billede soreno Praktikant
22. januar 2003 - 11:12 #31
Lav den i notepad eller lign.
Avatar billede soreno Praktikant
22. januar 2003 - 11:13 #32
Eller rename den med et program (Total Commander, stifjenden eller et console vindue).
Avatar billede cogitans Nybegynder
22. januar 2003 - 11:38 #33
Hvis jeg bruger "start"-kommandoen, så kommer der et nyt vindue frem, som hurtigt forsvinder igen. Hvis jeg skriver kommandoen uden "start", så kommer der en lang fejlmelding. Hvorfor gør der det, og hvad betyder den? (jeg har selvfølgelig kørt idlj først)

Sådan ser fejlen ud:

C:\CorbaTest>java HelloServer -ORBInitialPort 1050 -ORBInitialHost localhost
ERROR: org.omg.CORBA.COMM_FAILURE:  vmcid: SUN  minor code: 201  completed: No
org.omg.CORBA.COMM_FAILURE:  vmcid: SUN  minor code: 201  completed: No
        at com.sun.corba.se.internal.iiop.ConnectionTable.getConnection(Connecti
onTable.java:148)
        at com.sun.corba.se.internal.iiop.ConnectionTable.getConnection(Connecti
onTable.java:65)
        at com.sun.corba.se.internal.iiop.GIOPImpl.getConnection(GIOPImpl.java:6
7)
        at com.sun.corba.se.internal.corba.ClientDelegate.createRequest(ClientDe
legate.java:638)
        at com.sun.corba.se.internal.corba.ClientDelegate.createRequest(ClientDe
legate.java:580)
        at com.sun.corba.se.internal.corba.InitialNamingClient.resolve(InitialNa
mingClient.java:1004)
        at com.sun.corba.se.internal.corba.InitialNamingClient.resolveUsingBoots
trapProtocol(InitialNamingClient.java:687)
        at com.sun.corba.se.internal.corba.InitialNamingClient.cachedInitialRefe
rences(InitialNamingClient.java:1085)
        at com.sun.corba.se.internal.corba.InitialNamingClient.resolve_initial_r
eferences(InitialNamingClient.java:978)
        at com.sun.corba.se.internal.corba.ORB.resolve_initial_references(ORB.ja
va:2422)
        at HelloServer.main(HelloServer.java:43)
HelloServer Exiting ...
Avatar billede soreno Praktikant
22. januar 2003 - 11:44 #34
Tjaaa - jeg tror jeg ville åbne 3 vinduer og gøre sådan:

Vindue1:
  idlj -fall Interface.idl
  javac *.java HelloApp/*.java
  orbd -ORBInitialPort 1050 &

Vindue2:
  java HelloServer -ORBInitialPort 1050 -ORBInitialHost localhost &

Vindue3:
  java HelloClient -ORBInitialPort 1050 -ORBInitialHost localhost


Hvis ikke det virker så prøv lige at poste output fra de andre vinduer også.
(Jeg kender ikke specielt meget til CORBA, men mon ikke "CORBA.COMM_FAILURE" betyder noget med at der ikke kunne kommunikeres - altså får den ikke fat i noget "i den anden ende".)
Avatar billede cogitans Nybegynder
22. januar 2003 - 11:55 #35
Den giver stadig fejl:

C:\CorbaTest>idlj -fall Interface.idl

C:\CorbaTest>javac *.java HelloApp/*.java
HelloClient.java:18: cannot resolve symbol
symbol  : class Hello
location: class HelloClient
    static Hello helloImpl;
          ^
HelloServer.java:69: cannot resolve symbol
symbol  : class HelloPOA
location: class HelloImpl
class HelloImpl extends HelloPOA
                        ^
HelloClient.java:36: cannot resolve symbol
symbol  : variable HelloHelper
location: class HelloClient
            helloImpl = HelloHelper.narrow(ncRef.resolve_str(name));
                        ^
HelloServer.java:38: cannot resolve symbol
symbol  : class Hello
location: class HelloServer
            Hello href = HelloHelper.narrow(ref);
            ^
HelloServer.java:38: cannot resolve symbol
symbol  : variable HelloHelper
location: class HelloServer
            Hello href = HelloHelper.narrow(ref);
                        ^
5 errors

C:\CorbaTest>
???
Avatar billede soreno Praktikant
22. januar 2003 - 12:00 #36
Undersøg at filerne er navngivet korrekt.

Klassen Hello skal ligge i Hello.java (det dur ikke med hello.java).
Avatar billede cogitans Nybegynder
22. januar 2003 - 12:12 #37
Okay - nu er vi da ved at komme nogle vejne...
Jeg har nu leget lidt med det, og har fået reduceret fejlantallet til 3. Jeg tror, at fejlen er noget med, at jeg ikke har installeret de defaulte CORBA-filer i java på min computer?

Fejlen ser således ud:

C:\CorbaTest>javac *.java HelloApp/*.java
HelloImpl.java:1: cannot resolve symbol
symbol  : class HelloPOA
location: class HelloImpl
class HelloImpl extends HelloPOA
                        ^
HelloImpl.java:3: cannot resolve symbol
symbol  : class ORB
location: class HelloImpl
    private ORB orb;
            ^
HelloImpl.java:5: cannot resolve symbol
symbol  : class ORB
location: class HelloImpl
    public void setORB(ORB orb_val)
                      ^
3 errors

C:\CorbaTest>
Avatar billede soreno Praktikant
22. januar 2003 - 12:20 #38
Hvilken version af JDK'en har du ?
Kan vist nok findes med:
java -version

Forrensten skal filnavnet have nøjagtig samme navn som klassen, derfor skal
HelloPOA klassen være i HelloPOA.java filen.
Avatar billede cogitans Nybegynder
22. januar 2003 - 12:21 #39
C:\CorbaTest>java -version
java version "1.4.0_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0_01-b03)
Java HotSpot(TM) Client VM (build 1.4.0_01-b03, mixed mode)

C:\CorbaTest>
Avatar billede soreno Praktikant
22. januar 2003 - 12:24 #40
Som jeg skrev "15/01-2003 11:29:56":
CORBA eksemplet er skam postet (og kan compile med jdk1.4.1) "12/01-2003 16:46:55"

Jeg ved ikke lige om det skulle have noget at sige.
Men jeg har ikke mulighed for at teste det her med 1.4.0
Avatar billede cogitans Nybegynder
22. januar 2003 - 12:24 #41
Jamen, HelloPOA er da slet ikke en fil, jeg har/skal lave. Den står da ikke i eksemplet ovenover. Desuden mener jeg også, at noget-POA-noget er noget med CORBA-teknologien. Det var derfor, at jeg skrev, at jeg troede, det var noget med den generelle CORBA-teknologifiler, som jeg ikke havde installeret ordentlig på min computer...?
Avatar billede cogitans Nybegynder
22. januar 2003 - 12:25 #42
Okay - der kan du jo selvfølgelig have en pointe ;-)
Avatar billede soreno Praktikant
22. januar 2003 - 12:29 #43
Når du kører:
idlj -fall Interface.idl

Laves der et directory der hedder "HelloApp".
De filer der er der skal stemme overens med klassenavnene.

Altså skal klassen HelloPOA hedde HelloPOA.java

Grunden til det bøvl er at Windows ikke skelner mellem store og små bogstaver - det gør unix baserede systemer derimod.

Derfor, det som sker automatisk her, er ikke sikkert sker automatisk hos dig. (jeg bruge
Linux - du bruge Windows).
Avatar billede cogitans Nybegynder
22. januar 2003 - 12:34 #44
Jeg kan se, at den genererer nogle filer (bl.a. POA), men disse er *.java. Skal de så ikke også kompileres?
Avatar billede soreno Praktikant
22. januar 2003 - 12:42 #45
Det sker med denne line:
javac *.java HelloApp/*.java
Avatar billede soreno Praktikant
22. januar 2003 - 12:42 #46
Altså hvis du står her og gør det:
C:\CorbaTest>javac *.java HelloApp/*.java
Avatar billede cogitans Nybegynder
22. januar 2003 - 12:42 #47
Nu har jeg opdateret til 1.4.1, men jeg får stdig dette problem:

C:\CorbaTest>javac *.java HelloApp/*.java
HelloImpl.java:1: cannot resolve symbol
symbol  : class HelloPOA
location: class HelloImpl
class HelloImpl extends HelloPOA
                        ^
HelloImpl.java:3: cannot resolve symbol
symbol  : class ORB
location: class HelloImpl
    private ORB orb;
            ^
HelloImpl.java:5: cannot resolve symbol
symbol  : class ORB
location: class HelloImpl
    public void setORB(ORB orb_val)
                      ^
3 errors

C:\CorbaTest>
Avatar billede cogitans Nybegynder
22. januar 2003 - 13:01 #48
Glem lige den sidste fejl - jeg har fundet ud af den :-)
Avatar billede cogitans Nybegynder
22. januar 2003 - 13:07 #49
Nu kan jeg kompilere det. Men når jeg prøver at køre det, så står følgende:

C:\CorbaTest>orbd -ORBInitialPort 1050
Usage: orbd <options>

where <options> includes:
  -port                  Activation Port where the ORBD should be started, defa
lt 1049 (optional)
  -defaultdb            Directory for ORBD files, default "./orb.db" (optional

  -serverid              Server Id for ORBD, default 1 (optional)
  -ORBInitialPort        Initial Port (required)
  -ORBInitialHost        Initial HostName (required)


org.omg.CORBA.INTERNAL:  vmcid: SUN  minor code: 209  completed: No
        at com.sun.corba.se.internal.iiop.GIOPImpl.createListener(GIOPImpl.java
253)
        at com.sun.corba.se.internal.iiop.GIOPImpl.getEndpoint(GIOPImpl.java:20
)
        at com.sun.corba.se.internal.POA.POAORB.setPersistentServerPort(POAORB.
ava:445)
        at com.sun.corba.se.internal.POA.POAORB.parseProperties(POAORB.java:271

        at com.sun.corba.se.internal.Interceptors.PIORB.parseProperties(PIORB.j
va:341)
        at com.sun.corba.se.internal.corba.ORB.set_parameters(ORB.java:458)
        at com.sun.corba.se.internal.POA.POAORB.set_parameters(POAORB.java:153)
        at com.sun.corba.se.internal.Interceptors.PIORB.set_parameters(PIORB.ja
a:333)
        at org.omg.CORBA.ORB.init(ORB.java:346)
        at com.sun.corba.se.internal.Activation.ORBD.createORB(ORBD.java:99)
        at com.sun.corba.se.internal.Activation.ORBD.run(ORBD.java:109)
        at com.sun.corba.se.internal.Activation.ORBD.main(ORBD.java:327)

C:\CorbaTest>

Hvad betyder dette???

Soreno har skrevet de kopileringskomandoer ned, som jeg skal bruge. Men ved nogle af dem står der "&" sidst i linien. Jeg går ud fra, at dette tegn ikke skal skrives, men det blot er skrevet herinde til "hjælp", så man (jeg) kan se, at jeg skal skrive FLERE linier???
Avatar billede soreno Praktikant
22. januar 2003 - 13:12 #50
Det er hele linien der skal skrives:
orbd -ORBInitialPort 1050 &

I linux ville orbd (orb daemon) blive kørt i baggrunden (fordi der er "&" efter kommandoen) - men jeg har oplevet at det også skal gøres i Windows..
Avatar billede cogitans Nybegynder
22. januar 2003 - 13:51 #51
Hmm - okay. Det står der vist bare ikke i default syntaxen, som kommer frem ved disse fejlmeddelelser...
Avatar billede soreno Praktikant
22. januar 2003 - 14:02 #52
Nej, det er sådan en ting som ofte tages for givet at brugeren ved..

Det er en Operativ System kommando - ikke en program specifik kommando.
Ligesom man kan redirecte output, f.eks.
javac Foo.java > output.txt
Avatar billede cogitans Nybegynder
22. januar 2003 - 14:07 #53
Hmmm ... alrighty then.
Avatar billede soreno Praktikant
22. januar 2003 - 14:25 #54
Får du stadig fejl ?
Avatar billede cogitans Nybegynder
22. januar 2003 - 16:30 #55
Jeg har ikke prøvet endnu...det gør jeg i morgen...
Avatar billede arne_v Ekspert
06. februar 2003 - 21:38 #56
Fik du det til at virke ?
Avatar billede cogitans Nybegynder
07. februar 2003 - 09:58 #57
Jeg har ikke haft tid til at prøve siden sidst...men nu får herren, som gav eksemplerne, point...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester