What are the threading models of CORBA? Does the ORB service each request by creating a thread? Which ORB vendors support multi-threading? How about Sun's JavaIDL ORB?

Bill Lloyd

This varies. Prior to CORBA 2.2, CORBA didn't address threading at all -- the implementation of threads was left up to each vendor to implement in a vendor-specific way.

CORBA 2.2, which introduced the POA, is slightly better. Objects can be associated with a POA which has a policy of either SINGLE_THREAD_MODEL, where all calls on servants associated with that POA are serialized, or ORB_CTRL_MODEL, which again leaves it up to the ORB. Not really a whole lot better from a specification perspective. Some vendors wanted it to remain vague, because their products are single threaded and they didn't want other vendors to gain an unfair advantage.

Anyway, most ORB vendors give you a set of policies that you can associate with an ORB_CTRL_MODEL POA. For example, Orbix 2000 for Java gives you a thread pool which is configurable. Visibroker for Java does this also. Orbacus has a few settings.

Sun's JavaIDL ORB doesn't support the POA, and is a bit nebulous to use on the server side. Nearly all the coding is up to you, and I'm unsure exactly how you use threads with the JavaIDL ORB.

Truthfully, the best way to find out how the ORBs support threads is to download one and read its documentation, as for the most part they all differ.