Thanks for the PRF. I see you've updated to the latest TAO.
> --------------------------------------------------------------------------------------------------------------------------------------------------------
> REPEAT BY: Trying to use ORBUseSharedProfile 1 with multiple
> -ORBListenEndPoints on tao_imr_locator and on servers registered on IMR
> produces a single profile with a single endpoint (CASE 1). If I use
> -ORBUseSharedProfile 0 (default) on tao_imr_locator it produces several
> profiles (one per endpoint specified through -ORBListenEndPoints) with
> one endpoint (CASE 2).
> Let me clarify with some message debugging.
I think the problem may be with the corbaloc strings. A corbaloc
reference is really just a "hint" on how to find the real reference. As
a hint, there are typically no tagged components. When provided a
corbaloc reference, the client ORB must synthesize an IOR it can use to
actually connect. That means you also need to pass -ORBUseSharedProfile
1 to the client ORB as well.
I tried an experiment and found that when I passed multiple endpoints to
a corbaloc string without the sharedprofile, it synthesized an IOR with
multiple profiles. When I enabled sharedprofile, I got a single profile,
but with a single endpoint, no alternate endpoints in a tagged component
as expected.
I think you've got a couple of choices. You can extend the corbaloc
parser to synthesize profiles with multiple endpoints, or you can modify
your deployment strategy so that the clients using corbaloc only use a
single endpoint at a time - perhaps a simple configuration option that
selects internal/external network use, and if internal it could decide
whether 192.168.2.128 or 192.168.106.1 is more appropriate and generate
its own corbaloc string.
BR,
Phil
--
Phil Mesnier
Principal Software Engineer and Partner, http://www.ociweb.com
Object Computing, Inc. +01.314.579.0066 x225
It is actually called from within the PortableServer library to generate
the tagged component. See TAO_Default_Acceptor_Filter::encode_endpoints ().
Once added to the set of tagged components, it should be carried with
the profile just like any of the others. At that point the components
are handled generically. When looking at the forwarded IOR, did you see
any components? There should also be one for ORB ID and one for
codesets. If these are not attached, then there is a fundamental issue
with the propagation of tagged components in general. If there are other
components present, but not TAG_ALTERNATE_IIOP_ENDPOINTS then we need to
dig further to find out why.
The final IOR forwarded ought to be the real IOR provided by the server
to the IMR once the server is active and ready to accept requests.
Do you have the emails you and I exchanged in Sept / Oct of 09? We
discussed a problem similar to this then, and decided that you needed to
use -ORBUseSharedProfile 0 apparently because of this problem. I haven't
read those old messages in detail, but I think I caught the idea that
the ImR synthesizes an IOR and apparently doesn't do the alternate
endpoints.
So it sounds like there may be some code rewrite necessary to accomplish
what you are looking for.
A couple of years ago you said you were considering a support contract
with OCI. I would like you to do that now, because I think you are
looking at something like 8-24 hours of effort to provide a fix, verify
the fix and get it committed to the repository.
If you don't want to fund the effort of solving this, then I suggest you
write up a bugzilla entry, including a sample program that demonstrates
the flaw, and perhaps a proposed solution.
Best regards,