summaryrefslogtreecommitdiff
path: root/trunk/TAO/examples/Simulator/DOVEBrowser/PushConsumerFactory.java
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/TAO/examples/Simulator/DOVEBrowser/PushConsumerFactory.java')
-rw-r--r--trunk/TAO/examples/Simulator/DOVEBrowser/PushConsumerFactory.java368
1 files changed, 368 insertions, 0 deletions
diff --git a/trunk/TAO/examples/Simulator/DOVEBrowser/PushConsumerFactory.java b/trunk/TAO/examples/Simulator/DOVEBrowser/PushConsumerFactory.java
new file mode 100644
index 00000000000..5c1ce0d3894
--- /dev/null
+++ b/trunk/TAO/examples/Simulator/DOVEBrowser/PushConsumerFactory.java
@@ -0,0 +1,368 @@
+// $Id$
+//
+// ============================================================================
+//
+// = FILENAME
+// PushConsumerFactory.java
+//
+// = AUTHOR
+// Michael Kircher (mk1@cs.wustl.edu)
+//
+// = DESCRIPTION
+// This is the administor/factory for a PushConsumer.
+//
+// ============================================================================
+
+
+
+
+public class PushConsumerFactory {
+
+ private org.omg.CORBA.ORB orb_;
+ private org.omg.PortableServer.POA poa_;
+ private org.omg.CORBA.Object naming_service_object_;
+
+ private DataHandler dataHandler_;
+ private Navigation navigation_;
+ private Weapons weapons_;
+
+ private String[] ec_names_ = null;
+ private int ec_names_count_ = 0;
+
+ private String[] ss_names_ = null;
+ private int ss_names_count_ = 0;
+
+ private boolean use_queueing_ = false;
+
+ public PushConsumerFactory (DataHandler dataHandler,
+ String nameServiceIOR,
+ String nameServicePort,
+ String[] args,
+ boolean use_queueing,
+ java.applet.Applet applet)
+ {
+ try
+ {
+ use_queueing_ = use_queueing;
+ dataHandler_ = dataHandler;
+
+ // if the DOVE Browser is running as an Applet
+ if (applet != null) {
+ orb_ = org.omg.CORBA.ORB.init (applet, null);
+ }
+ else { // not running as an Applet, but as an normal Application
+ orb_ = org.omg.CORBA.ORB.init (args, null);
+ }
+
+ System.out.println ("Initialized ORB");
+
+ org.omg.CORBA.Object obj =
+ orb_.resolve_initial_references ("RootPOA");
+
+ System.out.println ("Obtained RootPOA");
+
+ poa_ = org.omg.PortableServer.POAHelper.narrow (obj);
+
+ System.out.println ("Narrowed RootPOA");
+
+ // Get the Naming Service initial reference
+
+ // Name Service Lookup cannot be used when running as an Applet
+ if (nameServiceIOR == null && applet != null) {
+ System.out.println (" Name Service Lookup cannot be used when running as an Applet! Quit!");
+ System.exit (1);
+ }
+
+ if (nameServiceIOR == null) { // only used when running via "java" or "vbj"
+ System.out.println ("Using the lookup protocol!");
+ NS_Resolve ns_resolve_ = new NS_Resolve (nameServicePort);
+ naming_service_object_ = ns_resolve_.resolve_name_service (orb_);
+ }
+ else {
+ System.out.println ("Using the following IOR: " + nameServiceIOR);
+ naming_service_object_ = orb_.string_to_object (nameServiceIOR);
+ }
+
+ // Walk through args and count EC and Scheduling Service names.
+ int arg_index = 0;
+ while (args.length > arg_index)
+ {
+ // Count an event service name
+ if ((args[arg_index].equals ("-eventservicename")) &&
+ (args.length > arg_index + 1))
+ {
+ System.out.println ("switch [" + args[arg_index] + "]");
+ System.out.println ("value [" + args[arg_index + 1] + "]");
+ arg_index += 2;
+ ++ec_names_count_;
+ }
+ // Count a scheduling service name
+ else if ((args[arg_index].equals ("-scheduleservicename")) &&
+ (args.length > arg_index + 1))
+ {
+ System.out.println ("switch [" + args[arg_index] + "]");
+ System.out.println ("value [" + args[arg_index + 1] + "]");
+ arg_index += 2;
+ ++ss_names_count_;
+ }
+ else if (args[arg_index].equals ("-dualECdemo"))
+ {
+ System.out.println ("switch [" + args[arg_index] + "]");
+ ++arg_index;
+ ec_names_count_ += 2;
+ ss_names_count_ += 2;
+ }
+ else if ((args[arg_index].equals ("-dualECdemo1")) ||
+ (args[arg_index].equals ("-dualECdemo2")))
+ {
+ System.out.println ("switch [" + args[arg_index] + "]");
+ ++arg_index;
+ ++ec_names_count_;
+ ++ss_names_count_;
+ }
+ // Skip over anything else
+ else
+ {
+ arg_index ++;
+ }
+ }
+
+ // Allocate arrays for the event and schedule service names (if any)
+ if (ec_names_count_ > 0)
+ {
+ ec_names_ = new String [ec_names_count_];
+ }
+ if (ss_names_count_ > 0)
+ {
+ ss_names_ = new String [ss_names_count_];
+ }
+
+ // Then traverse the args again to allocate and fill in a list
+ // of EC and Scheduling Service names.
+ arg_index = 0;
+ ec_names_count_ = 0;
+ ss_names_count_ = 0;
+ while (args.length > arg_index)
+ {
+ // Set an event service name.
+ if ((args[arg_index].equals ("-eventservicename")) &&
+ (args.length > arg_index + 1))
+ {
+ ec_names_[ec_names_count_] = args[arg_index + 1];
+ ++ec_names_count_;
+ arg_index += 2;
+ }
+ // Set a schedule service name.
+ else if ((args[arg_index].equals ("-scheduleservicename")) &&
+ (args.length > arg_index + 1))
+ {
+ ss_names_[ss_names_count_] = args[arg_index + 1];
+ ++ss_names_count_;
+ arg_index += 2;
+ }
+ else if (args[arg_index].equals ("-dualECdemo"))
+ {
+ ss_names_[ss_names_count_] = "DUAL_SCHED_HI";
+ ss_names_[ss_names_count_ + 1] = "DUAL_SCHED_LO";
+ ec_names_[ec_names_count_] = "DUAL_EC_HI";
+ ec_names_[ec_names_count_ + 1] = "DUAL_EC_LO";
+ ++arg_index;
+ ec_names_count_ += 2;
+ ss_names_count_ += 2;
+ }
+ else if (args[arg_index].equals ("-dualECdemo1"))
+ {
+ ss_names_[ss_names_count_] = "DUAL_SCHED_HI";
+ ec_names_[ec_names_count_] = "DUAL_EC_HI";
+ ++arg_index;
+ ++ec_names_count_;
+ ++ss_names_count_;
+ }
+ else if (args[arg_index].equals ("-dualECdemo2"))
+ {
+ ss_names_[ss_names_count_] = "DUAL_SCHED_LO";
+ ec_names_[ec_names_count_] = "DUAL_EC_LO";
+ ++arg_index;
+ ++ec_names_count_;
+ ++ss_names_count_;
+ }
+ // Skip over anything else.
+ else
+ {
+ arg_index ++;
+ }
+ }
+
+ // If names for event or scheduling services have not been provided
+ // already, provide the default names used by the service executables.
+ if (ec_names_count_ == 0)
+ {
+ ec_names_count_ = 1;
+ ec_names_ = new String [1];
+ ec_names_ [0] = "EventService";
+ }
+ if (ss_names_count_ == 0)
+ {
+ ss_names_count_ = 1;
+ ss_names_ = new String [1];
+ ss_names_ [0] = "ScheduleService";
+ }
+ }
+ catch (org.omg.CORBA.ORBPackage.InvalidName e)
+ {
+ System.err.println ("CosNaming.NamingContextPackage.InvalidName");
+ System.err.println (e);
+ }
+ catch(org.omg.CORBA.SystemException e) {
+ System.err.println ("PushConsumerFactory constructor: ORB and Name Service initialization");
+ System.err.println(e);
+ }
+
+ }
+
+ public class Object_is_null_exception extends Exception
+ {
+ Object_is_null_exception (String s)
+ {
+ super (s);
+ }
+ }
+
+ public void run ()
+ {
+ try
+ {
+
+ // Get the Naming Context to allow resolving the EventService and
+ // ScheduleService
+ CosNaming.NamingContext naming_context_ =
+ CosNaming.NamingContextHelper.narrow (naming_service_object_);
+
+ if (naming_context_ == null)
+ {
+ System.err.println ("The Naming Context is null");
+ System.exit (1);
+ }
+ System.out.println ("Reference to the Naming Service is ok.");
+
+ // Create Consumers connected to the EventService
+ int ss_number = 0;
+ RtecScheduler.Scheduler scheduler_ = null;
+ for (int ec_number = 0; ec_number < ec_names_count_; ++ec_number)
+ {
+ // Get a reference for the next Scheduling Service if there is one.
+ // Invariant: we will always execute this code at least once.
+ if (ss_number < ss_names_count_)
+ {
+ CosNaming.NameComponent[] ss_name_components_ = new CosNaming.NameComponent[1];
+ ss_name_components_[0] = new CosNaming.NameComponent (ss_names_[ss_number],"");
+ org.omg.CORBA.Object scheduler_object_ = naming_context_.resolve (ss_name_components_);
+
+ if (scheduler_object_ == null)
+ {
+ throw new Object_is_null_exception(ss_names_[ss_number] +
+ " Object is null");
+ }
+
+ scheduler_ = RtecScheduler.SchedulerHelper.narrow (scheduler_object_);
+
+ if (scheduler_ == null)
+ {
+ throw new Object_is_null_exception(ss_names_[ss_number] +
+ " narrowed ref is null");
+ }
+
+ System.out.println ("Reference to " +
+ ss_names_[ss_number] + " is ok.");
+
+ ++ss_number;
+ }
+
+ // Get a reference for the next Event Service
+
+ CosNaming.NameComponent[] ec_name_components_ = new CosNaming.NameComponent[1];
+ ec_name_components_[0] = new CosNaming.NameComponent (ec_names_[ec_number],"");
+ org.omg.CORBA.Object event_channel_object_ = naming_context_.resolve (ec_name_components_);
+
+ if (event_channel_object_ == null)
+ {
+ throw new Object_is_null_exception(ec_names_[ec_number] +
+ " Object is null");
+ }
+
+ RtecEventChannelAdmin.EventChannel event_channel_ =
+ RtecEventChannelAdmin.EventChannelHelper.narrow (event_channel_object_);
+
+ if (event_channel_ == null)
+ {
+ throw new Object_is_null_exception(ec_names_[ec_number] +
+ " narrowed ref is null");
+ }
+
+ System.out.println ("Reference to " +
+ ec_names_[ec_number] + " is ok.");
+
+ // Start the consumer
+ System.out.println ("Instantiating the Push Consumer for " +
+ ec_names_[ec_number] + ": demo_consumer_" +
+ ec_number + ".");
+
+ PushConsumer pushConsumer_ = new PushConsumer (orb_, poa_,
+ dataHandler_,
+ use_queueing_);
+ System.out.println ("Initializing the Push Consumer for " +
+ ec_names_[ec_number] + ": demo_consumer_" +
+ ec_number + ".");
+
+ pushConsumer_.open_consumer (event_channel_, scheduler_,
+ "demo_consumer_" + ec_number);
+ }
+
+
+ // Tell the CORBA environment that we are ready
+
+ System.out.println ("PushConsumer registered with POA");
+ poa_.the_POAManager ().activate ();
+ System.out.println ("POA Activated");
+ }
+ catch (CosNaming.NamingContextPackage.CannotProceed e)
+ {
+ System.err.println ("CosNaming.NamingContextPackage.CannotProceed");
+ System.err.println (e);
+ }
+ catch (CosNaming.NamingContextPackage.InvalidName e)
+ {
+ System.err.println ("CosNaming.NamingContextPackage.InvalidName");
+ System.err.println (e);
+ }
+ catch (CosNaming.NamingContextPackage.NotFound e)
+ {
+ System.err.println ("CosNaming.NamingContextPackage.NotFound");
+ System.err.println (e);
+
+ }
+ catch (org.omg.PortableServer.POAManagerPackage.AdapterInactive e)
+ {
+ System.err.println ("org.omg.PortableServer.POAManagerPackage.AdapterInactive");
+ System.err.println (e);
+ }
+ catch (Object_is_null_exception e)
+ {
+ System.err.println (e);
+ }
+ catch(org.omg.CORBA.SystemException e)
+ {
+ System.err.println ("PushConsumerFactory.run: Failure");
+ System.err.println(e);
+ }
+ }
+
+
+} // public class PushConsumerFactory
+
+
+
+
+
+
+