Yes, this is the approach I was referring to in my previous post when I
said "minor changes", no need to write an essay ;)
Adrian wrote:
On Wed, 2007-06-27 at 14:01 +0100, Tim Fox wrote:
> The JBoss Messaging Bridge MBean has dependencies on JMSProviderLoader
> since it uses these to connect to its source and target destinations.
>
> Are you suggesting we move the Bridge MBean into the AS project?
>
No, I'm suggesting you think about providing a clean api
which can be used by the AS to integrate with its configuration
mechanisms.
Trying to do integration in your project just leads
to JBAS-1796 style problems and bad api!
IOC 101
Why doesn't the bridge just take connection factories
and destinations as injections (javabean setters)?
That is a trivial "no dependency required"
configuration api.
public SimpleBridge
{
setSourceConnectionFactory(XAConnectionFactory cf) {};
setTargetConnectionFactory(XAConnectionFactory cf) {};
setSourceDestination(Destination destination) {};
setTargetDestination(Destination destination) {};
...
}
ANY FORM OF INTEGRATION IS NOW EASY
For standalone ease of use, you could subclass the simple bridge
with a version that does something like (psuedo code):
public JNDIBridge extends SimpleBridge
{
public void setTargetDestinationJndiName(String targetJNDI) {}
public void setJNDITargetProperties(Properties targetProperties) { }
// Create lifecycle that does base setters from jndi configuration
public void create() throws Exception
{
if (targetJNDI == null)
throw new IllegalStateException("Target jndi name not set!");
InitialContext context;
if (targetProperties == null)
context = new InitialContext();
else
context = new InitialContext(targetProperties);
try
{
Destination d = (Destination) context.lookup(targetJNDI);
setTargetDestination(d);
etc....
}
finally
{
context.close();
}
}
}
Which is basically what the JMSProvider really does anyway!
JBOSS INTEGRATION IS ALSO TRIVIAL
In the appserver we could have a JNDIProvider based version
to integrate with the current way of configuring jms servers
in one place.
public JNDIProviderBridge extends SimpleBridge
{
public void setSourceJNDIProviderName(String jndiName) {}
public void setTargetJNDIProviderName(String jndiName) {}
public void setSourceDestination(String jndiName) {}
public void setTargetDestination(String jndiName) {}
etc....
}