Hi!
I have some relation declared with cascade deletation in my
ejb-jar.xml, eg:
<ejb-relation>
<ejb-relation-name>Customer-Note</ejb-relation-name>
<ejb-relationship-role>
<ejb-relationship-role-name>Customer-has-a-Note</ejb-relationship-role-name>
<multiplicity>One</multiplicity>
<relationship-role-source>
<ejb-name>CustomerEJB</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>note</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
<ejb-relationship-role>
<ejb-relationship-role-name>Note-belongs-to-Customer</ejb-relationship-role-name>
<multiplicity>One</multiplicity>
<cascade-delete/>
<relationship-role-source>
<ejb-name>NoteEJB</ejb-name>
</relationship-role-source>
</ejb-relationship-role>
</ejb-relation>
My database schema for this relation is:
CREATE TABLE customer (
id integer NOT NULL,
note_id integer,
lastname character varying,
confident boolean,
middlename character varying,
firstname character varying,
location character varying
);
ALTER TABLE ONLY customer
ADD CONSTRAINT customer_pkey PRIMARY KEY (id);
CREATE TABLE note (
id integer NOT NULL,
text character varying
);
ALTER TABLE ONLY note
ADD CONSTRAINT note_pkey PRIMARY KEY (id);
ALTER TABLE customer
ADD CONSTRAINT fk_customer_note FOREIGN KEY (note_id)
REFERENCES note (id);
openejb-jar.xml relation definition is:
<ejb-relation>
<ejb-relationship-role>
<relationship-role-source>
<ejb-name>CustomerEJB</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>note</cmr-field-name>
</cmr-field>
<foreign-key-column-on-source/>
<role-mapping>
<cmr-field-mapping>
<key-column>id</key-column>
<foreign-key-column>note_id</foreign-key-column>
</cmr-field-mapping>
</role-mapping>
</ejb-relationship-role>
</ejb-relation> When i try to delete customer record
container reporets error:
11:21:38,156 ERROR [AbstractTransactionContext] Unable to roll back
transaction
java.lang.IllegalStateException: Status is STATUS_NO_TRANSACTION
at
org.apache.geronimo.transaction.manager.TransactionImpl.rollback(Tran
sactionImpl.java:438)
at
org.apache.geronimo.transaction.context.InheritableTransactionContext
.rollbackAndThrow(InheritableTransactionContext.java:308)
at
org.apache.geronimo.transaction.context.InheritableTransactionContext
.complete(InheritableTransactionContext.java:199)
at
org.apache.geronimo.transaction.context.InheritableTransactionContext
.commit(InheritableTransactionContext.java:146)
at
org.apache.geronimo.transaction.context.OnlineUserTransaction.commit(
OnlineUserTransaction.java:80)
at
org.queryphone.web.QueryphoneBaseAction.execute(QueryphoneBaseAction.
java:67)
at
org.apache.struts.action.RequestProcessor.processActionPerform(Reques
tProcessor.java:419)
at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.ja
va:224)
at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:119
4)
at
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:688)
at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:428
)
at
org.apache.geronimo.jetty.JettyServletHolder.handle(JettyServletHolde
r.java:99)
at
org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(
WebApplicationHandler.java:830)
at
org.mortbay.jetty.servlet.JSR154Filter.doFilter(JSR154Filter.java:170
)
at
org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(
WebApplicationHandler.java:821)
at
org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicati
onHandler.java:471)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:5
68)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
at
org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplication
Context.java:633)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
at org.mortbay.http.HttpServer.service(HttpServer.java:909)
at
org.mortbay.http.HttpConnection.service(HttpConnection.java:816)
at
org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:982)
at
org.mortbay.http.HttpConnection.handle(HttpConnection.java:833)
at
org.mortbay.http.SocketListener.handleConnection(SocketListener.java:
244)
at
org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
at
org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
javax.transaction.SystemException: Unable to commit container
transaction
at
org.apache.geronimo.transaction.context.InheritableTransactionContext
.rollbackAndThrow(InheritableTransactionContext.java:327)
at
org.apache.geronimo.transaction.context.InheritableTransactionContext
.complete(InheritableTransactionContext.java:199)
at
org.apache.geronimo.transaction.context.InheritableTransactionContext
.commit(InheritableTransactionContext.java:146)
at
org.apache.geronimo.transaction.context.OnlineUserTransaction.commit(
OnlineUserTransaction.java:80)
at
org.queryphone.web.QueryphoneBaseAction.execute(QueryphoneBaseAction.
java:67)
at
org.apache.struts.action.RequestProcessor.processActionPerform(Reques
tProcessor.java:419)
at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.ja
va:224)
at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:119
4)
at
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:688)
at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:428
)
at
org.apache.geronimo.jetty.JettyServletHolder.handle(JettyServletHolde
r.java:99)
at
org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(
WebApplicationHandler.java:830)
at
org.mortbay.jetty.servlet.JSR154Filter.doFilter(JSR154Filter.java:170
)
at
org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(
WebApplicationHandler.java:821)
at
org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicati
onHandler.java:471)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:5
68)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
at
org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplication
Context.java:633)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
at org.mortbay.http.HttpServer.service(HttpServer.java:909)
at
org.mortbay.http.HttpConnection.service(HttpConnection.java:816)
at
org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:982)
at
org.mortbay.http.HttpConnection.handle(HttpConnection.java:833)
at
org.mortbay.http.SocketListener.handleConnection(SocketListener.java:
244)
at
org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
at
org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
Caused by: org.tranql.ql.QueryException: Error executing statement:
DELETE FROM
note WHERE id = ?
at
org.tranql.sql.jdbc.JDBCUpdateCommand.execute(JDBCUpdateCommand.java:
69)
at
org.tranql.cache.SimpleFlushStrategy.flush(SimpleFlushStrategy.java:6
6)
at
org.tranql.cache.SimpleFlushStrategy.flush(SimpleFlushStrategy.java:4
9)
at
org.tranql.cache.cache.InTxCacheTracker.flush(InTxCacheTracker.java:4
1)
at org.tranql.cache.InTxCache.flush(InTxCache.java:86)
at
org.apache.geronimo.transaction.context.AbstractTransactionContext.fl
ushState(AbstractTransactionContext.java:115)
at
org.apache.geronimo.transaction.context.InheritableTransactionContext
.complete(InheritableTransactionContext.java:175)
... 26 more
Caused by: org.postgresql.util.PSQLException: ERROR: update or delete
on "note"
violates foreign key constraint "fk_customer_note" on "customer"
at
org.postgresql.util.PSQLException.parseServerError(PSQLException.java
:139)
at
org.postgresql.core.QueryExecutor.executeV3(QueryExecutor.java:152)
at
org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:100)
at
org.postgresql.core.QueryExecutor.execute(QueryExecutor.java:43)
at
org.postgresql.jdbc1.AbstractJdbc1Statement.execute(AbstractJdbc1Stat
ement.java:517)
at
org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Stat
ement.java:50)
at
org.postgresql.jdbc1.AbstractJdbc1Statement.executeUpdate(AbstractJdb
c1Statement.java:273)
at
org.tranql.connector.jdbc.PreparedStatementHandle.executeUpdate(Prepa
redStatementHandle.java:103)
at
org.tranql.sql.jdbc.JDBCUpdateCommand.execute(JDBCUpdateCommand.java:
What's wrong with it?
Best regards,
Alex Andrushchak