OSUser Hibernate Provider Updates

Erik Beeson <[email protected]> Sun, 28 Mar 2004 16:29:03 -0800
Newsgroups gmane.comp.java.open-symphony.devel,gmane.comp.java.skinlf.devel
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------060404030606000701060305
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

The hibernate providers in CVS don't work out of the box. I've made a 
few updates (with patches) to them and now the example works with 
hibernate providers and hsqldb backend.

1. HibernateGroupImpl.hbm.xml and HibernateUserImpl.hbm.xml should be 
moved from package ...provider.hibernate.entity to package 
...provider.hibernate.impl and need to be edited to reflect this package 
move. (The classes have already been moved, but the hibernate 
configuration files haven't.)
The other option here is to have the hbm.xml files associated with the 
interfaces (HibernateUser/HibernateGroup), but since the whole point of 
all this abstraction is to provide your own implementation, I figured 
the hbm.xml files were implementation specific.
Another issue is doing this breaks 
...providers.hibernate.doa.HibernateQueries. Should the queries be 
implementation specific (and therefore moved to impl) aswell?
    2. The property create.tables doesn't actually create tables in the 
database, just prints them. Add show.tables to do what create.tables 
currently does and fix create.tables. Both default to false.
    3. Add example-war task to create a .war example in addition to a .ear.
    4. Update hibernate.
It looks like PropertySet was built against a newer (or at least 
different) version of hibernate, and throws the following exception when 
trying to load viewuser.jsp:

java.lang.NoSuchMethodError:
net.sf.hibernate.Query.setString(Ljava/lang/String;Ljava/lang/String;)Lnet/sf/hibernate/Query;
	at 
com.opensymphony.module.propertyset.hibernate.HibernatePropertySetDAOUtils.getKeysImpl(HibernatePropertySetDAOUtils.java:48)
	at 
com.opensymphony.module.propertyset.hibernate.HibernatePropertySetDAOImpl.getKeys(HibernatePropertySetDAOImpl.java:70)
	at 
com.opensymphony.module.propertyset.hibernate.HibernatePropertySet.getKeys(HibernatePropertySet.java:53)
	at 
com.opensymphony.module.propertyset.AbstractPropertySet.getKeys(AbstractPropertySet.java:284)
	at _viewuser__jsp._jspService(/osuser_example/viewuser.jsp:119)
	at com.caucho.jsp.JavaPage.service(JavaPage.java:75)
	at com.caucho.jsp.Page.subservice(Page.java:506)

Also, the patch for #2 mentioned above needs the latest version.


Notes about patches:

    1. The patch will edit the 3 files that need editing, but the 
hbm.xml files will still need to be moved. Patch fixes HibernateQueries 
aswell.
    2. With create.tables set to true, the tables will be exported to 
the database everytime the provider is initialized. SchemaExport always 
drops the old tables before trying to create. SchemaUpdate doesn't drop 
the tables. Latest patch fixes this.
    3. This just dumps all of the jars into WEB-INF/lib and makes a war 
out of the example webapp.


--Erik

--------------060404030606000701060305
Content-Type: text/plain;
 name="1_osuser_hbmfix.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="1_osuser_hbmfix.patch"

Index: src/java/com/opensymphony/user/provider/hibernate/entity/HibernateGroupImpl.hbm.xml
===================================================================
RCS file: /cvs/osuser/src/java/com/opensymphony/user/provider/hibernate/entity/HibernateGroupImpl.hbm.xml,v
retrieving revision 1.1
diff -u -r1.1 HibernateGroupImpl.hbm.xml
--- src/java/com/opensymphony/user/provider/hibernate/entity/HibernateGroupImpl.hbm.xml	12 Jan 2004 20:56:59 -0000	1.1
+++ src/java/com/opensymphony/user/provider/hibernate/entity/HibernateGroupImpl.hbm.xml	28 Mar 2004 22:17:54 -0000
@@ -4,7 +4,7 @@
 	"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
 
 <hibernate-mapping>
-    <class name="com.opensymphony.user.provider.hibernate.entity.HibernateGroupImpl"
+    <class name="com.opensymphony.user.provider.hibernate.impl.HibernateGroupImpl"
            table="os_group" dynamic-update="true" >
 <!--        <jcs-cache usage="read-write"/>-->
         <id name="id" type="long" column="id" unsaved-value="0">
@@ -15,7 +15,7 @@
         <set name="users" table="os_user_group" inverse="true" cascade="none" lazy="false">
 <!--            <jcs-cache usage="read-write"/>-->
             <key column="group_id"/>
-            <many-to-many column="user_id" class="com.opensymphony.user.provider.hibernate.entity.HibernateUserImpl"/>
+            <many-to-many column="user_id" class="com.opensymphony.user.provider.hibernate.impl.HibernateUserImpl"/>
         </set>
 
     </class>
Index: src/java/com/opensymphony/user/provider/hibernate/entity/HibernateUserImpl.hbm.xml
===================================================================
RCS file: /cvs/osuser/src/java/com/opensymphony/user/provider/hibernate/entity/HibernateUserImpl.hbm.xml,v
retrieving revision 1.1
diff -u -r1.1 HibernateUserImpl.hbm.xml
--- src/java/com/opensymphony/user/provider/hibernate/entity/HibernateUserImpl.hbm.xml	12 Jan 2004 20:56:59 -0000	1.1
+++ src/java/com/opensymphony/user/provider/hibernate/entity/HibernateUserImpl.hbm.xml	28 Mar 2004 22:18:14 -0000
@@ -4,7 +4,7 @@
 	"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
 
 <hibernate-mapping>
-    <class name="com.opensymphony.user.provider.hibernate.entity.HibernateUserImpl" table="os_user" dynamic-update="true">
+    <class name="com.opensymphony.user.provider.hibernate.impl.HibernateUserImpl" table="os_user" dynamic-update="true">
 <!--        <jcs-cache usage="read-write"/>-->
         <id name="id" type="long" column="id" unsaved-value="0" >
             <generator class="vm"/>
@@ -16,7 +16,7 @@
         <set name="groups" table="os_user_group" inverse="false" cascade="none" lazy="false">
 <!--            <jcs-cache usage="read-write"/>-->
             <key column="user_id"/>
-            <many-to-many column="group_id" class="com.opensymphony.user.provider.hibernate.entity.HibernateGroupImpl"/>
+            <many-to-many column="group_id" class="com.opensymphony.user.provider.hibernate.impl.HibernateGroupImpl"/>
         </set>
 
     </class>
Index: src/java/com/opensymphony/user/provider/hibernate/dao/HibernateQueries.java
===================================================================
RCS file: /cvs/osuser/src/java/com/opensymphony/user/provider/hibernate/dao/HibernateQueries.java,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 HibernateQueries.java
--- src/java/com/opensymphony/user/provider/hibernate/dao/HibernateQueries.java	4 Aug 2003 17:48:43 -0000	1.1.1.1
+++ src/java/com/opensymphony/user/provider/hibernate/dao/HibernateQueries.java	28 Mar 2004 23:13:48 -0000
@@ -4,8 +4,8 @@
  */
 package com.opensymphony.user.provider.hibernate.dao;
 
-import com.opensymphony.user.provider.hibernate.entity.HibernateGroup;
-import com.opensymphony.user.provider.hibernate.entity.HibernateUser;
+import com.opensymphony.user.provider.hibernate.impl.HibernateGroupImpl;
+import com.opensymphony.user.provider.hibernate.impl.HibernateUserImpl;
 
 
 /**
@@ -14,9 +14,9 @@
 public class HibernateQueries {
     //~ Static fields/initializers /////////////////////////////////////////////
 
-    public static final String USER_BY_USERNAME = "select distinct hibuser from hibuser in class " + HibernateUser.class + " where hibuser.name = ? ";
-    public static final String USER_BY_USERNAME_AND_GROUPNAME = "select distinct hibuser from hibuser in class " + HibernateUser.class + ", hibgroup in hibuser.groups.elements where hibuser.name = ? and hibgroup.name = ?";
-    public static final String ALL_USERS = "from hibusers in class " + HibernateUser.class;
-    public static final String GROUP_BY_GROUPNAME = "select distinct hibgroup from hibgroup in class " + HibernateGroup.class + " where hibgroup.name = ? ";
-    public static final String ALL_GROUPS = "from hibgroups in " + HibernateGroup.class;
+    public static final String USER_BY_USERNAME = "select distinct hibuser from hibuser in class " + HibernateUserImpl.class + " where hibuser.name = ? ";
+    public static final String USER_BY_USERNAME_AND_GROUPNAME = "select distinct hibuser from hibuser in class " + HibernateUserImpl.class + ", hibgroup in hibuser.groups.elements where hibuser.name = ? and hibgroup.name = ?";
+    public static final String ALL_USERS = "from hibusers in class " + HibernateUserImpl.class;
+    public static final String GROUP_BY_GROUPNAME = "select distinct hibgroup from hibgroup in class " + HibernateGroupImpl.class + " where hibgroup.name = ? ";
+    public static final String ALL_GROUPS = "from hibgroups in " + HibernateGroupImpl.class;
 }
Index: src/java/com/opensymphony/user/provider/hibernate/impl/OSUserHibernateConfigurationProviderImpl.java
===================================================================
RCS file: /cvs/osuser/src/java/com/opensymphony/user/provider/hibernate/impl/OSUserHibernateConfigurationProviderImpl.java,v
retrieving revision 1.4
diff -u -r1.4 OSUserHibernateConfigurationProviderImpl.java
--- src/java/com/opensymphony/user/provider/hibernate/impl/OSUserHibernateConfigurationProviderImpl.java	22 Dec 2003 00:36:05 -0000	1.4
+++ src/java/com/opensymphony/user/provider/hibernate/impl/OSUserHibernateConfigurationProviderImpl.java	28 Mar 2004 22:17:32 -0000
@@ -11,8 +11,6 @@
 import com.opensymphony.user.provider.hibernate.dao.HibernateGroupDAO;
 import com.opensymphony.user.provider.hibernate.dao.HibernateUserDAO;
 import com.opensymphony.user.provider.hibernate.dao.SessionManager;
-import com.opensymphony.user.provider.hibernate.entity.HibernateGroup;
-import com.opensymphony.user.provider.hibernate.entity.HibernateUser;
 
 import net.sf.hibernate.HibernateException;
 import net.sf.hibernate.MappingException;
@@ -82,8 +80,8 @@
             configuration = new Configuration();
 
             try {
-                configuration.addClass(HibernateGroup.class);
-                configuration.addClass(HibernateUser.class);
+                configuration.addClass(HibernateGroupImpl.class);
+                configuration.addClass(HibernateUserImpl.class);
                 configuration.addClass(PropertySetItem.class);
 
                 if (configurationProperties != null) {

--------------060404030606000701060305
Content-Type: text/plain;
 name="2_osuser_create_tables.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="2_osuser_create_tables.patch"

Index: src/java/com/opensymphony/user/provider/hibernate/HibernateBaseProvider.java
===================================================================
RCS file: /cvs/osuser/src/java/com/opensymphony/user/provider/hibernate/HibernateBaseProvider.java,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 HibernateBaseProvider.java
--- src/java/com/opensymphony/user/provider/hibernate/HibernateBaseProvider.java	4 Aug 2003 17:48:43 -0000	1.1.1.1
+++ src/java/com/opensymphony/user/provider/hibernate/HibernateBaseProvider.java	28 Mar 2004 23:47:14 -0000
@@ -14,7 +14,7 @@
 
 import net.sf.hibernate.HibernateException;
 import net.sf.hibernate.MappingException;
-import net.sf.hibernate.tool.hbm2ddl.SchemaExport;
+import net.sf.hibernate.tool.hbm2ddl.SchemaUpdate;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -82,9 +82,12 @@
 
             configProvider.setupConfiguration(properties);
 
-            if ("true".equals(properties.getProperty("create.tables", "false"))) {
-                SchemaExport ex = new SchemaExport(configProvider.getConfiguration(), properties);
-                ex.create(true, false);
+            boolean show = "true".equals(properties.getProperty("show.tables", "false"));
+            boolean create = "true".equals(properties.getProperty("create.tables", "false"));
+
+            if (show || create) {
+                SchemaUpdate ex = new SchemaUpdate(configProvider.getConfiguration(), properties);
+                ex.execute(show, create);
             }
 
             result = true;

--------------060404030606000701060305
Content-Type: text/plain;
 name="3_osuser_examplewar_task.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="3_osuser_examplewar_task.patch"

Index: build.xml
===================================================================
RCS file: /cvs/osuser/build.xml,v
retrieving revision 1.15
diff -u -r1.15 build.xml
--- build.xml	30 Dec 2003 23:56:30 -0000	1.15
+++ build.xml	28 Mar 2004 23:04:24 -0000
@@ -227,6 +227,19 @@
 
   </target>
 
+  <target name="example-war" depends="example">
+    <copy todir="${tmp}/example/manager/WEB-INF/lib">
+      <fileset dir="${tmp}/example">
+        <include name="*.jar"/>
+      </fileset>
+      <fileset dir="${tmp}/example/lib">
+        <include name="*.jar"/>
+      </fileset>
+    </copy>
+
+    <jar basedir="${tmp}/example/manager" jarfile="${dist}/osuser_example.war"/>
+  </target>
+
   <target name="javadocs" depends="ejbdoclet">
     <mkdir dir="${dist}/docs/api"/>
     <javadoc sourcepath="${src.java}" destdir="${dist}/docs/api"

--------------060404030606000701060305--


-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click