On Oct 29, 2006, at 11:26 PM, David Jencks wrote:

It's easy to tell you're not happy :-)

No... I'm not really happy. I'm frustrated with Maven and all its little bugs and problems and I am really getting burt out on all of he other build muck... which appears to have no end in sight problems daily.


<sarcasm>
Ya, I really love having config files tucked away in little objects zipped up in jar files. Ya, and then when I want to change some of that config... I really love how I have to rebuild the entire server... which is so easy... oh do I have the latest dependencies in my local repo, oh... it will only take a few hours to download, and pray my local repo does not have bunk metadata... and oh wait are all those deps on the snapshot repo... didn't some apache stuff crash again??!?
</sarcasm>

This seems to be a problem with all but the simplest m2 builds. I don't think you can blame the non-working snapshot problems on geronimo rather than maven.

Sure, this is a problem with any m2 build... but the real issue that I was being sarcastic about was that we hid the configuration, the user editable configuration, of modules into CARs, which FORCE users to deal with building components to change trivial settings... and this has everything to do with Geronimo.


For example... CAR builds depend on artifacts which are not directly listed in the Maven projects pom.xml... the deployers, which the Kernel will do something with... and those deps need to be fully transitively resolved in the Maven repo before that will function correctly. None of those deps will show up in any Maven trace, as Maven knows absolutely nothing about them.

Well, they're pretty much like maven plugins, they're used in the build. Maybe there's some way to make them actually be maven plugins.

Um, CARs are also used at runtime are they not? Will G embed Maven to process them? If so, someone besides myself had better start learning Maven... because I am not gonna be very happy about supporting this... since I think that it is a bad idea, bad concept.


And if you add the deps for the deployers to your module... then the CAR gremlins start to do more muck with them, which often causes a CAR build to fail, even if you set the scope to provided... or was it test? I can't recall since we have bastardized the maven scope mechanism to add custom semantics to CAR dependencies.

Would configuring each deployer as a maven plugin solve this?

If this was pure build time, then yes... but its not.


I have heard from a few peeps, like you, that you don't want to get rid of CAR files... but I have yet to hear of any substantial reasons why they should stay. I have also heard from many other peeps about how they would like to see CAR files go away and be replaced by simple XML... which is what I am a major supporter of. I have on many occasions ranted about the issues I have with CAR files, the added complexity, blah, blah, blah...

Aaron did say he'd be happy with xml as the persistence format in a car file. Right now a car file can include both configuration and classes. If you want to eliminate this possibility we're going to have to have to give maven some classloaders that can load specified parts of a j2ee artifact such as an ear with wars and rars inside.

Right, be he is still talking about a build time thing to build that xml-state and then zip it up into a jar, which I think is a huge mistake... don't zip up your config files, don't follow the crappy j2ee ear/war/ejb-jar code+config mess.


Where are the arguments for those few who are in favor of the CAR?

Perhaps we should also take a poll from our users... and see if they like having config compiled up into objects and zipped up and tossed in the repo... or if they would like a set of plain XML files? I wonder which they will choose...

You aren't saying much definite about what you are proposing, so I can't discuss the merits or problems with what you want, since I don't have a clue what it is, except that it involves xml.

I am not proposing anything at this time... I never said I was. I am still trying to understand why we have this super complex build to support these CAR things which IMO suck ass.


I'm not thrilled with xml configuration but I don't have any real problem with it. I still do like the idea of car files. I don't think that they need to be able to include classes, but that will require a lot of classloader magic to deal with actual j2ee artifacts in repos.

If you are not thrilled with XML configuration, then you probably are not looking at the problem from a user's standpoint, or a sysadmin, or really anyone who just wants to configure a G distro and now have to deal with building anything.

Geronimo is, IMO, fundamentally flawed in how it is configured. Because of this we can not even easily use Geronimo from a dist archive to run components for the gbuild.org hosts. We need to be able to easily change the configuration that it comes with, strip off a few bits, change a few ports, etc. This is a massive pain in the ass with Geronimo ASIS today... and this is primarily because of CAR files.

I hate J2EE archives, but really CAR files suck much much more... as I can't unzip a CAR, edit some XML, re-zip and then redeploy to get my changes in. No... I have to go through this horrible build process which is a MASSIVE_PITA for us developers... and is basically not an option for anyone else. Just go try to explain to your sysadmin that to change some configuration, that you have to go and rebuild the server. That sounds like a great way to basically tell people to go use some other server which is easier to configure.


So, there are kind of 2 ideas behind geronimo modules, currently represented as car files. One is the idea of building a server adapted to a specific purpose by assembling prebuilt modules someone else created. The other is that, along the continuum from scripting languages to compiled languages, we want geronimo modules to be as compiled as possible to find as many problems as possible during "compiling" (deployment) and to make the resulting code run (starting the modules) as fast as possible, and to reduce the amount of infrastructure needed at runtime, and possibly to provide a security and authentication structure for module installation auditing.

I don't see any problems with the first idea of building a server from modules for a specific purpose...

But, the second, is a major problem... this is the crux of the configuration simplicity which I have been trying to express (over and over).

I do not see any reason why one could not simply do some build-time validation of xml config to ensure that it catches everything, but still deploy the xml, keep the xml in the file system, so its easy to grok and change. Compiling this into serialized objects is a very, very, very bad idea.

Imagine, if Maven compiled its pom.xml into a pom.ser so that it was easier for Maven to be able to load and not have to worry about syntax errors... as someone might have changed the file... oh no. How much would you like that? Maybe we can suggest that to them as a simplification of their modularization and plugin architecture.

Well, if you did not guess it... I am kidding of course. Maven does not even use compiled ser objects for bits which users are not expected to edit, like mojo descriptors. Its all xml, nice, easy to edit, usually easy to grok, xml. No special tools required, have vi can edit, simple, simple, simple.


I think that we are getting reasonably near the goal of being able to build lots of servers from prebuilt modules. Certainly the 4 servers we distribute are built out of nearly the same set of modules, and with the plugin stuff it's getting easier to add and remove modules from an existing server. While there is more to do I think this is one of the successes of geronimo.

I am not against modules.  I am against compiled config.


If you accept this idea of a modular server, then the question is what should the modules look like. On the one hand you have jboss, which the last time I looked was heavily on the scripting end of the spectrum, starting from unprocessed xml descriptors and immediately constructing the runtime objects that will be the running server. On the other hand you have traditional j2ee servers that e.g. generate code for ejbs and compile it into a jar. The idea behind geronimo modules is to use deployers to turn whatever input is provided into persistable configuration information for services, and to save that configuration information in a standard format. So, for instance, in a plain gbean plan you can have specialized xml for login configuration, tss and css corba security configuration beans, and persistence units. They all get processed into GBeanDatas and get saved. J2EE artifacts typically have 2 sets of xml, the spec dds and a geronimo plan: these get combined into GBeanDatas and saved, again in a standard format. As a result, we can find a lot of problems while constructing a module before its installed anywhere, and we don't need any of the deployment infrastructure available when we need to actually start the module.

Honestly... I prefer JBoss-style configuration, where the xml is fed into the deployment system and the application is assemblies/ configured on the spot from the xml input.

This is very sysadmin friendly.

But, no big surprise there as I was one of the people who helped implement that system. I made many changes to that app server to make it easier for sysadmin's to use and operate. And honestly... if someone asked me which server I would recommend that would be easy for a sysadmin to use... well, lets just say it would not be Geronimo.

--jason


Reply via email to