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.The Andy Oliver report.
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.
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 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:
Borland buys Triangle-based TogetherSoft.
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?
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]
Eclipse tour de force.
RTP-WUG Eclipse presentation tonight!
Java licensing changes.
"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]
Java's advantages.
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.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.
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:
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?
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.
Oracle releases TopLink upgrade, road map.
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.
XORM - for GPL apps only.
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]
Java Persistence Frameworks, again
2002-10-10: James Strachan - Commons SQL
2002-10-10: Jason Carreira - Commons SQL
2002-10-10: BeBlogging - Java Persistence Frameworks
2002-10-10: ::Managability:: - OBiz Turning OO on its head?
2002-09-23: Rebelutionary
2002-09-22: Joe's Jelly: ROI on O/R bridges
2002-07-19: Rebelutionary - Portable CLOBs
2002-07-15: Blogging Roller - Java Persistence Frameworks
... 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:
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:
- There are 11 developers on OFBiz, not sure how many really work on the Entity Engine
- There are 10 developers on Turbine, not sure how many really work on Torque
- 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.
It worked
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.
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.
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.
« Previous page | Main | Next page »