OK, the new InternalTransporterServices class is checked in and we have a way
to customize the MBeanServer, Detector and Registry that the transporter
framework uses.
I think a redesign of the way the TransporterServer is created needs to be done.
I'm not crazy about the need for static create methods. It doesn't provide an
easy way for someone to subclass the TransporterServer class (e.g. so I can
provide my own Connector). I'd prefer a set of constructors that I can then
use in my subclass.
Looking at the code, it seems the only reason why we need those static create
methods is to support clustering - i.e. before you can "new" the
TransporterServer, if clustering is enabled, you have to initialize the
internal transporter services.
BTW: the static create methods also starts the connector - not sure if that
should be. At the very least, it needs to be javadoc'ed that the fact that not
only is the server created, but it is also "start()"ed. I prefer to only have
constructors/create methods "create" things and let the caller determine
when/if to start() the thing. But, this is minor.
Here's what I propose - this replaces the createTransporterServer static method
with the same signature:
| /** Constructor */
| public TransporterServer(InvokerLocator locator, Object target, String
subsys, boolean isClustered)
| {
| if (isClustered &&
(InternalTransporterServices.getInstance().getDetector() == null))
| {
| setupDetector(); // this is the same static method we have currently
| }
|
| // below is the code from the original TransporterServer constructor
| connector = getConnector(locator);
| ServerInvocationHandler handler = new TransporterHandler(target);
| connector.addInvocationHandler(subsys.toUpperCase(), handler);
|
| // the original static create method also start()ed the server
| // I'm not sure that should be done here, but we can.
| // start();
| // I would at least provide a constructor parameter "startIt", if true
| // we call start(), if false, we do not. I just want to give the
opportunity
| // for the caller to create a server but not start it. Currently, there
is
| // no way for you to do that. For those callers that want to do their
| // own lifecycle management, they need the flexibility to be able to
| // start the server when they want.
| }
|
Now we just replace the other static create methods with analogous constructors:
| public TransporterServer(String locatorURI, Object target, String subsys,
boolean isClustered)
| {
| this(new InvokerLocator(locatorURI), target, subsystem, isClustered);
| }
|
| public TransporterServer(String locator, Object target, String subsys)
| {
| this(locator, target, subsystem, false);
| }
|
| public TransporterServer(String locatorURI, Object target, String subsys)
| {
| this(new InvokerLocator(locatorURI), target, subsystem, false);
| }
|
Now we can remove all static create methods. In fact, now, the only static
method or data member we have is the static setupDetector() method. This is
OK, it can be static since it doesn't need any instance data from any
TransporterServer object. But, I would even go so far as recommending that
setupDetector is "protected" and not static. This would then let me override
that in my subclass too - this would allow my subclass to override
setupDetector and customize my detector right there.
I like this much better because it more extensible - I can easily subclass
TransporterServer and override getConnector() and setupDetector() to customize
it however I want.
Static stuff is just annoying to work with :-)
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3940467#3940467
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3940467
-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
JBoss-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jboss-user