import org.omg.CosNaming.*; import org.omg.CosNaming.NamingContextPackage.*; import org.omg.CORBA.*; import org.omg.PortableServer.*; public class tuitionadj extends tuitionadjustorPOA { private int ua, ga; // amounts to adjust tuitions by tuitionadj(int u0, int g0) { super(); ua = u0; ga = g0; } public org.omg.CORBA.Object visitu (undergradHolder u) { undergrad ug = u.value; ug.tuition( ug.tuition() + ua ); if (ug.next() != null) ug.next().accept(this._this()); // this is it! return ug; } public org.omg.CORBA.Object visitg (gradHolder g) { grad gg = g.value; gg.tuition( gg.tuition() * ga ); if (gg.next() !=null) gg.next().accept(this._this()); return gg; } public static void main(String[] args) { try { // initialize local ORB ORB myorb = ORB.init(args,null); // initialize portable Object Adapter, glue to ORB POA rootpoa = (POA)myorb.resolve_initial_references("RootPOA"); rootpoa.the_POAManager().activate(); // Register objref with name service (similar to registry) org.omg.CORBA.Object nsobjref = myorb.resolve_initial_references("NameService"); //narrowing = CORBA type casting: NamingContext ncref = NamingContextHelper.narrow(nsobjref); // create instance of server object, call POA to convert to objref tuitionadj server = new tuitionadj(50,3); org.omg.CORBA.Object objref1 = rootpoa.servant_to_reference(server); NameComponent[] path1 = { new NameComponent("tuitionadj","Object") }; ncref.rebind(path1,objref1); // actual registration // now wait for client invocation System.out.println("waiting for client call..."); myorb.run(); } catch (Exception e) {e.printStackTrace();} } // main }