Hi!
I have been using the J2EEStore that uses the newer db schema, and I have found a problem when using under jboss/tomcat. For some reason in the commit() and rollback() methods, the sections where the connection is called with connection.commit() or connection.rollback() are commented out, with a comment that says: "Not needed as transactional". I found this to not be true, at least when using the datasource provided with jboss-- nothing will ever be committed to the db. I found that when I uncommented these sections, it all works fine. I am providing a patch that uncomments these sections.

I have also included a rough postgresql schema ported from the ones provided for hsql and mssql. It doesn't have any of the referential integrity constraints, as I have found them to cause problems. Hopefully I will have some time to look into this a little more to see if I can add the ref-integrity stuff later.

Please let me know if either the patch or the postgresql schema are unacceptable to be included into the slide codebase, and I will try to fix it so that it is acceptable.

Thanks!
Joel Boehland
-- Database initialization script for Postgresql
--
--

DROP TABLE SLIDE_URI;
DROP SEQUENCE NEXT_URI_ID;
DROP TABLE SLIDE_QNAME;
DROP SEQUENCE NEXT_QNAME_ID;
DROP TABLE SLIDE_OBJECT;
DROP TABLE SLIDE_CHILD;
DROP TABLE SLIDE_LINK;
DROP TABLE SLIDE_LOCK;
DROP SEQUENCE NEXT_BRANCH_ID;
DROP TABLE SLIDE_BRANCH;
DROP SEQUENCE NEXT_LABEL_ID;
DROP TABLE SLIDE_LABEL;
DROP TABLE SLIDE_REVISION_HISTORY;
DROP SEQUENCE NEXT_REVISION_ID;
DROP TABLE SLIDE_REVISION;
DROP TABLE SLIDE_REVISION_PREDECESSOR;
DROP TABLE SLIDE_REVISION_LATEST;
DROP TABLE SLIDE_REVISION_LABEL;
DROP TABLE SLIDE_REVISION_CONTENT;
DROP TABLE SLIDE_REVISION_PROPERTY;
DROP TABLE SLIDE_PERMISSION;

CREATE SEQUENCE NEXT_URI_ID;
CREATE TABLE SLIDE_URI (
    URI_ID          INT              DEFAULT NEXTVAL('NEXT_URI_ID') PRIMARY KEY,
    URI_STRING      VARCHAR(800)     NOT NULL,
    UNIQUE (URI_ID)
);

CREATE SEQUENCE NEXT_QNAME_ID;
CREATE TABLE SLIDE_QNAME (
    QNAME_ID        INT              DEFAULT NEXTVAL('NEXT_QNAME_ID') PRIMARY KEY,
    NAMESPACE_URI   VARCHAR(800)     NOT NULL,
    LOCAL_NAME      VARCHAR(800)     NOT NULL,
    UNIQUE (QNAME_ID)
);

CREATE TABLE SLIDE_OBJECT (
    URI_ID          INT              PRIMARY KEY,
    CLASS_NAME      VARCHAR(255)     NOT NULL
);

CREATE TABLE SLIDE_CHILD (
    URI_ID          INT              NOT NULL,
    CHILD_URI_ID    INT              NOT NULL,
    UNIQUE (URI_ID, CHILD_URI_ID)
);

CREATE TABLE SLIDE_LINK (
    URI_ID          INT              NOT NULL,
    TARGET_URI_ID   INT              NOT NULL,
    UNIQUE (URI_ID, TARGET_URI_ID)
);

CREATE TABLE SLIDE_LOCK (
    LOCK_ID         INT              PRIMARY KEY,
    OBJECT_ID       INT              NOT NULL,
    SUBJECT_ID      INT              NOT NULL,
    ACTION_ID       INT              NOT NULL,
    EXPIRATION_DATE NUMERIC(14, 0)   NOT NULL,
    INHERITABLE     BOOL              NOT NULL,
    EXCLUSIVE       BOOL              NOT NULL
);

CREATE SEQUENCE NEXT_BRANCH_ID;
CREATE TABLE SLIDE_BRANCH (
    BRANCH_ID       INT              DEFAULT NEXTVAL('NEXT_BRANCH_ID') PRIMARY KEY,
    BRANCH_NAME     VARCHAR(255)     NOT NULL,
    UNIQUE (BRANCH_ID)
);


CREATE SEQUENCE NEXT_LABEL_ID;
CREATE TABLE SLIDE_LABEL (
    LABEL_ID        INT              DEFAULT NEXTVAL('NEXT_LABEL_ID') PRIMARY KEY,
    LABEL_NAME      VARCHAR(255)     NOT NULL,
    UNIQUE (LABEL_ID)
);


CREATE TABLE SLIDE_REVISION_HISTORY (
    URI_ID          INT              PRIMARY KEY,
    VERSIONED       BOOL             NOT NULL
);

CREATE SEQUENCE NEXT_REVISION_ID;
CREATE TABLE SLIDE_REVISION (
    REVISION_ID     INT              DEFAULT NEXTVAL('NEXT_REVISION_ID') PRIMARY KEY,
    URI_ID          INT              NOT NULL,
    BRANCH_ID       INT              NOT NULL,
    REVISION_NUMBER VARCHAR(20)      NOT NULL,
    UNIQUE (URI_ID, BRANCH_ID, REVISION_NUMBER)
);

CREATE TABLE SLIDE_REVISION_PREDECESSOR (
    REVISION_ID        INT           NOT NULL,
    PREDECESSOR_ID     INT           NOT NULL,
    UNIQUE (REVISION_ID, PREDECESSOR_ID)
);

CREATE TABLE SLIDE_REVISION_LATEST (
    URI_ID             INT           NOT NULL,
    BRANCH_ID          INT           NOT NULL,
    REVISION_ID        INT           NOT NULL,
    UNIQUE (URI_ID, BRANCH_ID)
);

CREATE TABLE SLIDE_REVISION_LABEL (
    REVISION_ID        INT           NOT NULL,
    LABEL_ID           INT           NOT NULL
    
);
CREATE UNIQUE INDEX SRL_REVID_LID ON SLIDE_REVISION_LABEL(REVISION_ID, LABEL_ID);

CREATE TABLE SLIDE_REVISION_CONTENT (
    REVISION_ID        INT           PRIMARY KEY,
    CONTENT            BYTEA NOT NULL
);

CREATE TABLE SLIDE_REVISION_PROPERTY (
    REVISION_ID        INT           NOT NULL,
    QNAME_ID           INT           NOT NULL,
    PROPERTY_VALUE     VARCHAR(800)  NOT NULL,
    PROTECTED          BOOL           NOT NULL
);
CREATE UNIQUE INDEX SRP_REVID_QNID ON SLIDE_REVISION_PROPERTY(REVISION_ID, QNAME_ID);



CREATE TABLE SLIDE_PERMISSION (
    OBJECT_ID       INT              NOT NULL,
    SUBJECT_ID      INT              NOT NULL,
    ACTION_ID       INT              NOT NULL,
    REVISION_NUMBER VARCHAR(20),
    INHERITABLE     BOOL              NOT NULL,
    NEGATIVE        BOOL              NOT NULL,
    UNIQUE (OBJECT_ID, SUBJECT_ID, ACTION_ID)
);
Index: src/stores/org/apache/slide/store/impl/rdbms/J2EEStore.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-slide/src/stores/org/apache/slide/store/impl/rdbms/J2EEStore.java,v
retrieving revision 1.8
diff -w -u -r1.8 J2EEStore.java
--- src/stores/org/apache/slide/store/impl/rdbms/J2EEStore.java 1 Sep 2002 14:25:57 
-0000       1.8
+++ src/stores/org/apache/slide/store/impl/rdbms/J2EEStore.java 17 Dec 2002 23:11:51 
+-0000
@@ -486,8 +486,8 @@
             getLogger().log("commit(): No connection in connectionMap for id 
\""+id+"\"", LOG_CHANNEL, Logger.ERROR);
             throw new XAException(XAException.XAER_NOTA);
         }
-// Not neeeded as transactional
-/*     try {
+
+       try {
             if(id.rollbackOnly)
                 conn.rollback();
            else
@@ -495,13 +495,13 @@
         } catch(Exception e) {
             throw new XAException(XAException.XA_RBCOMMFAIL);
         } finally {
-*/            try {
+            try {
                 conn.close(); /* We must always return connections to the pool,
                                  or we'd eventually run out. */
             } catch(SQLException e) {
                 getLogger().log(e,LOG_CHANNEL,Logger.ERROR);
             }
-//        }
+        }
     }
 
     /**
@@ -526,19 +526,19 @@
             getLogger().log("rollback(): No connection in connectionMap for id 
\""+id+"\"", LOG_CHANNEL, Logger.ERROR);
             throw new XAException(XAException.XAER_NOTA);
         }
-// Not neeeded as transactional
-/*        try {
-            //conn.rollback();
+
+        try {
+            conn.rollback();
         } catch (SQLException e) {
             throw new XAException(XAException.XA_HEURCOM);
         } finally {
-*/            try {
+            try {
                 conn.close(); /* We must always return connections to the pool,
                                  or we'd eventually run out. */
             } catch(SQLException e) {
                 getLogger().log(e,LOG_CHANNEL,Logger.ERROR);
             }
-//        }
+        }
     }
     
     

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to