Hi,
at first, thank you for help so far. Unfortunately, the error message is
still appearing. I checked the information given by the doc you referred me
to, Gus. The strange thing at all is, that I can make new objects persistent
without problems. But retrieving collections is still the problem. I checked
and doublechecked everything, but don't know where's the problem.
My persistente class is House. I'm testing on the HSQLDB, comming with OJB.
I prepare my user class for enhancing by compiling it as usual, and copy the
class files to my dir target/classes/"<package>"/ and
target/classestest/"<package>"/
As I already wrote, enhancing is successful.
Here some important lines from my repository_jdo.xml, House.jdo, House.java,
etc.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
SQL statement for the table in HSQLDB
CREATE TABLE Seb_House (
ID INTEGER NOT NULL PRIMARY KEY,
NAME VARCHAR)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Corresponding mapping tags in repository_jdo.xml
<!-- Definitions for dbsii.House -->
<class-descriptor
class="dbsii.House"
table="Seb_House"
>
<field-descriptor
name="id"
column="ID"
jdbc-type="INTEGER"
primarykey="true"
/>
<field-descriptor
name="name"
column="NAME"
jdbc-type="VARCHAR"
/>
</class-descriptor>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
The persistente class file
package dbsii;
import java.io.Serializable;
class House implements Serializable {
private int id;
protected String name;
public House() {
}
public House(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return this.id;
}
public String getName() {
return this.name;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return "[" + this.id + "] " + this.name;
}
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
The corresponding House.jdo
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jdo PUBLIC "-//Sun Microsystems, Inc.//DTD Java Data Objects
Metadata 1.0//EN" "http://java.sun.com/dtd/jdo_1_0.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="dbsii">
<class name="House">
<extension vendor-name="ojb" key="table" value="Seb_House"/>
<field name="id">
<extension vendor-name="ojb" key="column" value="ID"/>
</field>
<field name="name">
<extension vendor-name="ojb" key="column" value="NAME"/>
</field>
</class>
</package>
</jdo>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
The lines causing the error
(pretty the same as in the jdo tutorial)
manager = factory.getPersistenceManager();
try {
// JDO does not like old instances...
PersistenceBrokerFactory.defaultPersistenceBroker().clearCache();
manager.currentTransaction().begin();
Query query = manager.newQuery(House.class);
// >>> NEXT LINE CAUSES THE ERROR <<<
Collection all = (Collection)query.execute();
// now iterate over the result to print each product
java.util.Iterator iter = all.iterator();
if (! iter.hasNext()) {
System.out.println("No Product entries found!");
}
while (iter.hasNext()) {
House house = (House) iter.next();
System.out.println(house.toString());
}
}
...
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
The error message
[JDO] DEBUG: OjbStoreConnector.begin: connectionReadyForRelease=false
org.apache.ojb.broker.PersistenceBrokerException: Unable to build object
instance (MAYBE you don't have a constructor available):class dbsii.House
at
org.apache.ojb.broker.accesslayer.RowReaderDefaultImpl.buildWithReflection(R
owReaderDefaultImpl.java:239)
at
org.apache.ojb.broker.accesslayer.RowReaderDefaultImpl.readObjectFrom(RowRea
derDefaultImpl.java:115) at
org.apache.ojb.broker.accesslayer.RsIterator.getObjectFromResultSet(RsIterat
or.java:428)
at
org.apache.ojb.broker.accesslayer.RsIterator.next(RsIterator.java:256)
at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryRe
ferenceBroker.java:147)
at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryRe
ferenceBroker.java:244)
at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryRe
ferenceBroker.java:263)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Persis
tenceBrokerImpl.java:998)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(
DelegatingPersistenceBroker.java:322)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(
DelegatingPersistenceBroker.java:322)
at org.apache.ojb.jdori.sql.OjbExtent.<init>(OjbExtent.java:98)
at
org.apache.ojb.jdori.sql.OjbStoreManager.getExtent(OjbStoreManager.java:251)
at com.sun.jdori.common.PersistenceManagerImpl.getExtent(Unknown
Source)
at com.sun.jdori.common.query.QueryImpl.checkCandidates(Unknown
Source)
at com.sun.jdori.common.query.QueryImpl.execute(Unknown Source)
at dbsii.Frontend.getHouseListings(Frontend.java:148)
at dbsii.Frontend.run(Frontend.java:68)
at dbsii.Frontend.main(Frontend.java:40)
Caused by:
org.apache.ojb.broker.metadata.ClassNotPersistenceCapableException: (Could
not instantiate dbsii.House: Class
org.apache.ojb.broker.util.ConstructorHelper can not access a member of
class dbsii.House with modifiers "public")
at
org.apache.ojb.broker.util.ConstructorHelper.instantiate(ConstructorHelper.j
ava:162)
at
org.apache.ojb.broker.accesslayer.RowReaderDefaultImpl.buildWithReflection(R
owReaderDefaultImpl.java:235)
... 17 more
Caused by: java.lang.IllegalAccessException: Class
org.apache.ojb.broker.util.ConstructorHelper can not access
a member of class dbsii.House with modifiers "public"
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:57)
at java.lang.reflect.Constructor.newInstance(Constructor.java:268)
at
org.apache.ojb.broker.util.ConstructorHelper.instantiate(ConstructorHelper.j
ava:158)
... 18 more
[org.apache.ojb.broker.accesslayer.RsIterator] ERROR: Unable to build object
instance (MAYBE you don't have a constructor available):class dbsii.House
org.apache.ojb.broker.PersistenceBrokerException: Unable to build object
instance (MAYBE you don't have a constructor available):class dbsii.House
at
org.apache.ojb.broker.accesslayer.RowReaderDefaultImpl.buildWithReflection(R
owReaderDefaultImpl.java:239)
at
org.apache.ojb.broker.accesslayer.RowReaderDefaultImpl.readObjectFrom(RowRea
derDefaultImpl.java:115) at
org.apache.ojb.broker.accesslayer.RsIterator.getObjectFromResultSet(RsIterat
or.java:428)
at
org.apache.ojb.broker.accesslayer.RsIterator.next(RsIterator.java:256)
at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryRe
ferenceBroker.java:147)
at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryRe
ferenceBroker.java:244)
at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryRe
ferenceBroker.java:263)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Persis
tenceBrokerImpl.java:998)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(
DelegatingPersistenceBroker.java:322)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(
DelegatingPersistenceBroker.java:322)
at org.apache.ojb.jdori.sql.OjbExtent.<init>(OjbExtent.java:98)
at
org.apache.ojb.jdori.sql.OjbStoreManager.getExtent(OjbStoreManager.java:251)
at com.sun.jdori.common.PersistenceManagerImpl.getExtent(Unknown
Source)
at com.sun.jdori.common.query.QueryImpl.checkCandidates(Unknown
Source)
at com.sun.jdori.common.query.QueryImpl.execute(Unknown Source)
at dbsii.Frontend.getHouseListings(Frontend.java:148)
at dbsii.Frontend.run(Frontend.java:68)
at dbsii.Frontend.main(Frontend.java:40)
Caused by:
org.apache.ojb.broker.metadata.ClassNotPersistenceCapableException: (Could
not instantiate dbsii.House: Class
org.apache.ojb.broker.util.ConstructorHelper can not access a member of
class dbsii.House with modifiers "public")
at
org.apache.ojb.broker.util.ConstructorHelper.instantiate(ConstructorHelper.j
ava:162)
at
org.apache.ojb.broker.accesslayer.RowReaderDefaultImpl.buildWithReflection(R
owReaderDefaultImpl.java:235)
... 17 more
Caused by: java.lang.IllegalAccessException: Class
org.apache.ojb.broker.util.ConstructorHelper can not access
a member of class dbsii.House with modifiers "public"
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:57)
at java.lang.reflect.Constructor.newInstance(Constructor.java:268)
at
org.apache.ojb.broker.util.ConstructorHelper.instantiate(ConstructorHelper.j
ava:158)
... 18 more
org.apache.ojb.broker.PersistenceBrokerException:
java.util.NoSuchElementException: Could not obtain next object: Unable to
build object instance (MAYBE you don't have a constructor available):class
dbsii.House
at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryRe
ferenceBroker.java:251)
at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryRe
ferenceBroker.java:263)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Persis
tenceBrokerImpl.java:998)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(
DelegatingPersistenceBroker.java:322)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery(
DelegatingPersistenceBroker.java:322)
at org.apache.ojb.jdori.sql.OjbExtent.<init>(OjbExtent.java:98)
at
org.apache.ojb.jdori.sql.OjbStoreManager.getExtent(OjbStoreManager.java:251)
at com.sun.jdori.common.PersistenceManagerImpl.getExtent(Unknown
Source)
at com.sun.jdori.common.query.QueryImpl.checkCandidates(Unknown
Source)
at com.sun.jdori.common.query.QueryImpl.execute(Unknown Source)
at dbsii.Frontend.getHouseListings(Frontend.java:148)
at dbsii.Frontend.run(Frontend.java:68)
at dbsii.Frontend.main(Frontend.java:40)
Caused by: java.util.NoSuchElementException: Could not obtain next object:
Unable to build object instance (MAYBE you don't have a constructor
available):class dbsii.House
at
org.apache.ojb.broker.accesslayer.RsIterator.next(RsIterator.java:276)
at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryRe
ferenceBroker.java:147)
at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(QueryRe
ferenceBroker.java:244)
... 12 more
Exception in thread "main" javax.jdo.JDOUserException: Cannot close
PersistenceManager while transaction is still active.
at com.sun.jdori.common.PersistenceManagerImpl.close(Unknown Source)
at
com.sun.jdori.common.PersistenceManagerImpl.popCurrentWrapper(Unknown
Source)
at com.sun.jdori.common.PersistenceManagerWrapper.close(Unknown
Source)
at dbsii.Frontend.getHouseListings(Frontend.java:170)
at dbsii.Frontend.run(Frontend.java:68)
at dbsii.Frontend.main(Frontend.java:40)
-----Urspr�ngliche Nachricht-----
Von: Gus Heck [mailto:[EMAIL PROTECTED]
Gesendet: Samstag, 20. Dezember 2003 00:17
An: OJB Users List
Betreff: Re: AW: AW: JDO - Unable to build object instance
This may interest you:
http://www.mail-archive.com/[EMAIL PROTECTED]/msg03320.html
HTH,
Gus
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]