Bernd Fondermann wrote:
by just moving the codebase into the project? what would that change?
in my understanding, a class implementing container-specific lifecycle interfaces like Servicable, Configurable, etc. is not a plain POJO anymore.

You could think to Startable, Disposable, Configureable as our own interfaces. You can ignore those interfaces if you prefer to declare that informations in xml files: you're not tied to the interfaces.

IMHO we should find a way to run our avalon based components in a non-avalon container (remove Phoenix). Then we can also remove avalon, but I don't think this would be a big step forward.

maybe its not a very big step in terms of code-changes. but it is in terms of QA and testing (unless you have full unit test coverage). you pull away the base and replace with something else. that sounds like quite a bit could break here.

I agree, but we have this issue with every single step towards pojos, so this is not an input variable in my considerations.

Eventually we could change the way "Serviceable" works now to remove the Service Locator part of the Avalon framework by creating specialized "Interfaces/Setter/Constructor parameters" for every james component. I tend to think that Serviceable is the only thing our components use that most container would not handle in a clean way. It could be solved by publishing the Avalon ServiceManager as a component but we would loose the wiring capabilities of the new container.

In James, the whole component lifecycle including configuration is closely interwoven with the application-specific logic.

this is not a bad thing, but it makes the task of changing the container more difficult.

I would like to see real world example on how to change a few James classes so that we can change container without writing full length configuration files and/or specific adapters/wrappers.

IMHO we should not fall in the Utopia of a POJO world: if you remove wiring/configuration/logging/workflow/lifecycle from classes you have to add the same information in container specific configuration files.

Sometime is faster to port to different containers applications with much hardcoded behaviour/wiring than application with great granularity of the components and big container configuration files.

IMHO porting container configurations is not easier than refactoring java classes.

One more thing: I don't think that the "let's make POJOs and ship with any container" is a winning strategy. In fact when you have POJOs there is a lot of work to do to create container specific configurations and I don't think that we'll ever ship james with more that one container choice.

yes, i agree. but look at Tomcat: it's a very mature stand-alone server and a highly embeddable servlet container. this is something I fancy a lot for James -- just dreaming... ;-)

Tomcat is an "highly embeddable servlet container", yes, but I don't get the point. Embeddable doesn't mean that you can wire tomcat components using different containers: it simply means that you can embed the whole tomcat into other systems. This is easier and doesn't need POJOs. There are embeddable avalon containers around (fortress), but I don't think the main goal is to improve embeddability.

I currently don't have an opinion on what it is better for us between j2ee, OSGi, XBean, Phoenix, <put what you want here>, but I think that we should choose one. This is way I'm really interested in pro/cons of XBean.

AFAIK, XBean is to become the 'next generation core' for Geronimo (can't find the thread over on geron-dev ATM).

I read only 3 messages in the geronimo list, but I think this has not been voted yet. They simply voted to accept the XBean codebase. They could never use it.

A server container is much more than dependency management/component wiring: component monitoring/management (JMX), logging services, configuration (and re-configuration) services, component deploy/undeploy, datasource/jdbcpool management, and more. All of this are "Container Specific" and not "James Specific" but are part of the final James distribution.

yeah, and probably improving all that is more user-friendly than changing containers ;-). but nevertheless, to make 'the whole James framework' more lean, more testable, would help the project to improve its codebase. If this requires a container change, someone of the modern containers would do it, I reckon.

I don't uderstand what do you mean with "more testable": James is all about IoC and you can test every component by assembly it the way you prefer.

What kind of test you would be able to write with objects not extending AbstractLogEnabled?
I really don't understand this point.

The tests you provided are the proof that James is testable. You did a good job understanding what the dependencies between components was, and providing mock implementations for that dependencies.

The main problem with tests is, IMHO, the multithreaded/multitier nature of the server itself.

Stefano


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to