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....
}
--
xxxxxxxxxxxxxxxxxxxxxxxxxxxx
Adrian Brock
Chief Scientist
JBoss, a division of Red Hat
xxxxxxxxxxxxxxxxxxxxxxxxxxxx