cayenne-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrus Adamchik <and...@objectstyle.org>
Subject DI-based configuration works
Date Sun, 06 Dec 2009 23:20:37 GMT
An update on the new DI configuration... The new DI stack is now  
usable as a fully functional alternative to Configuration. I created  
an integration test module [1], showing how Cayenne can be started  
using the new approach. Actually it is as simple as that:

CayenneServerRuntime runtime = new CayenneServerRuntime(name.name());
ObjectContext context = runtime.newContext();

BTW "Server" in runtime name implies that we should be able to build a  
"Client" runtime for ROP stack in the future (actually should be quite  
easy). Configuration is done in a DI "module" class. Here is a  
standard one that can be amended or partially overridden by the users  
- [2]. Some highlights:

* The new configuration provides all the same functionality as the old  
one (except for JNDI preferences hack, which will turn into a first  
class feature once CAY-1327 is implemented).

* The new configuration is using a single-domain format compatible  
with CAY-1318.

* The new configuration loads descriptors from uniquely named files,  
such as "cayenne-stackname.xml, so there's no more single cayenne.xml  
file, and less chance of odd naming conflicts between multiple jars.

* Rewrote a bunch of old configuration code, which is now so much  
cleaner, mainly due to the design with injection in mind. There are  
still some rough spots in the service definitions and some functions  
missing in DI that I'd like to have, but it fully works as is.

* Better project model representation. I finally separated  
configuration objects (DataDomainDescriptor, DataNodeDescriptor) from  
runtime objects (DataDomain, DataNode). This made the runtime code  
cleaner, and also opens possibilities for cleaner Modeler code  
(currently there are lots of hacks to "edit" runtime objects).

* Added a number of important pluggable abstractions [2], such as  
ResourceLocator.

* Performance... I didn't see any difference in application startup  
time on a simple app between the new and the old stack.

So the next step is to finish CAY-1318 (which is mainly about  
upgrading the old projects to the new format), and to do the switch to  
the new configuration. In terms of public API, I think that most of  
the classes in org.apache.cayenne.conf will have to go. There's no  
point in deprecating them (although I sort of did it in a few places  
already), as the framework will not use them at all. One possible  
interim step is moving all these classes from runtime jars to the  
Modeler, so that the Modeler could read older project files and  
perform needed upgrades. At a later point we may also refactor the  
Modeler to use the new configuration classes, as mentioned above.

Also there's more work to be done to align the new config with the  
current config expectations (such as a singleton configuration... what  
do you think, do we need to keep it?? , provide an analog of  
FileConfiguration, etc.)

Andrus


[1] http://fisheye6.atlassian.com/browse/cayenne/trunk/itests/cayenne-di-stack

[2] http://fisheye6.atlassian.com/browse/cayenne/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/CayenneServerModule.java?r=HEAD&content=true


Mime
View raw message