pushconsumerfactory.java
来自「这是广泛使用的通信开源项目,对于大容量,高并发的通讯要求完全能够胜任,他广泛可用」· Java 代码 · 共 369 行
JAVA
369 行
// PushConsumerFactory.java,v 1.11 2000/05/24 16:45:19 cdgill Exp
//
// ============================================================================
//
// = 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
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?