List all objects from a NamingService using JacORB

来源:互联网 发布:zbrush 4r8 mac 编辑:程序博客网 时间:2024/04/29 13:53

 

Purpose: To list all objects and their IOR within a NamingService.

 

 

1. Write NSWrapper.java

2. compile NSWrapper.java

3. run NSWrapper using following command line

 

:-#cat listNS.sh

#!/bin/ksh

JACORB_HOME=/vendorpackages/PrismTech/JACORB

java -classpath /
./:/
${JACORB_HOME}/lib/avalon-framework.jar:/
${JACORB_HOME}/lib/jacorb.jar:/
${JACORB_HOME}/lib/logkit.jar /
NSWrapper

4. attached is source file of NSWrapper.java

 

/*
 * Description: Utility class for using the CORBA Naming Service
 *
 */

import org.omg.CORBA.ORB;
import org.omg.CosNaming.Binding;
import org.omg.CosNaming.BindingHolder;
import org.omg.CosNaming.BindingIteratorHolder;
import org.omg.CosNaming.BindingListHolder;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import org.omg.CosNaming.NamingContextPackage.AlreadyBound;
import org.omg.CosNaming.NamingContextPackage.CannotProceed;
import org.omg.CosNaming.NamingContextPackage.InvalidName;
import org.omg.CosNaming.NamingContextPackage.NotFound;

import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

/**
 * This class wraps the CORBA Naming Service with methods to make it more
 * 'userfriendly'.
 *
 */
public class NSWrapper {
   
    //private static final Logger m_log = Logger.getLogger( NSWrapper.class.getName());
   
    private NamingContextExt   context = null;
    private String namingServiceStr = null;
    private ORB orb = null;
   
    private static final String ORB_PROPERTY = "org.omg.CORBA.ORBClass";
    private static final String ORB_DEFAULT = "org.jacorb.orb.ORB";
    private static final String ORB_SINGLETON_PROPERTY = "org.omg.CORBA.ORBSingletonClass";
    private static final String ORB_SINGLETON_DEFAULT = "org.jacorb.orb.ORBSingleton";

    // private static final ORB orb = getOrb();
   
    private NSWrapper(String str) {
     namingServiceStr = str;
    }

    private void initOrb() {
     String orbClass = System.getProperty(ORB_PROPERTY, ORB_DEFAULT);
        String orbSingleton = System.getProperty(ORB_SINGLETON_PROPERTY, ORB_SINGLETON_DEFAULT);

        Properties props = System.getProperties();
        props.put(ORB_PROPERTY, orbClass);
        props.put(ORB_SINGLETON_PROPERTY, orbSingleton);

        orb = ORB.init(new String[0], props);
       
        org.omg.CORBA.Object obj = orb.string_to_object(namingServiceStr);
        context = NamingContextExtHelper.narrow(obj);
    }

   
    // =============================================================================
    // ==================== public wrapped  methods  ===============================
    // =============================================================================

    public void bind(String name, org.omg.CORBA.Object obj)
            throws NotFound, CannotProceed, InvalidName, AlreadyBound
 {
        context.bind(context.to_name(name), obj);
    }


    public void unbind(String name)
            throws NotFound, CannotProceed, InvalidName
 {
     context.unbind(context.to_name(name));
    }

    public void rebind(String name, org.omg.CORBA.Object obj)
            throws NotFound, CannotProceed, InvalidName
 {
     context.rebind(context.to_name(name), obj);
    }

    // ===================== public tool functions =========================
    // =====================================================================
   
   
    /**
     * Get an IOR for object identified by name.
     *
     * @param name of object.
     * @return IOR of the object name.
     */
    public String resolve(String name)
 {
        int loopUntil = 5;
        org.omg.CORBA.Object obj;
       
        for (int i=0; i<loopUntil;i++){
         try {
          obj = context.resolve_str(name);
          return orb.object_to_string(obj);
         } catch (NotFound e) {
          if(i>=loopUntil){
           return null;
                }
                // Sleep a while
                synchronized (this) {
                    try{
                         wait(1000);
                    } catch (Exception ex) {
                        // ignore
                    }
                }
         } catch (CannotProceed e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      } catch (InvalidName e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
      }

        }
        return null; // Will never happen, makes the compiler to shut up.
    }


    /**
     * List all names within a naming service.
     *
     * @return List of names
     */
    private List<String> list()
    {
     List<String> rets = new ArrayList<String>();
     
        try
        {
            BindingListHolder blsoh =
                new BindingListHolder(new Binding[0]);

            BindingIteratorHolder bioh =
                new BindingIteratorHolder();

            context.list( 0, blsoh, bioh );

            BindingHolder bh = new BindingHolder();

            if( bioh.value == null )
                return rets;

            while( bioh.value.next_one( bh ))
            {
                String stringName = context.to_string(bh.value.binding_name);
                rets.add(stringName);
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
  return rets;
    }

    /**
     * List all initial services.
     *
     */
    public void listInitialServices()
    {
     String services[] = orb.list_initial_services();
        if (services != null){
         System.out.println("There are total "+services.length+" initial service");
         for (int i=0;i<services.length;i++)
          System.out.println(" initial service["+i+"] = ["+services[i]+"]");
        }
    }
   
   
    public static void main(String args[]) {

     String ns = "corbaloc::localhost:34000/NameService";  // incore4 is must, localhost will failed.

     NSWrapper wrapper = new NSWrapper(ns);
     wrapper.initOrb();
     
     // wrapper.listInitialServices();
     
     // get all registered name objects.
     List<String> names = wrapper.list();
     String name = null;
     String ior = null;
     for (int i=0;i<names.size();i++)
     {
      name = names.get(i);
      ior = wrapper.resolve(name);
      System.out.println("IOR["+name+"]=["+ior+"]");
     }
    }
}

 

 

原创粉丝点击