Blogging Roller

Dave Johnson on open web technologies, social software and software development


The Eclipse dominates scenario.

I've been helping a co-worker and 4 year veteran of <a href= "http://www.borland.com/jbuilder/">JBuilder get started with <a href= "http://www.eclipse.org/">Eclipse. He decided to make the switch after the Eclipse presentation at the RTP-WUG . His first impressions were that Eclipse does everything that JBuilder does and that Eclipse will kill all other IDEs. I was not at all surprised by his reaction.

After seeing that presentation, it is pretty easy for me to imagine a scenario in which there are two dominant IDEs in the world: Microsoft Visual Studio and Eclipse. In this scenario all IDEs other than Visual Studio will either wither and die or rehost their best parts as plugins inside Eclipse. Eclipse is extensible and pluggable to the core. It is not an IDE and it is not just an <a href= "http://radio.weblogs.com/0107789/2002/11/06.html#a1002">experience either, it is a universal and multi-progamming language tools platform. On top of that it is open source (you can't get more pluggable than having the source ;-).

This scenario explains why both Borland and TogetherSoft are on the Eclipse <a href= "http://www.eclipse.org/org/index.html">board of stewards. They see the wave coming. Board member Rational has already released an Eclipse based product (which supports both Java and .Net) and even old school programmer's editor maker and board member SlickEdit, Inc. is considering hosting inside Eclipse.

If you look at the volume on the Eclipse newsgroups and the rapidly growing number of plugins, you can see the momentum.  For the moment, the IDEA guys may have a better IDE, I really don't know, but they've got to be worried about and planning for the Eclipse dominates scenario.
Tags: Java

The Andy Oliver report.

Andy published a <a href= "http://www.superlinksoftware.com/cgi-bin/jugwiki.pl?AndyReviewsEclipse">review of the Eclipse IDE on the <a href= "http://www.superlinksoftware.com/cgi-bin/jugwiki.pl?HomePage">Triangle JUG's Wiki. I agree with just about everything he says. Like Andy, "I'm not really a 'real' IDE user. I drop into vi and start clacking away like it was second nature at the first sign of the IDE getting in my way. And I use ant to build EVERYTHING." With Netbeans, I was always dropping back into vi. With Eclipse, I never feel that need.

In other Andy news, Andy <a href= "http://www.trilug.org/%7Eacoliver/hackinglog.html">mentioned today on his Hacking Log the possibility of a joint venture with the Triangle Dot-Net Users Group and the Triangle Java Users Group: a Dot-Net vs. J2EE shootout. Now, that sounds like a fun meeting.

Tags: Java

Incompetence and betrayal.

It has been a week now since the TSS published The Petstore Revisited, but I am just now getting around to reviewing the story.  

On Monday Oct. 28, 2002, The Server Side published (TSS) The Petstore Revisited.  This benchmark report compared Sun's example J2EE Petstore application with some performance revisions added by TSS to a Microsoft written dot-Net clone of the Petstore.  Respected open source Java guru Rickard Oberg quickly reviewed the report, found many flaws, and published a rebuttal the very next day. Rickard updated his rebuttal with more information and links to other's views throughout the week (but he missed Rafe's comments). On Wednesday he was Slashdotted.  

As the week progressed, the outcry continued, and the full story was revealed:

  • the benchmark report was seriously flawed in many ways,
  • the J2EE Petstore performance revisions done by TSS were inept at best,
  • Microsoft paid TSS to do the benchmark,
  • TSS is essentially a Microsoft business partner,
  • and TSS worked with Microsoft to coordinate the dot-Net victory media spin.
If you take the time to read Rickard's review and the comments that he links to, it is clear that dot-Net did not defeat J2EE, but Microsoft certainly did lay waste to The Server Side's reputation.  The TSS benchmarks taught us nothing about the relative merits of dot-Net and J2EE, instead we learned about incompetence and betrayal.

If you are concerned about the relative performance of dot-Net and J2EE, read the Pet Shop Boys write-up at Larry O'Brien's Thinking In Dot Net weblog:

Every indication that I have seen is that, currently, the two platforms are quite comparable in run-time performance of strictly comparable code. In my experience, one of the two platforms displays a small performance advantage in the majority of programs, a performance advantage which I absolutely, positively believe to be irrelevant to the issue of business performance in an enterprise-level application.

Tags: Java

Borland buys Triangle-based TogetherSoft.

As Ed Savage wrote on the Triangle JUG mailing list: this is big news. According to the <a href= "http://www.bizjournals.com/triangle/stories/2002/10/28/daily39.html">Business Journal article, Borland is paying $185 million in a combined cash and stock deal.

Borland has been on a bit of a shopping spree lately. They recently bought StarBase which gained them the StarTeam issue tracker/source code control system and the CodeWright editor.

At the Eclipse meeting last night, I noticed that both TogetherSoft and Borland are on the Eclipse steering committee. Will Borland stop TogetherSoft from rehosting inside Eclipse or is Borland considering rehosting all of it's various IDEs and dev tools inside Eclipse? Will Borland help IBM make Eclipse into the universal multi-language tools platform?

Tags: Java

JSP is not Evil .

I've been meaning to comment on this for a couple of days. Niel Eyde recently posted some words about JSP and MVC. Some people criticize JSP because it allows code-on-page. I understand that concern and I've got scars from dealing with frightening model 1 JSP code before, but I agree with Neil that JSP is not evil.
A frequent criticism that I hear about Java Server Pages (JSP) is that it doesn't strictly separate the presentation logic from the business logic, and there seems to be many solutions developed that aim to force this strict MVC separation. As developers, why should we depend on technology to force adherence to the goals of MVC? It is certainly possible to develop JSP pages that adhere to principles of MVC. If model or controller logic creeps into a JSP page, it our own fault. [Niel Eyde on JSP and MVC]
Tags: Java

Eclipse tour de force.

The RTP Websphere Users Group meeting meeting tonight was great. Eclipse Product Manager John Kellerman gave an excellent talk on Eclipse and covered the Eclipse history, philosophy, capabilities, plugin architecture, and future plans. He went into great detail in his presentation and in his demo before he ran out of time. I've been using Eclipse heavily, both at home and at work, for over a month now and he was still able to point out lots of features that I had not even noticed. Great stuff. Go IBM!
Tags: Java

RTP-WUG Eclipse presentation tonight!

Those in the Triangle area, don't forget the Eclipse presentation at the Websphere Users Group meeting tonight.
Tags: Java

Java licensing changes.

Granted that I have not really been following this story since the Apache Sun relationship first blew up, this sounds like an important story:
"Starting Tuesday, it will be mandatory that licenses provide for the possibility of a clean-room implementation," said Onno Kluyt, manager of the JCP Program Office. "A specification leader must offer a test suite independently of the reference implementation. It is required, going forward, that the test suite be available free of charge so that organizations like Apache don't face the hurdle of a license fee." [eWeek: Java Licensing Changes Will Open Door to Open Source]
Tags: Java

Java's advantages.

In response to Russell's dot-net rantations, Kevin O'Neill and Rafe Colburn listed some advantages of Java and J2EE over C# and Dot-Net.  I agree with many of the points on those lists.  I think that Java's cross-platform portability and huge collection of competing open source and commercial dev tools, runtimes, and servers give Java a tremendous advantage.  Even with this advantage, Sun is going to have to push Java hard, fix the problems and open things up even more.
Tags: Java

Russell's dot-net rants

Russell said some pretty nice things about Dot-Net in his most recent anti-Microsoft rant, take a look:

  • I've got some old coworkers and blog pals who are doing some really cool stuff with Dot-Net
  • Many of the dumb ass things in Java have been fixed [by Dot-Net]
  • [Dot-Net] means that you can program in any "language" that you want
  • [Dot-Net Studio] is still the best IDE there is
  • [Dot-Net's] WindowsForms kicks Swing's ass
  • In as little as 4 or 5 years, Java could be a niche language like COBOL
  • [The Dot-Net] CLR is going to be faster on M$OSes than the JVM

This sounds like a pretty bad situation for us Java advocates. Versions of our favorite open source Java tools are being ported to C#. The GNOME folks are working feverishly to port C# and the CLR to UNIX. To top it all, the chairman of our revered Jakarta Project is a <a href= "http://www.intertwingly.net/blog/2002/Oct/08#x892">Dot-Net blogger.

My thoughts on this? Nobody knows who what technologies will win out in the short term or in the long term so my advice to you is: hedge your bets.
Tags: Java

Andy Oliver's J2EE Shootout Summary

After reviewing the video of the Triangle JUG's J2EE Container Shootout, Andy Oliver has posted his summary. <a href= "http://www.superlinksoftware.com/cgi-bin/jugwiki.pl?OutSummary">Andy's summary of the shootout is much more detailed than the one I posted last month. He has written up five of the questions so far and promises to get to the rest soon.

Tags: Java

Cocoon at the JUG, Eclipse at the WUG.

The Triangle Java Users Group (JUG) and the RTP Webshere Users Group (WUG) have a couple of interesting meetings lined up. At the JUG meeting on Monday night (Oct. 21), Conrad D'Cruz and <a href= "http://www.trilug.org/~acoliver/hackinglog.html">Andrew Oliver will present an Introduction to Cocoon 2.0. CORRECTION: The very next night Next week at the WUG meeting, John Kellerman (the Product Manager of WebSphere Studio Workbench) will be giving a full presentation and demo of Eclipse. Here are links to more meeting information:

Cocoon at the JUG: Monday Oct. 21, 2002
Triangle JUG: http://www.trijug.org/meetinginfo.jsp

CORRECTION: Eclipse at the WUG: Tuesday Oct. 29, 2002
RTP WUG: <a href= "http://www.rtpwug.org/meetings.html">http://www.rtpwug.org/meetings.html

I wish I could give you permanent links to these talks, but the JUG does not provide permanent links to meeting info until after the meeting has occured. The WUG doesn't even keep old meeting info online. Don't the webmasters realize that an UG without permamently linkable knowledge of it's history is like a tree without roots?

Tags: Java

Toplink

Anyways, having gotten rid of my initial JDO bias, I just started looking at what would do the job and decided that TopLink is actually really cool. It's expensive - $7000 a server - but not as much as it used to be with Bea's classic $2000 a pop for developers. It meets all the criteria in Dave's graph for top down, middle out and bottom up.[<a href= "http://www.russellbeattie.com/notebook/index.jsp?date=20021018#010545">Russell Beattie comments on Toplink]
I've only heard good things about Toplink, but it sure is expensive. I wonder what kinds of deals they cut for ISVs. Imagine how expensive JIRA would be if Atlassian used Toplink at that price.
Tags: Java

Oracle releases TopLink upgrade, road map.

However, Oracle9i AS users get the new version of TopLink free while users of the other vendors' products must pay $7,000 per processor. [<a href= "http://www.infoworld.com/articles/hn/xml/02/10/15/021015hntoplink.xml">InfoWorld]. Oracle assures us that TopLink will continue to support other databases and app servers. Why the hell doesn't the InfoWorld article have a link to <a href= "http://otn.oracle.com/products/ias/toplink/content.html"> TopLink?
Tags: Java

OFBiz-EE and the "generic object" approach

Scott from Atlassian wrote to tell me that OFBiz-EE can be used in all four of the persistence scenarios that I discussed yesterday. He wrote:

You have your JavaBeans already, you then need to create an entitymodel.xml file to represent your entities (which will then CRUD the relevant database tables), and you can use the API to store your changes to the database. However, the storing is not automatic - you would have to write the code yourself. [Scott from Atlassian]

But if you have to write the storage code yourself, can you really say that OFBiz-EE supports this scenario? I don't think so. OFBiz-EE takes a very different approach, not a bad approach, but a different approach.

I think OFBiz EE needs its own scenario - the generic-object scenario. I don't think it truly fits into any of the four scenarios that I listed. It does not really do anything to support the JavaBeans model (no introspection, no JavaBeans generation) and it does not do any code generation (except for the DDL, right?). So here is the new generic-object scenario that I have just added to the comparison to accomodate OFBiz-EE:

Generic-object: Start with a meta-data description of your desired database schema, generate DDL to create your database, and use a persistence API to store and retrieve generic data objects, with values stored as a hash of name-value pairs, to and from your database.
Tags: Java

XORM - for GPL apps only.

<a href= "http://www.russellbeattie.com/notebook/index.jsp?date=20021014#104120">Russell pointed out XORM, another Java persistence framework that sounds interesting. However, you cannot use XORM if you do not license your application under the GPL. That is a BIG limitation.
XORM beta 2 is an open source, "extensible object-relational mapping layer for Java applications. It provides interface-based persistence to RDBMSs using the Java Data Objects (JDO) API while allowing developers to focus on the object model, not the physical layer." XOTRM is published under the GPL.[from Cafe au Lait by way of Russell]
Tags: Java

Java Persistence Frameworks, again

... and that is just a few of the recent posts ...

The topic of Java persistence frameworks just keeps on trucking through the Java blogs.  I think that the reason the topic keeps coming up is that there is no clear concensus on the "right way" to do persistence. I certainly don't know the right way. But anyway...

I'd like to understand the available tools a little better, so I've started looking at the tools mentioned in the above posts.  I found the feature comparison on the Cayenne project's Wiki to be helpful and I also found a very nice set of Java persistence framework development scenarios on the Hibernate website.  The Hibernate folks have outlined four development scenerios for using a Java persistence framework: top-down, bottom-up, middle-out, and meet-in-the-middle.  Here is my generalized description of these four scenarios, plus a fifth "generic-object" approach that I have added to accomodate OFBiz-EE:

Top-down: Start with an existing JavaBeans object model, develop a mapping that maps those objects to tables in your database, generate DDL to create your database, and then use a persistance API to persist those objects to that database.

Bottom-up: Start with an existing database schema, describe your database schema using using XML or some other meta-data representation, generate your JavaBeans object model, optionally add business logic to those objects, and use a persistence API to store and retrieve your objects.

Middle-out: Start with a meta-data description of your object model, generate your JavaBeans object model, generate DDL to create your dataBase, and use a persistence API to store and retrieve your objects.

Meet-in-the-middle: Start with an existing database schema and an existing JavaBeans object model, develop a mapping to map between the two, and use a persistence API to store and retrieve your objects.

Generic-object: Start with a meta-data description of your desired database schema, generate DDL to create your database, and use a persistence API to store and retrieve generic data objects, with values stored as a hash of name-value pairs, to and from your database.


I think the Hibernate guys have really nailed it.  Every tool I have seen supports one or more of these scenarios.  So I decided to use these scenarios as a way to compare the available Java persistence frameworks.  I started to build a table to compare the scenarios supported by the various persistence frameworks and some other factors that I think are important interesting (thanks ceperez): support for the JDO API, support for ODMG API, development activity, and database support.  

Here is the first cut of my comparson table, I will be trying to complete it over the next couple of days:

<table cellpadding="0" cellspacing="0" border="1" padding="2px" style="text-align: left; width: 100%; margin-left: auto; margin-right: auto;"> <td valign="middle" style="background-color: rgb(204, 204, 255); font-weight: bold;" bgcolor="#ccccff" height="30">
<td valign="middle" style="text-align: center; background-color: rgb(204, 204, 255); font-weight: bold;" bgcolor="#ccccff" align="left" height="30">Abra

<td valign="middle" style="text-align: center; background-color: rgb(204, 204, 255); font-weight: bold;" bgcolor="#ccccff" height="30">Castor
JDO
<td valign="middle" style="text-align: center; background-color: rgb(204, 204, 255); font-weight: bold;" bgcolor="#ccccff" height="30">Cayenne <td valign="middle" style="text-align: center; background-color: rgb(204, 204, 255);"><a href="http://jakarta.apache.org/commons/sandbox/sql/" style="font-weight: bold;">Commons
SQL
<td valign="middle" style="text-align: center; background-color: rgb(204, 204, 255); font-weight: bold;" bgcolor="#ccccff" height="30">Hiber
-nate
<td valign="middle" style="text-align: center; background-color: rgb(204, 204, 255); font-weight: bold;" bgcolor="#ccccff" height="30">Jakarta
OJB
<td valign="middle" style="text-align: center; background-color: rgb(204, 204, 255); font-weight: bold;" bgcolor="#ccccff" height="30">OFBiz
EE
<td valign="middle" style="text-align: center; background-color: rgb(204, 204, 255); font-weight: bold;" bgcolor="#ccccff" height="30">Jakarta
Torque

<td valign="middle" style="text-align: center; background-color: rgb(204, 204, 255); font-weight: bold;" bgcolor="#ccccff" height="30">TJDO <td valign="middle" style="font-weight: bold; background-color: rgb(255, 255, 255);">Top-down <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">N
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">N
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); font-weight: bold;">Bottom-up <td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">N
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="font-weight: bold; background-color: rgb(255, 255, 255);">Middle-out <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">N
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="background-color: rgb(238, 238, 238); font-weight: bold;">Meet-in-middle <td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">N <td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">N
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
Generic-object






Y


<td valign="middle" style="font-weight: bold; background-color: rgb(255, 255, 255);">JDO API
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">N
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">N
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">N
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">N
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">N
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">soon <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">N
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">N
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="font-weight: bold; background-color: rgb(238, 238, 238);">ODMG3 API
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">subset
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">N
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">N
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">Y
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">Y
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">N
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">N
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">
<td valign="middle" style="font-weight: bold; background-color: rgb(255, 255, 255);">License <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">BSD <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">BSD <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">BSD
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">APL
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">LGPL
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">APL
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">BSD <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">APL <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">APL
<td valign="middle" style="background-color: rgb(238, 238, 238); font-weight: bold;">Last release <td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">0.9.6
Sept
2002
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">0.9.4.1
November
2002
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">1.0a3
Sept
2002
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">1.1.4-b
Oct
2002
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">2.0-b2
July
2002 <td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">2.0-b
Sept
2002
<td valign="middle" style="font-weight: bold; background-color: rgb(255, 255, 255);">SF Activity
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">19.4% <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">-
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">98.3%
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">- <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">99.9%
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">- <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">98.9% <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">- <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">95.3%
<td valign="middle" style="background-color: rgb(238, 238, 238); font-weight: bold;">SF Downloads <td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">7
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">-
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">2698
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">-
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">775
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">- <td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">86869
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">- <td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">278
<td valign="middle" style="font-weight: bold; background-color: rgb(255, 255, 255);">Developers <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">3
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">3
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">3
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">11
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">17
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">11 (1)
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">10 (2)
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">7
<td valign="middle" style="background-color: rgb(238, 238, 238); font-weight: bold;">MySQL <td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="font-weight: bold; background-color: rgb(255, 255, 255);">PostgreSQL <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="background-color: rgb(238, 238, 238); font-weight: bold;">HSQL <td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="font-weight: bold; background-color: rgb(255, 255, 255);">Oracle <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="background-color: rgb(238, 238, 238); font-weight: bold;">SQL Server <td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="font-weight: bold; background-color: rgb(255, 255, 255);">DB2 <td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">Y
<td valign="middle" style="text-align: center; background-color: rgb(255, 255, 255);">
<td valign="middle" style="background-color: rgb(238, 238, 238); font-weight: bold;">Sybase
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="text-align: center; background-color: rgb(238, 238, 238);">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">Y
<td valign="middle" style="background-color: rgb(238, 238, 238); text-align: center;">

Footnotes:
  1. There are 11 developers on OFBiz, not sure how many really work on the Entity Engine
  2. There are 10 developers on Turbine, not sure how many really work on Torque
Other notes:
  • I took JGrinder and JRF out of he mix because they seem to be a little too intrusive.  They force your to make your persistent objects extend framework objects and they don't seem to offer any tools to help you generate DDL or persistent objects.
  • I'm going to limit myself to open source frameworks for the time being, but I'd also like to consider Oracle's TopLink, CocoBase, Oracle's BC4J, and the commercial JDO implementations.  
  • I'm also going to ignore EJB CMP for now.
  • Blank cells still need to be filled in and hints are appreciated
  • A dash "-" indicates "not applicable.
By the way, Roller uses the bottom-up approach.  Roller uses Castor, but not the Castor Source Generator.  Instead, Roller uses XDoclet to generate the persistent data objects, Struts form beans, and the Castor Mapping file all from the same source meta-data.  The Castor/XDoclet combo is not perfect, but I still don't know that moving to a new framework would be an improvement.  We might just be exchanging one set of idiosyncracies for another set.

Tags: Java

It worked

and I'm back from work. I'm taking a break before going out to dinner with the little guys. Andi is taking the littlest guy out with her friends.

I'm reading the Java weblogs and finding that the topic of persistece frameworks is up again. I think it is interesting that Rebelutionary writes about <a href= "http://radio.weblogs.com/0107789/2002/10/12.html#a968"> OFBiz and it's generic data objects at about the same time that Russell is writing about what seems like the polar opposite of that: having to repeat field names in DDL, SQL, DAO classes, EJB mappings, form beans, and JSPs.

Tags: Java

Commons SQL

[with <a href= "http://jakarta.apache.org/commons/sandbox/sql/">Commons SQL] generating other stuff from your XML file should be trivial; like the Castor mapping file or beans to map 1-1 to your relational model. Just use the commons-sql beans with Velocity or Jelly etc. [James Strachan]
Now I see how Commons SQL could be useful in Roller. We need a better way to generated DDL for varous databases and we need a better way to generate Castor JDO mappings and data objects as well. We've been <a href= "http://sourceforge.net/mailarchive/forum.php?thread_id=1134736&forum_id=9297"> talking about this for a while, maybe Commons-SQL is part of the answer.
Tags: Java

Rockytop!

OSCache does in fact rock. And it rocks even if you are not using JSPs, as I have mentioned before. Roller pages don't use JSP and they are still able to take advantage of OSCache goodness.

Tags: Java

« Previous page | Main | Next page »