How to pass runtime jndiName param to EJBProxyFactory in hivemind 1.1.1
Note: This
e-mail is subject to the disclaimer contained at the bottom of this
message.
I'm using hivemind 1.1.1 to perform JNDI lookup of remote session EJB whose providerUrl and jndiName are only known at runtime.
The providerUrl and jndiName are provided by the client with the original request and during post-processing callback to the client is made using these values to locate client remote service. While I managed to pass providerUrl to NameLookup I'm unable to pass jndiName as neither NameLookupImpl nor EJBProxyFactory have setter for it.
I have tried playing with configuration points and own implementation of ServiceImplementationFactory without success. If I hard-code jndi-name attribute value it works but the problem is it's unknown at the build/deployment time so it must be a run-time arg
Descriptor and code follows.
<?xml version="1.0"?>
<module id="au.com.cgu.webinsure.common.service" version="1.1.1">
<!-- Client-side Service -->
<service-point id="ClientService" interface="au.com.companyname.service.ClientService" />
<implementation service-id="ClientService">
<invoke-factory>
<construct class="impl.ClientServiceImpl">
<set-service property="remoteRef" service-id="ClientServiceRemote" />
</construct>
</invoke-factory>
</implementation>
<service-point id="ClientServiceRemote" interface="au.com.companyname.service.ClientServiceRemote" visibility="private">
<invoke-factory service-id="hivemind.lib.EJBProxyFactory">
<construct home-interface="au.com.companyname.ejb.ClientServiceHome" jndi-name="${jndiNameKey}" name-lookup-service-id="NameLookupService" />
</invoke-factory>
<interceptor service-id="hivemind.LoggingInterceptor" />
</service-point>
<service-point id="NameLookupService" interface="org.apache.hivemind.lib.NameLookup">
<invoke-factory service-id="hivemind.BuilderFactory" model="singleton">
<construct class="org.apache.hivemind.lib.impl.NameLookupImpl">
<set property="initialFactory" value="com.ibm.websphere.naming.WsnInitialContextFactory" />
<set property="providerURL" value="${java.naming.provider.url}" />
</construct>
</invoke-factory>
<interceptor service-id="hivemind.LoggingInterceptor" />
</service-point>
</module>
/////////////////////////////////////////////
...
ClientService service = getClientService(providerUrl, jndiName);
service.doSomething(); // barfs here
...
protected final ClientService getClientService(final String providerUrl,final String jndiName) {
System.setProperty(Context.PROVIDER_URL, providerUrl);
System.setProperty("jndiNameKey", jndiName);
// Construct Hivemind registry.
// By that time all system properties hivemind relies upon should be set.
RegistryBuilder builder = new RegistryBuilder();
builder.addDefaultModuleDescriptorProvider();
Registry registry = builder.constructRegistry(Locale.getDefault());
return (ClientService ) registry.getService(
"au.com.companyname.service.ClientService",
ClientService.class);
Any thoughts?
Thanks,
Jake
The information transmitted in this message and its attachments (if any)
is intended only for the person or entity to which it is
addressed.
The message may contain confidential and/or privileged material. Any
review, retransmission, dissemination or other use of, or taking of any action
in reliance upon this information, by persons or entities other than the
intended recipient is prohibited.
If you have received this in error, please contact the sender and delete
this e-mail and associated material from any
computer.
The intended recipient of this e-mail may only use, reproduce, disclose
or distribute the information contained in this e-mail and any attached files,
with the permission of the sender.
This message has been scanned for viruses with Symantec Scan Engine and
cleared by MailMarshal.