Ich habe vor kurzem mit der Arbeit an meinem ersten CORBA-Projekt begonnen. Ich denke, ich habe die grundlegenden Dinge, aber es gibt einige Dinge, die mir noch entgehen. Eines dieser Dinge ist, wie CORBA mehrere Aufrufe desselben Objekts bearbeitet.CORBA unklare Sachen
Angenommen, ich habe einen Client, der sich beim Server registriert und dann Arbeit erhalten kann. Der Server sendet Arbeit zu zufälligen Zeiten.
Werden alle diese Anrufe auf demselben Thread behandelt? Dies würde bedeuten, dass der Client während der Arbeit nichts empfangen kann. Wie könnte ich ihm in diesem Fall Multithread-Verhalten geben?
- Oder auf der anderen Seite ist ein Thread launched für jeden eingehenden Anruf?. Muss ich in diesem Fall die allgemeinen Daten schützen, auf die bei jedem Anruf zugegriffen werden kann? Was ist eine gute Praxis, dies zu tun wäre,
Andere Sache Ich mag würde zu tun ist, mehrere Arbeiter zu schaffen, und haben sie Arbeit bekommen, aber in meiner Implementierung nur ein Arbeiter aktiv ist.
Unten:
public static void main(String[] args)
{
try
{
connectWithServer(args);
createWorkers();
// wait for invocations from clients
orb.run();
}
catch (Exception e)
{
System.out.println("ERROR : " + e) ;
e.printStackTrace(System.out);
}
}
static public void connectWithServer(String[] args)throws Exception
{
orb = ORB.init(args, null);
// get reference to rootpoa & activate the POAManager
rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
rootpoa.the_POAManager().activate();
// get the root naming context
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
// Use NamingContextExt instead of NamingContext. This is
// part of the Interoperable naming Service.
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
// resolve the Object Reference in Naming
taskBagImpl = TaskBagHelper.narrow(ncRef.resolve_str(SERVER_NAME));
System.out.println(TAG + " Obtained a handle on server object: " + taskBagImpl);
}
public static void createWorkers() throws Exception
{
for(int i = 0; i < nrOfWorkers; i++)
{
WorkerImpl w = new WorkerImpl();
rootpoa.activate_object((Servant) w);
Worker ref = WorkerHelper.narrow(rootpoa.servant_to_reference(w));
w.setRef(ref);
taskBagImpl.registerWorker(w.getId(), ref);
}
}
Könnten Sie mir in einem Schnipsel zeigen, wie ein "Thread pro Anfrage" Verhalten einzustellen. Oder vielleicht zeigen Sie mir andere Ressourcen. –
Dies hängt von der konkreten ORB-Implementierung ab, die Sie verwenden. Zum Beispiel die ORBacus-Implementierung (Sie können es hier lesen: http://documentation.progress.com/output/Iona/orbacus/4.3.4/using_orbacus/wwhelp/wwhimpl/common/html/wwhelp.htm?context=using_orbacus&file = init08.html) sagt: '-OAthread_per_client' wählt den Thread pro Clientmodell aus. Diese Option kann an den ORB im ORB übergeben werden.init() 'funktioniert als Befehlszeile Ihres Programms oder mit einer Konfigurationsdatei, wie Sie auch in der Dokumentation von ORBacus sehen können. Wie gesagt, es hängt jedoch von dem konkreten ORB ab, den Sie verwenden. –