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) { e.printStackTrace(); }
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();
RMI har nogle ulemper, som jeg kan komme udenom - f.eks. kan man kun have ET RMI-register igang pr. JVM hvilket betyder, at jeg ikke kan have registre på flere porte, og den går bare ikke !
Umiddelbart har jeg svært ved at kun et registry per JVM som et stort problem, men der er sikert gode grunde til det.
Men hvis du alligevel vil have forskellige directories, hvorfor så have et directory ? Med nogen ganske almindelige sockets skal du selvfølgelig selv stå for serialisering og deserialisering, men så svært er det heller ikke. Og med sockets har du frit slag til at lave det som du vil.
Jeg har bare ikke tiden til at lave det manuelt, som RMI gør af sig selv, f.eks. mht. trådning. Mest af alt er det navne-servicen jeg benytter mig af, og som vil tage tid at lave...
Nu kender jeg absolut keines til web-services, men ved blot at Tomcat er en JSP-container (ikke?). Hvad går web-services ud på og hvordan distribuerer man objekter?
Den simple måde at bruge Axis på er: - man downloader og installerer Tomcat - man downloader og kopierer Axis web applikationen til Tomcat webapps directory - man tager omdøber sine services (svarer til ServerImpl.java i RMI) Serv1.java,...,ServX.java til Serv1.jws,...,ServX.jws og kopierer dem til Axis directoriet i Tomcat - Axis generer så Skeleton kode første gang de kaldes - så kører du wsdl2java og får genereret stub kode - så skriver du client koden og distrubuerer client+stub kode
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.