You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@geronimo.apache.org by "A.L." <ur...@bk.ru> on 2007/11/07 18:44:47 UTC

Re: A.L. CMR Question

Hi Mark,

It was CMR but I have resolved it per finder functions.
(CMR was not worked at all because foreign key is a part of primary key)

I'm using Geronimo 1.1.1. AS with Tomcat.
Databases Oracle 10g, Oracle XE, Oracle 8.1.7
My application consists of 5 modules each of them is a EAR.

The problem appears in main module depending on server start ("lucky" or
"unlucky" :-)))
If "unlucky" it can be sometimes solved by restart of Geronimo AS.
The problem appearence is independent of database version.

I have table ITEMS and dependent table ITEM_FIELDS (1:n relation) 

ITEMS
************
CREATE TABLE "ITEMS" (
		"ID" NUMBER(10 , 0) NOT NULL,
		"TIMESTAMP" DATE)

ALTER TABLE "ITEMS" ADD CONSTRAINT "PK1" PRIMARY KEY (ID)
*************

ITEM_FIELDS
***************
CREATE TABLE "ITEM_FIELDS" (
		"IT_ID" NUMBER(10 , 0) NOT NULL,
		"FIELD_ID" VARCHAR2(128) NOT NULL,
		"FIELD_NAME" VARCHAR2(128) NOT NULL)

ALTER TABLE "ITEM_FIELDS" ADD CONSTRAINT "PK53" PRIMARY KEY (IT_ID,
FIELD_ID)

ALTER TABLE "ITEM_FIELDS" ADD CONSTRAINT "FK_IT_FIELDS_53" FOREIGN KEY
(IT_ID)
	REFERENCES "ITEMS" (ID)
	ON DELETE CASCADE
	ON UPDATE CASCADE
*************

...
Caused by: org.tranql.ql.QueryException: Error executing statement: INSERT
INTO ITEM_FIELDS (IT_ID, FIELD_ID, FIELD_NAME) VALUES (?, ?, ?)
	at org.tranql.sql.jdbc.JDBCUpdateCommand.execute(JDBCUpdateCommand.java:69)
	at
org.tranql.cache.EnforceRelationshipsFlushStrategy$UpdateCommandInfo.execute(EnforceRelationshipsFlushStrategy.java:105)
	at
org.tranql.cache.EnforceRelationshipsFlushStrategy.execute(EnforceRelationshipsFlushStrategy.java:93)
	at
org.tranql.cache.EnforceRelationshipsFlushStrategy.flush(EnforceRelationshipsFlushStrategy.java:83)
	at org.tranql.intertxcache.InTxCacheTracker.flush(InTxCacheTracker.java:40)
	at org.tranql.cache.InTxCache.flush(InTxCache.java:86)
	at org.openejb.entity.cmp.CMPFinder.execute(CMPFinder.java:86)
	at
org.openejb.entity.cmp.CollectionValuedFinder.execute(CollectionValuedFinder.java:81)
	... 91 more

Caused by: java.sql.SQLException: ORA-02291: Integritäts-Constraint
(FK_IT_FIELDS_53) integrity constraint constraint name violated - parent key
not found
	at
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
	at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
	at
oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
	at
oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:955)
	at
oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1169)
	at
oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
	at
oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3368)
	at
org.tranql.connector.jdbc.PreparedStatementHandle.executeUpdate(PreparedStatementHandle.java:103)
	at org.tranql.sql.jdbc.JDBCUpdateCommand.execute(JDBCUpdateCommand.java:67)
	... 98 more
...

Item creation is implemented like:

	public java.lang.Long ejbCreate(Date _timestamp, ArrayList _fields,
ItemFieldLocalHome _fieldsLHome) throws CreateException
	{
		try
		{
...
			this.setPTimestamp(_timestamp);
			this.setId(extractID());
...
		}
		catch(Exception e)
		{
			myContext.setRollbackOnly();
			throw new CreateException("");
		}
		return null;
	}
	
	public void ejbPostCreate(Date _timestamp, ArrayList
_fields,ItemFieldLocalHome _fieldsLHome)
	{
		try
		{
			Long itemID=(Long)myContext.getPrimaryKey();
			for(int i=0; i<_fields.size();i++)
			{
				ItemFieldLocal fieldRef=_fieldsLHome.create(
					itemID,extractFID(_fields),extractFName(_fields));
			}
		}
		catch(Exception e)
		{
			myContext.setRollbackOnly();
			throw new EJBException(e);
		}
	}


<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://geronimo.apache.org/xml/ns/j2ee/application-1.1"
xmlns:sec="http://geronimo.apache.org/xml/ns/security-1.1"
xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.1"
application-name="IManager">
  <sys:environment>
    <sys:moduleId>
      <sys:groupId>X</sys:groupId>
      <sys:artifactId>IManager</sys:artifactId>
      <sys:version>1.0</sys:version>
      <sys:type>car</sys:type>
    </sys:moduleId>
  	<sys:dependencies>  
...
		<sys:dependency>
            		<sys:groupId>console.dbpool</sys:groupId>
            		<sys:artifactId>oracle10g_xe</sys:artifactId>
        	</sys:dependency>
		<sys:dependency>
      			<sys:artifactId>sharedlib</sys:artifactId>
		</sys:dependency>
  	</sys:dependencies>  
  </sys:environment>
  <module>
    <ejb>x.jar</ejb>
    <openejb-jar xmlns="http://www.openejb.org/xml/ns/openejb-jar-2.1">
    	<cmp-connection-factory>
		<resource-link>oracle10g_xe</resource-link>
	</cmp-connection-factory>
	<enforce-foreign-key-constraints />
   	<enterprise-beans>
   	  	<session>
			<ejb-name>Fasade</ejb-name>
			<jndi-name>Fasade</jndi-name>
   	  	</session>
...
      		<entity>
         		<ejb-name>ItemField</ejb-name>
           		<local-jndi-name>ItemField</local-jndi-name>
           		<table-name>ITEM_FIELDS</table-name>
         		<cmp-field-mapping>
            			<cmp-field-name>id</cmp-field-name>
                		<table-column>IT_ID</table-column>
         		</cmp-field-mapping>
         		<cmp-field-mapping>
            			<cmp-field-name>fieldID</cmp-field-name>
                		<table-column>FIELD_ID</table-column>
         		</cmp-field-mapping>
         		<cmp-field-mapping>
            			<cmp-field-name>fieldName</cmp-field-name>
                		<table-column>FIELD_NAME</table-column>
         		</cmp-field-mapping>
      		</entity>
      		<entity>
         		<ejb-name>Item</ejb-name>
           		<local-jndi-name>Item</local-jndi-name>
           		<table-name>ITEM</table-name>
         		<cmp-field-mapping>
            			<cmp-field-name>id</cmp-field-name>
                		<table-column>ID</table-column>
         		</cmp-field-mapping>
         		<cmp-field-mapping>
            			<cmp-field-name>pTimestamp</cmp-field-name>
                		<table-column>P_TIMESTAMP</table-column>
         		</cmp-field-mapping>
      		</entity>
...
   	</enterprise-beans>
    </openejb-jar>
  </module>
</application>

Names and code are slightly modified.

Regards,
Al.
-- 
View this message in context: http://www.nabble.com/A.L.-CMR-Question-tf4765450s134.html#a13632131
Sent from the Apache Geronimo - Users mailing list archive at Nabble.com.