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]>
