Step 1: Patch XDoclet
to allow specifying the DTD
in the generated
Step 2: Download
Hibernate 2.0 beta 2. It's at the bottom of the preceding link.
Extract to struts-resume/lib and change
to version 2.0.
file to pick up the new DTD. I changed
<hibernate validatexml="true" version="2.0"/>
, I did
. 14 matches. The project currently has 3 DAO's and a ServiceLocator to get Hibernate Sessions.
ant clean deploy
Not too bad, only one compile error.
D:\source\appfuse\src\ejb\org\appfuse\persistence\ServiceLocator.java:12: cannot resolve symbol
symbol : class Datastore
location: package hibernate
Open up Eclipse
, refresh the project and right click on the project name, click Properties >> Java Build Path. Change path for
to struts-resume/lib/hibernate-2.0/hibernate.jar. Remove the previous path.
Go searching for what the heck happened to Datastore. Hibernate CVS is first choice. Pause to post (per chance someone reads and sends solution).
Step 4 from the Hibernate 2 Porting Guidelines
. Replacing attribute names, DTDs and changed
in ServiceLocator class.
Repeat Step 5 for all Unit tests (they live in "test," rather than "src"). End up repeating for entire project, makes about 1800 replacements - hibernate-1.2.3/src was in search path. Remove lib/hibernate-1.2.3.
Revisit Step 8 and try to use new Configuration API. Tried this...
Datastore datastore = Hibernate.createDatastore()
- changed to
Configuration config = new Configuration();
Not working yet... But Gavin has responded to the mailing list and Chiara is listening. Good to have the support ;-)
Found a problem with XDoclet, modifying source. Changing "role" attribute to "name" for the following types (in order replaced by HomeSite): subcollection, collection, set, bag, list, map, array, primitive-array. Rebuilt hibernate module. Changed attribute "readonly" to "inverse" and tried again. Changes to set and bag only.
I'm using the
method to initialize from
(I had to rename the package for my dialect from
). I doubt it'll work though since this expects a JNDI DataSource.
Nope, that didn't work. I found out I needed to remove the "length" attribute from any <key> elements in <bag>'s. Back to trying to use
Internet connection goes down, reboot router. Change dialect package name in
. This file is renamed to
and used for running JUnit tests. Now time to have fun with JUnit and get UserDAOTest to run.
I'm getting a connection to the database now thanks to Gavin's advice:
sf = new Configuration()
Changed xdoclet tags "inverse" attribute to be "false" where previously
. Now I'm getting the following error:
[junit] java.sql.BatchUpdateException: Invalid argument value: Duplicate entry '0' for key 1
[junit] at com.mysql.jdbc.jdbc2.PreparedStatement.executeBatch(Unknown Source)
Whenever I try to run the
test for a user. The mapping looks fine, I'll try dropping and re-creating the database. Found I needed to change the package names in
. Note to upgraders:
don't filter by file extension when replacing the package name.
Discovered that the
class had moved from
UserDAOTest runs successfully
. Now for the web...
Couldn't get "
" (Canoo WebTest) to run until I copied
. Changed my
to use new package name for logging.
After looking at some 2.0 documentation, I discovered a new DTD for hibernate-configuration. Unfortunately, it's not there
. So I put it on this site as a workaround. Got rid of startup errors. One change in the DTDs is that all <property> declarations must be within a <session-factory> element.
Now I can't get Hibernate to connect to JNDI. Back to the doco...
(5 minutes later) Yep, right in the doco. I changed
to have the following:
SessionFactory sf =
Now, when I login I'm getting:
Since my Unit tests on the business level run, I'm guessing it's something wrong with this line in hibernate.cfg.xml:
Get a good nights sleep; zonked out at 3, up at 8:30 to continue...
Find out (from Gavin) that there's probably a
file in my classpath that is causing the problem. I find this fine inside
. Doh! There's an error in packaging. ;-) I remembering seeing this sometime last week on the mailing list. I decide to upgrade to Hibernate 2.0 beta 3
, which was released while I was sleeping. The file
is removed from
in this release. I did have to update
to handle the change of jar-name. Compiling, testing...
Dropped and re-created the database b/c I was getting duplicate key errors. Ran
- BUILD SUCCESSFUL - run it again - BUILD FAILED.
Further updates to
, also replaced
. Sent an e-mail to xdoclet-devel inquiring about best way to make
both 2.0 and 1.1-compatible.
This change in XDoclet makes
pass - so it looks like the upgrade is a success. Now I just have to figure out a way to convince the XDoclet team to add support for Hibernate 2.0. This might take awhile, it has for POJO -> StrutsForms support (still pending).