Well this is a Debugging message (I=m saving one Person with two addresses): This save
wasnt ok, one of the addresses has oidPerson = 0. This address oid is 583. Address
with oid 582 has right oidPerson = 562.
I also add class definitions of class Person and Address (classes are in package
com.uvt) and XML metadata file uvt.jdo.
There is no stacktrace.
Thanks Tomas Klubal
******************************************************************
[JDO] DEBUG: OjbStoreConnector.begin: connectionReadyForRelease=false
[org.apache.ojb.broker.ta.PersistenceBrokerFactoryDefaultImpl] INFO: Create
PersistenceBroker instance pool, pool configuration was {whenExhaustedAction=0,
maxIdle=-1, maxActive=100, maxWait=2000, removeAbandoned=false,
numTestsPerEvictionRun=10, testWhileIdle=false, minEvictableIdleTimeMillis=1000000,
testOnReturn=false, logAbandoned=false, removeAbandonedTimeout=300,
timeBetweenEvictionRunsMillis=-1, testOnBorrow=false}
[org.apache.ojb.broker.metadata.RepositoryPersistor] INFO: OJB Descriptor Repository:
file:/C:/java/enhancer/repository.xml
[org.apache.ojb.broker.metadata.RepositoryXmlHandler] DEBUG: startDoc
[org.apache.ojb.broker.metadata.RepositoryXmlHandler] DEBUG: accept-locks: true
[org.apache.ojb.broker.metadata.RepositoryXmlHandler] DEBUG: accept-locks: true
[org.apache.ojb.broker.metadata.RepositoryXmlHandler] DEBUG: accept-locks: true
[org.apache.ojb.broker.metadata.RepositoryXmlHandler] DEBUG: accept-locks: true
[org.apache.ojb.broker.metadata.RepositoryXmlHandler] DEBUG: accept-locks: true
[org.apache.ojb.broker.metadata.RepositoryXmlHandler] DEBUG: accept-locks: true
[org.apache.ojb.broker.metadata.RepositoryXmlHandler] DEBUG: accept-locks: true
[org.apache.ojb.broker.metadata.RepositoryXmlHandler] DEBUG: accept-locks: true
[org.apache.ojb.broker.metadata.RepositoryXmlHandler] DEBUG: accept-locks: true
[org.apache.ojb.broker.metadata.RepositoryXmlHandler] DEBUG: accept-locks: true
[org.apache.ojb.broker.metadata.RepositoryXmlHandler] DEBUG: accept-locks: true
[org.apache.ojb.broker.metadata.RepositoryXmlHandler] DEBUG: accept-locks: true
[org.apache.ojb.broker.metadata.RepositoryXmlHandler] DEBUG: endDoc
[org.apache.ojb.broker.metadata.RepositoryPersistor] INFO: Read repository from file
took 761 ms
[org.apache.ojb.broker.metadata.RepositoryPersistor] INFO: OJB Descriptor Repository:
file:/C:/java/enhancer/repository.xml
[org.apache.ojb.broker.metadata.RepositoryPersistor] INFO: Read connection repository
from file took 110 ms
[org.apache.ojb.broker.ta.PersistenceBrokerFactoryDefaultImpl] INFO: Set default
PBKey: org.apache.ojb.broker.PBKey: repository=default, user=brokilon, password=*****
[org.apache.ojb.broker.accesslayer.ConnectionFactoryPooledImpl] INFO: Create new
connection pool:org.apache.ojb.broker.metadata.JdbcConnectionDescriptor@401369[
jcd-alias=default
default-connection=true
dbms=MySQL
jdbc-level=2.0
driver=org.gjt.mm.mysql.Driver
protocol=jdbc
sub-protocol=mysql
db-alias=//jalovice.czu.cz:3306/ojb
user=brokilon
password=*****
eager-release=false
ConnectionPoolDescriptor={whenExhaustedAction=0, maxIdle=-1, maxActive=21,
maxWait=5000, removeAbandoned=false, numTestsPerEvictionRun=10, testWhileIdle=false,
minEvictableIdleTimeMillis=600000, testOnReturn=false, logAbandoned=false,
removeAbandonedTimeout=300, timeBetweenEvictionRunsMillis=-1, testOnBorrow=true}
batchMode=false
sequenceDescriptor=org.apache.ojb.broker.metadata.SequenceDescriptor@14d7745[
sequenceManagerClass=class
org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl
Properties={grabSize=20}
]
]
[org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl] DEBUG: SQL: SELECT
A0.GRAB_SIZE,A0.MAX_KEY,A0.FIELDNAME,A0.TABLENAME FROM OJB_HL_SEQ A0 WHERE
(A0.TABLENAME LIKE ? ) AND A0.FIELDNAME LIKE ?
[org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl] DEBUG: SQL: SELECT
GRAB_SIZE,MAX_KEY,FIELDNAME,TABLENAME FROM OJB_HL_SEQ WHERE TABLENAME = ? AND
FIELDNAME = ?
[org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl] DEBUG: SQL: UPDATE
OJB_HL_SEQ SET MAX_KEY=?, GRAB_SIZE=? WHERE TABLENAME = ? AND FIELDNAME = ?
[org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl] DEBUG: SQL: SELECT
A0.GRAB_SIZE,A0.MAX_KEY,A0.FIELDNAME,A0.TABLENAME FROM OJB_HL_SEQ A0 WHERE
(A0.TABLENAME LIKE ? ) AND A0.FIELDNAME LIKE ?
[JDO] DEBUG: OjbStoreManager.flush: com.uvt.Address{583}, P_NEW
[JDO] DEBUG: OjbStoreManager.insert
[org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl] DEBUG: SQL: INSERT
INTO Address (oid,oidPerson,ulice,mesto,psc) VALUES ( ?, ?, ?, ?, ? )
[JDO] DEBUG: OjbStoreManager.flush: com.uvt.Person{562}, P_NEW
[JDO] DEBUG: OjbStoreManager.insert
[org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl] DEBUG: SQL: INSERT
INTO Person (oid,jmeno,prijmeni) VALUES ( ?, ?, ? )
[JDO] DEBUG: OjbStoreManager.flush: com.uvt.Address{582}, P_NEW
[JDO] DEBUG: OjbStoreManager.insert
[JDO] DEBUG: OjbStoreManager.flush: end, err=false
[JDO] DEBUG: OjbStoreConnector.commit
Person saved. Person: Klubal Thomas
*********************************************************************************
This is a Person Class:
public class Person {
private int oid;
private String jmeno;
private String prijmeni;
private Vector adresy;
public Person() {
adresy = new Vector();
}
public boolean addAddress(Address aAddress) {
return adresy.add(aAddress);
}
public Object removeAddress(int index) {
return adresy.remove(index);
}
public int getOid() {
return oid;
}
public void setOid(int aOid) {
oid = aOid;
}
public String getJmeno() {
return prijmeni;
}
public String getPrijmeni() {
return jmeno;
}
public void setJmeno(String aJmeno) {
jmeno = aJmeno;
}
public void setPrijmeni(String aPrijmeni) {
prijmeni = aPrijmeni;
}
public String toString() {
return "Person: " + getJmeno() + " " + getPrijmeni();
}
}
**********************************************************
This is a Address Class:
public class Address {
private int oid;
private int oidPerson;
private String ulice;
private String mesto;
private String psc;
public Address() {
}
public int getOid() {
return oid;
}
public int getOidPerson() {
return oidPerson;
}
public void setOidPerson(int aOidPerson) {
oidPerson = aOidPerson;
}
public String getUlice() {
return ulice;
}
public String getMesto() {
return mesto;
}
public String getPsc() {
return psc;
}
public void setOid(int aOid) {
oid = aOid;
}
public void setUlice(String aUlice) {
ulice = aUlice;
}
public void setMesto(String aMesto) {
mesto = aMesto;
}
public void setPsc(String aPsc) {
psc = aPsc;
}
public String toString() {
return "Address: " + getUlice() + " " + getMesto() + " " + getPsc();
}
}
**********************************************************
And this is jdo file for enhancing:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jdo SYSTEM "file://classes/org/apache/ojb/jdo.dtd">
<jdo>
<!--extension vendor-name="ojb" key="dbplatform" value="hsqldb"/>
<extension vendor-name="ojb" key="dbjdbc-level" value="2.0"/>
<extension vendor-name="ojb" key="dbdriver" value="org.hsqldb.jdbcDriver"/>
<extension vendor-name="ojb" key="dbprotocol" value="jdbc"/>
<extension vendor-name="ojb" key="dbsubprotocol" value="hsqldb"/>
<extension vendor-name="ojb" key="dbalias" value="../OJB"/>
<extension vendor-name="ojb" key="dbusername" value="sa"/>
<extension vendor-name="ojb" key="dbpassword" value=""/-->
<package name="com.uvt">
<class name="Person">
<extension vendor-name="ojb" key="table" value="Person"/>
<field name="oid">
<extension vendor-name="ojb" key="column" value="oid"/>
<extension vendor-name="ojb" key="jdbc-type" value="INTEGER"/>
</field>
<field name="jmeno">
<extension vendor-name="ojb" key="column" value="jmeno"/>
</field>
<field name="prijmeni">
<extension vendor-name="ojb" key="column" value="prijmeni"/>
</field>
<field name="adresy">
<collection element-type="Address">
<extension vendor-name="ojb" key="inverse-foreignkey" value="oidPerson"/>
</collection>
</field>
</class>
<class name="Address">
<extension vendor-name="ojb" key="table" value="Address"/>
<field name="oid">
<extension vendor-name="ojb" key="column" value="oid"/>
<extension vendor-name="ojb" key="jdbc-type" value="INTEGER"/>
</field>
<field name="oidPerson">
<extension vendor-name="ojb" key="column" value="oidPerson"/>
<extension vendor-name="ojb" key="jdbc-type" value="INTEGER"/>
</field>
<field name="ulice">
<extension vendor-name="ojb" key="column" value="ulice"/>
</field>
<field name="mesto">
<extension vendor-name="ojb" key="column" value="mesto"/>
</field>
<field name="psc">
<extension vendor-name="ojb" key="column" value="psc"/>
</field>
</class>
</package>
</jdo>
**************************************************************************
*********** REPLY SEPARATOR ***********
On 20.2.2003 at 21:28 Thomas Mahler wrote:
>Hi again Tomas,
>
>Tomas Klubal wrote:
>> Sorry,
>> there is not duplicity now, 2 adresses to save = 2 rows (it's ok)
>
>That's what I expected.
>
>> but there is sometimes (50% too) oidPerson (foreign key to person) = 0
>in address table.
>
>Mhh, that' strange...
>Unfortunately we currently don't have a JDO testsuite.
>So I can't tell what could be wrong without having more details.
>could you please post the jdo debug messages for a case where things go
>wrong. Seeing a stacktrace (if any) would also be good.
>
>>
>> *********** REPLY SEPARATOR ***********
>>
>> On 20.2.2003 at 16:52 Mahler Thomas wrote:
>>
>>
>>>Hi Tomas,
>>>
>>>Please set
>>>auto-update="false" and auto-delete="false"
>>>and try again.
>>
>>
>>
>> Does it mean that jdo support implicitly cascading?
>>
>
>Yes. ODMG and JDO register depended objects (like collection elements)
>to the current transaction. On transaction commit they both perform
>persistence operations for all registered objects.
>
>Thus setting auto-update=true results in double inserts. (This is
>meantioned somewhere in tutorial3.html)
>
>best regards from Essen to Prague,
>Thomas
>
>>
>>
>>
>>
>>>Hope that helps...
>>>cheers,
>>>Thomas
>>>
>>>
>>>>-----Original Message-----
>>>>From: Tomas Klubal [mailto:[EMAIL PROTECTED]]
>>>>Sent: Thursday, February 20, 2003 3:31 PM
>>>>To: [EMAIL PROTECTED]
>>>>Subject: JDO - saving objects duplicity
>>>>
>>>>
>>>>Hello,
>>>>
>>>>1) I'm trying JDO and I receiving errors. Exactly, sometimes
>>>>(50%) when I'm saving objects are objects in collection saved twice.
>>>>I'm using ojb 0.99 built from source connected to mysql DB.
>>>>I have two classes Person and Address. One Person can have
>>>>0..n Addresses, so I'have collection adresy in Person object
>>>>( private Vector adresy;). I'have auto-update = true
>>>> When I save object Person with PB everything runs OK, I can
>>>>see one new Person in table "Person" and new Addresses in
>>>>table "Address" (if I'm saving two then there are two rows).
>>>>
>>>>When I use JDO, it saves one Person (it's OK), but at 50% of
>>>>runs there are more rows than Addresses to save (Some rows
>>>>are duplicated, identical).
>>>>
>>>>Log from JDO looks like this (one Person, two Addresses, seems OK):
>>>>
>>>>*********************************
>>>>[JDO] DEBUG: OjbStoreManager.flush: com.uvt.Address{303}, P_NEW
>>>>[JDO] DEBUG: OjbStoreManager.insert
>>>>[JDO] DEBUG: OjbStoreManager.flush: com.uvt.Person{282}, P_NEW
>>>>[JDO] DEBUG: OjbStoreManager.insert
>>>>[JDO] DEBUG: OjbStoreManager.flush: com.uvt.Address{302}, P_NEW
>>>>[JDO] DEBUG: OjbStoreManager.insert
>>>>[JDO] DEBUG: OjbStoreManager.flush: end, err=false
>>>>[JDO] DEBUG: OjbStoreConnector.commit
>>>>*********************************
>>>>but then there are identical rows (sometimes only one Address
>>>>is duplicated, sometimes both).
>>>>
>>>>My code looks like this:
>>>>
>>>>********************************
>>>>public boolean savePerson() {
>>>> Person person = null;
>>>> Address adresa = null;
>>>> Address adresa2 = null;
>>>>
>>>> PersistenceManager manager = null;
>>>> PersistenceManagerFactory factory = null;
>>>>
>>>> person = new Person();
>>>> person.setJmeno("Thomas");
>>>> person.setPrijmeni("Klubal");
>>>>
>>>> adresa2 = new Address();
>>>> adresa2.setUlice("Greeen st. 256");
>>>> adresa2.setMesto("Prague");
>>>> adresa2.setPsc("165 00");
>>>> person.addAddress(adresa2);
>>>>
>>>> adresa = new Address();
>>>> adresa.setUlice("Red st. 45");
>>>> adresa.setMesto("Paris");
>>>> adresa.setPsc("895422");
>>>> person.addAddress(adresa);
>>>>
>>>> try {
>>>> factory = new OjbStorePMF();
>>>> manager = factory.getPersistenceManager();
>>>> Transaction tx = null;
>>>> tx = manager.currentTransaction();
>>>> tx.begin();
>>>> manager.makePersistent(person);
>>>> tx.commit();
>>>>
>>>> System.out.println("\nPerson saved. " +
>>>>person.toString());
>>>> manager.close();
>>>> }
>>>> catch (PersistenceBrokerException ex) {
>>>> System.out.println("Error: " + ex.getMessage());
>>>> return false;
>>>> }
>>>> return true;
>>>> }
>>>>*************************************************************
>>>>this is my repiository_user.xml:
>>>>
>>>><class-descriptor class="com.uvt.Address" table="Address">
>>>> <field-descriptor id="1" name="oid" column="oid"
>>>>jdbc-type="INTEGER" primarykey="true"
>>>>autoincrement="true"></field-descriptor>
>>>> <field-descriptor id="2" name="oidPerson"
>>>>column="oidPerson" jdbc-type="INTEGER"></field-descriptor>
>>>> <field-descriptor id="3" name="ulice" column="ulice"
>>>>jdbc-type="VARCHAR"></field-descriptor>
>>>> <field-descriptor id="4" name="mesto" column="mesto"
>>>>jdbc-type="VARCHAR"></field-descriptor>
>>>> <field-descriptor id="5" name="psc" column="psc"
>>>>jdbc-type="VARCHAR"></field-descriptor>
>>>></class-descriptor>
>>>>
>>>><class-descriptor class="com.uvt.Person" table="Person">
>>>> <field-descriptor id="1" name="oid" column="oid"
>>>>jdbc-type="INTEGER" primarykey="true"
>>>>autoincrement="true"></field-descriptor>
>>>> <field-descriptor id="2" name="jmeno" column="jmeno"
>>>>jdbc-type="VARCHAR"></field-descriptor>
>>>> <field-descriptor id="3" name="prijmeni"
>>>>column="prijmeni" jdbc-type="VARCHAR"></field-descriptor>
>>>> <collection-descriptor name="adresy"
>>>>element-class-ref="com.uvt.Address" orderby="oid" sort="DESC"
>>>>auto-retrieve="true" auto-update="true" auto-delete="true">
>>>> <inverse-foreignkey field-id-ref="2"></inverse-foreignkey>
>>>> </collection-descriptor>
>>>> </class-descriptor>
>>>>
>>>>Please dont you know whats wrong?
>>>>
>>>>
>>>>Tomas Klubal :-)
>>>>E-mail: [EMAIL PROTECTED]
>>>>
>>>>
>>>>---------------------------------------------------------------------
>>>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>For additional commands, e-mail: [EMAIL PROTECTED]
>>>>
>>>>
>>>
>>>
>>>---------------------------------------------------------------------
>>>To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>>
>> Tomas Klubal :-)
>> E-mail: [EMAIL PROTECTED]
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [EMAIL PROTECTED]
>For additional commands, e-mail: [EMAIL PROTECTED]
Tomas Klubal :-)
E-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]