/**
  * Create a new NamingContext, bind it in this Naming Context and return its object reference.
  * This is equivalent to using new_context() followed by bind_context() with the supplied name and
  * the object reference for the newly created NamingContext.
  *
  * @param n a sequence of NameComponents which is the name to be unbound.
  * @return an object reference for a new NamingContext object implemented by this Name Server,
  *     bound to the supplied name.
  * @exception org.omg.CosNaming.NamingContextPackage.AlreadyBound An object is already bound under
  *     the supplied name.
  * @exception org.omg.CosNaming.NamingContextPackage.NotFound A name with multiple components was
  *     supplied, but the first component could not be resolved.
  * @exception org.omg.CosNaming.NamingContextPackage.CannotProceed Could not proceed in resolving
  *     the n-1 components of the supplied name.
  * @exception org.omg.CosNaming.NamingContextPackage.InvalidName The supplied name is invalid
  *     (i.e., has length less than 1).
  * @exception org.omg.CORBA.SystemException One of a fixed set of CORBA system exceptions.
  * @see new_context
  * @see bind_context
  */
 public NamingContext bind_new_context(NameComponent[] n)
     throws org.omg.CosNaming.NamingContextPackage.NotFound,
         org.omg.CosNaming.NamingContextPackage.AlreadyBound,
         org.omg.CosNaming.NamingContextPackage.CannotProceed,
         org.omg.CosNaming.NamingContextPackage.InvalidName {
   NamingContext nc = null;
   NamingContext rnc = null;
   try {
     if (debug) dprint("bind_new_context " + nameToString(n));
     // The obvious solution:
     nc = this.new_context();
     this.bind_context(n, nc);
     rnc = nc;
     nc = null;
   } finally {
     try {
       if (nc != null) nc.destroy();
     } catch (org.omg.CosNaming.NamingContextPackage.NotEmpty e) {
     }
   }
   if (updateLogger.isLoggable(Level.FINE)) {
     // isLoggable call to make sure that we save some precious
     // processor cycles, if there is no need to log.
     updateLogger.fine(
         LogKeywords.NAMING_BIND
             + "New Context Bound To "
             + NamingUtils.getDirectoryStructuredName(n));
   }
   return rnc;
 }
示例#2
0
  public static void main(String args[]) {
    // public void run() {
    String nomOffice = args[0];
    // Tableau des id/nom des sites
    OfficeDBManager db = new OfficeDBManager();

    Hashtable<Short, String> codeSite = new Hashtable<Short, String>();
    // Table des id des sites
    short[] idSite = db.getIdSites();
    for (int i = 0; i < idSite.length; i++) {
      codeSite.put(idSite[i], db.getCodeSite(idSite[i]));
    }

    try {
      org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);

      // Gestion du POA
      // ****************
      // Recuperation du POA
      POA rootPOA = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));

      // Creation du servant
      // *********************
      OfficeImpl monOffice = new OfficeImpl(orb, codeSite);

      // Activer le servant au sein du POA et recuperer son ID
      byte[] monOfficeId = rootPOA.activate_object(monOffice);

      // Activer le POA manager
      rootPOA.the_POAManager().activate();

      /** ****** Enregistrement dans le service de nommage ******* */

      // Recuperation du naming service
      NamingContext nameRoot =
          org.omg.CosNaming.NamingContextHelper.narrow(
              orb.resolve_initial_references("NameService"));

      // Construction du nom a enregistrer
      org.omg.CosNaming.NameComponent[] nameToRegister = new org.omg.CosNaming.NameComponent[1];
      nameToRegister[0] = new org.omg.CosNaming.NameComponent(nomOffice, "");

      // Enregistrement de l'objet CORBA dans le service de noms
      nameRoot.rebind(nameToRegister, rootPOA.servant_to_reference(monOffice));
      System.out.println("==> Nom '" + nomOffice + "' est enregistre dans le service de noms.");

      String IORServant = orb.object_to_string(rootPOA.servant_to_reference(monOffice));
      System.out.println("L'objet possede la reference suivante :");
      System.out.println(IORServant);

      // Lancement de l'ORB et mise en attente de requete
      // **************************************************
      orb.run();

    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  /**
   * Implements resolving names in this NamingContext. The first component of the supplied name is
   * resolved in this NamingContext by calling Resolve(). If there are no more components in the
   * name, the resulting object reference is returned. Otherwise, the resulting object reference
   * must have been bound as a context and be narrowable to a NamingContext. If this is the case,
   * the remaining components of the name is resolved in the resulting NamingContext. This method is
   * static for maximal reuse - even for extended naming context implementations where the recursive
   * semantics still apply.
   *
   * @param impl an implementation of NamingContextDataStore
   * @param n a sequence of NameComponents which is the name to be resolved.
   * @return the object reference bound under the supplied name.
   * @exception org.omg.CosNaming.NamingContextPackage.NotFound A name with multiple components was
   *     supplied, but the first component could not be resolved.
   * @exception org.omg.CosNaming.NamingContextPackage.CannotProceed Could not proceed in resolving
   *     the first component of the supplied name.
   * @exception org.omg.CosNaming.NamingContextPackage.InvalidName The supplied name is invalid
   *     (i.e., has length less than 1).
   * @exception org.omg.CORBA.SystemException One of a fixed set of CORBA system exceptions.
   * @see resolve
   */
  public static org.omg.CORBA.Object doResolve(NamingContextDataStore impl, NameComponent[] n)
      throws org.omg.CosNaming.NamingContextPackage.NotFound,
          org.omg.CosNaming.NamingContextPackage.CannotProceed,
          org.omg.CosNaming.NamingContextPackage.InvalidName {
    org.omg.CORBA.Object obj = null;
    BindingTypeHolder bth = new BindingTypeHolder();

    // Length must be greater than 0
    if (n.length < 1) throw new InvalidName();

    // The identifier must be set
    if (n.length == 1) {
      synchronized (impl) {
        // Resolve first level in this context
        obj = impl.Resolve(n[0], bth);
      }
      if (obj == null) {
        // Object was not found
        throw new NotFound(NotFoundReason.missing_node, n);
      }
      return obj;
    } else {
      // n.length > 1
      if ((n[1].id.length() == 0) && (n[1].kind.length() == 0)) {
        throw new InvalidName();
      }

      NamingContext context = resolveFirstAsContext(impl, n);

      // Compute restOfName = name[1..length]
      NameComponent[] tail = new NameComponent[n.length - 1];
      System.arraycopy(n, 1, tail, 0, n.length - 1);

      // Resolve rest of name in context
      try {
        // First try to resolve using the local call, this should work
        // most of the time unless there are federated naming contexts.
        Servant servant = impl.getNSPOA().reference_to_servant(context);
        return doResolve(((NamingContextDataStore) servant), tail);
      } catch (Exception e) {
        return context.resolve(tail);
      }
    }
  }
  private static void rlist(NamingContext ctx, NameComponent[] base, StringBuffer buf) {
    BindingListHolder listHolder = new BindingListHolder(new Binding[0]);
    BindingIteratorHolder iterHolder = new BindingIteratorHolder();
    ctx.list(0, listHolder, iterHolder);
    BindingHolder bindingHolder = new BindingHolder();

    if (iterHolder.value == null) return;

    NameComponent[] name = new NameComponent[base.length + 1];
    for (int i = 0; i < base.length; i++) name[i] = base[i];

    while (iterHolder.value.next_one(bindingHolder)) {
      Binding binding = bindingHolder.value;
      name[name.length - 1] = binding.binding_name[0];
      try {
        String stringName = namingService.to_string(name);
        buf.append(stringName);
      } catch (Exception e) {
        buf.append(e.getMessage());
      }

      if (binding.binding_type.value() == BindingType._ncontext) {
        // this entry is for a subcontext
        // add trailing '/' just to distinguish
        // a subcontext from a regular object
        buf.append('/');
        buf.append('\n');

        // recursively list the subcontext contents
        try {
          NamingContext subCtx = NamingContextHelper.narrow(ctx.resolve(binding.binding_name));
          rlist(subCtx, name, buf);
        } catch (Exception e) {
          buf.append(e.getMessage());
        }
      } else {
        buf.append('\n');
      }
    }
  }
  /**
   * Implements unbinding bound names in this NamingContext. If the name contains only one
   * component, the name is unbound in this NamingContext using Unbind(). Otherwise, the first
   * component of the name is resolved in this NamingContext and unbind passed to the resulting
   * NamingContext. This method is static for maximal reuse - even for extended naming context
   * implementations where the recursive semantics still apply.
   *
   * @param impl an implementation of NamingContextDataStore
   * @param n a sequence of NameComponents which is the name to be unbound.
   * @exception org.omg.CosNaming.NamingContextPackage.NotFound A name with multiple components was
   *     supplied, but the first component could not be resolved.
   * @exception org.omg.CosNaming.NamingContextPackage.CannotProceed Could not proceed in resolving
   *     the n-1 components of the supplied name.
   * @exception org.omg.CosNaming.NamingContextPackage.InvalidName The supplied name is invalid
   *     (i.e., has length less than 1).
   * @exception org.omg.CORBA.SystemException One of a fixed set of CORBA system exceptions.
   * @see resolve
   */
  public static void doUnbind(NamingContextDataStore impl, NameComponent[] n)
      throws org.omg.CosNaming.NamingContextPackage.NotFound,
          org.omg.CosNaming.NamingContextPackage.CannotProceed,
          org.omg.CosNaming.NamingContextPackage.InvalidName {
    // Name valid?
    if (n.length < 1) throw new InvalidName();

    // Unbind here?
    if (n.length == 1) {
      // The identifier must be set
      if ((n[0].id.length() == 0) && (n[0].kind.length() == 0)) {
        throw new InvalidName();
      }

      org.omg.CORBA.Object objRef = null;
      synchronized (impl) {
        // Yes: unbind in this context
        objRef = impl.Unbind(n[0]);
      }

      if (objRef == null)
        // It was not bound
        throw new NotFound(NotFoundReason.missing_node, n);
      // Done
      return;
    } else {
      // No: unbind in a different context

      // Resolve first  - must be resolveable
      NamingContext context = resolveFirstAsContext(impl, n);

      // Compute tail
      NameComponent[] tail = new NameComponent[n.length - 1];
      System.arraycopy(n, 1, tail, 0, n.length - 1);

      // Propagate unbind to this context
      context.unbind(tail);
    }
  }
  public static void main(String[] args) {
    loggedUser = args[0];
    try {
      ORB orb = ORB.init(args, null); // initialize ORB
      o = orb.resolve_initial_references("NameService");

      // get reference to Deal object
      NamingContext ncRef = NamingContextHelper.narrow(o);
      NameComponent[] nc = new NameComponent[1];
      nc[0] = new NameComponent();
      nc[0].id = "Auction";
      nc[0].kind = "";
      a = AuctionHelper.narrow(ncRef.resolve(nc));

      isr = new InputStreamReader(System.in);
      in = new BufferedReader(isr);
      int sel = 0;
      System.out.println("******* You have logged in Successfully! ********");
      while (sel == 0) {
        System.out.println("Please make a selection");
        System.out.println("\t1. Get all the listed auctions");
        System.out.println("\t2. List a new item for auction.");
        System.out.println("\t3. Lookup an auction.");
        System.out.println("\t4. Place a bid on an auction.");
        System.out.println("\t5. Logout.");
        System.out.print("Please make your selection > ");
        String f = in.readLine();
        try {
          sel = Integer.parseInt(f);
        } catch (Exception e) {
          sel = 42;
        }
        switch (sel) {
          case 1:
            allItems();
            sel = 0;
            break;
          case 2:
            newAuction();
            sel = 0;
            break;
          case 3:
            System.out.println("Stub");
            sel = 0;
            break;
          case 4:
            placeBid();
            sel = 0;
            break;
          case 5:
            a.logout(loggedUser);
            System.out.println("BYE!");
            System.exit(0);
          default:
            System.out.println("You have not made a valid selection, please try again.");
            sel = 0;
            break;
        }
      }
    } catch (Exception e) {
      System.out.println("ERROR : " + e);
      e.printStackTrace(System.out);
    }
  }
  /** @param args the command line arguments */
  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
      Log_viewerImpl log_viewerImpl = new Log_viewerImpl();
      log_viewerImpl.setORB(orb);

      LogFrame frame = new LogFrame(log_viewerImpl);
      frame.setVisible(true);

      log_viewerImpl.setFrame(frame);

      // get object reference from the servant
      org.omg.CORBA.Object ref = rootpoa.servant_to_reference(log_viewerImpl);
      Log_viewer href = Log_viewerHelper.narrow(ref);

      // read stringified Registry to file
      FileReader fr = new FileReader(IORFILE);
      BufferedReader br = new BufferedReader(fr);
      String remoteRegistryIOR = br.readLine();

      // get the romote Registry
      org.omg.CORBA.Object ncobj = orb.string_to_object(remoteRegistryIOR);
      NamingContext rootNC = NamingContextHelper.narrow(ncobj);
      frame.println("Obtained Name Service reference.");
      log_viewerImpl.serRootNC(rootNC);

      NameComponent[] name = new NameComponent[1];
      name[0] = new NameComponent("Logger", "");

      try {

        rootNC.bind(name, href);

      } catch (org.omg.CORBA.UserException ue) {
        ue.printStackTrace();
        System.exit(-1);
      }

      frame.println("Logger Remote Interface bound in Name Service");

      // wait for invocations from client
      frame.println("Logger ready and waiting ...");
      orb.run();

      frame.println("Logger Exiting ...");
      System.out.println("Logger Exiting ...");

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

      // e.printStackTrace(System.out);
    }
  }
  /**
   * Implements all four flavors of binding. It uses Resolve() to check if a binding already exists
   * (for bind and bind_context), and unbind() to ensure that a binding does not already exist. If
   * the length of the name is 1, then Bind() is called with the name and the object to bind.
   * Otherwise, the first component of the name is resolved in this NamingContext and the
   * appropriate form of bind passed to the resulting NamingContext. This method is static for
   * maximal reuse - even for extended naming context implementations where the recursive semantics
   * still apply.
   *
   * @param impl an implementation of NamingContextDataStore
   * @param n a sequence of NameComponents which is the name under which the object will be bound.
   * @param obj the object reference to be bound.
   * @param rebind Replace an existing binding or not.
   * @param bt Type of binding (as object or as context).
   * @exception org.omg.CosNaming.NamingContextPackage.NotFound A name with multiple components was
   *     supplied, but the first component could not be resolved.
   * @exception org.omg.CosNaming.NamingContextPackage.CannotProceed Could not * proceed in
   *     resolving the first component of the supplied name.
   * @exception org.omg.CosNaming.NamingContextPackage.InvalidName The supplied name is invalid
   *     (i.e., has length less than 1).
   * @exception org.omg.CosNaming.NamingContextPackage.AlreadyBound An object is already bound under
   *     the supplied name.
   * @exception org.omg.CORBA.SystemException One of a fixed set of CORBA system exceptions.
   * @see resolve
   * @see unbind
   * @see bind
   * @see bind_context
   * @see rebind
   * @see rebind_context
   */
  public static void doBind(
      NamingContextDataStore impl,
      NameComponent[] n,
      org.omg.CORBA.Object obj,
      boolean rebind,
      org.omg.CosNaming.BindingType bt)
      throws org.omg.CosNaming.NamingContextPackage.NotFound,
          org.omg.CosNaming.NamingContextPackage.CannotProceed,
          org.omg.CosNaming.NamingContextPackage.InvalidName,
          org.omg.CosNaming.NamingContextPackage.AlreadyBound {
    // Valid name?
    if (n.length < 1) throw new InvalidName();

    // At bottom level?
    if (n.length == 1) {
      // The identifier must be set
      if ((n[0].id.length() == 0) && (n[0].kind.length() == 0)) {
        throw new InvalidName();
      }

      // Ensure synchronization of backend
      synchronized (impl) {
        // Yes: bind object in this context under the name
        BindingTypeHolder bth = new BindingTypeHolder();
        if (rebind) {
          org.omg.CORBA.Object objRef = impl.Resolve(n[0], bth);
          if (objRef != null) {
            // Refer Naming Service Doc:00-11-01 section 2.2.3.4
            // If there is an object already bound with the name
            // and the binding type is not ncontext a NotFound
            // Exception with a reason of not a context has to be
            // raised.
            // Fix for bug Id: 4384628
            if (bth.value.value() == BindingType.nobject.value()) {
              if (bt.value() == BindingType.ncontext.value()) {
                throw new NotFound(NotFoundReason.not_context, n);
              }
            } else {
              // Previously a Context was bound and now trying to
              // bind Object. It is invalid.
              if (bt.value() == BindingType.nobject.value()) {
                throw new NotFound(NotFoundReason.not_object, n);
              }
            }
            impl.Unbind(n[0]);
          }

        } else {
          if (impl.Resolve(n[0], bth) != null)
            // "Resistence is futile." [Borg pickup line]
            throw new AlreadyBound();
        }

        // Now there are no other bindings under this name
        impl.Bind(n[0], obj, bt);
      }
    } else {
      // No: bind in a different context
      NamingContext context = resolveFirstAsContext(impl, n);

      // Compute tail
      NameComponent[] tail = new NameComponent[n.length - 1];
      System.arraycopy(n, 1, tail, 0, n.length - 1);

      // How should we propagate the bind
      switch (bt.value()) {
        case BindingType._nobject:
          {
            // Bind as object
            if (rebind) context.rebind(tail, obj);
            else context.bind(tail, obj);
          }
          break;
        case BindingType._ncontext:
          {
            // Narrow to a naming context using Java casts. It must
            // work.
            NamingContext objContext = (NamingContext) obj;
            // Bind as context
            if (rebind) context.rebind_context(tail, objContext);
            else context.bind_context(tail, objContext);
          }
          break;
        default:
          // This should not happen
          throw staticWrapper.namingCtxBadBindingtype();
      }
    }
  }