Hi again Eric,
> > > > Thanks. I got the tutorial5 up and running. > > I'm working on rewriting this to do the same thing > > as this Client.java. Creating a bunch of accounts, > > query them, and delete them. I keep getting object > > not PersistentCapable error for Account class - what's > > causing this? > > I did not find any calls to OJB API in your code. Thus I > cannot tell what > might cause your problems. > A PersistenceCapable exception is usually thrown if something > is wrong with > the repository.xml ... > > Yes, that is what is causing it. I just found OJB has database mapping > configuration files > in bin\doc\*.xml files. Those files are only kept there for documentation purpose. The OJB tutorials keep their database and all configuration data in the directory target/test/ojb. As OJB requires to load OJB.properties and repository.xml from the classloader this directory is added to the classpath of the tutorial apps. > It was not obviously from the > documentation that you > have to modify these files when you create new fields or > tables. Should be quite obvious after reading: http://jakarta.apache.org/ojb/tutorial1.html http://jakarta.apache.org/ojb/tutorial3.html http://jakarta.apache.org/ojb/repository.html http://jakarta.apache.org/ojb/deployment.html > Why not put > > *.xml in a config directory, rather than mixing it with the > documentation > files.... feel free to do so in your applications. > I'm trying a trivial rewrite of product tutorial (tutorial5), > changing names > > from "Product" to "Account" and it is turning into a > development nightmare. There are user using OJB for applications with several hundred persistent classes. I have never heared of any development nightmares so far. > There are all these undocumented features of OJB, like the database > mapping... Claiming that database mapping is an undocumented feature does not make sense much sense to me. Please read the existing documentation and tutorials carefully. If you still find that something is missing feel free to ask. cheers, Thomas > (see attached zip file for code) > > Command line output------------------------------------------------- > C:\sw\ojb-0.9.8>bin\build with-jdori prepare-tutorials enhance-jdori > Buildfile: build.xml > > set-archive-name: > > set-archive-name-date: > > detect-jdk: > > use-jdk12: > > use-jdk13: > [echo] detected JDK 1.3 > > use-jdk14: > > init: > > prepare: > > with-jdori: > > set-archive-name: > > set-archive-name-date: > > detect-jdk: > > use-jdk12: > > use-jdk13: > [echo] detected JDK 1.3 > > use-jdk14: > > init: > [available] DEPRECATED - <available> used to ove > [available] Build file should not reuse the sa > alues. > > prepare: > > preprocess: > [echo] using switches: +JDK13, -JDBC30 > [java] .................................... > ................................................ > ................................................ > ................................................ > ................................................ > ................................................ > ................................................ > [java] sourcePath = null > [java] destinationDirectory = target/classes > [java] propertiesFileName = null > [java] doTiming = false > [java] classNames = { > [java] } > [java] jdoFileNames = { > [java] > target/classes/org/apache/ojb/tutorial5/Account.jdo > [java] classFileNames = { > [java] > target/classes/org/apache/ojb/tutorial5/Account.class > [java] } > [java] zipFileNames = { > [java] } > [java] dumpClass = false > [java] noAugment = false > [java] noAnnotate = false > [java] JDO ENHANCER: using resource: > file:/C:/sw/ojb-0.9.8/target/classes/o > rg/apache/ojb/tutorial5/Account.jdo > [java] > -------------------------------------------------------------------- > ------- > > [java] JDO ENHANCER: Enhancer: enhancing classfile ... > [java] JDO ENHANCER: scanning class > org.apache.ojb.tutorial5.Account > [java] JDO ENHANCER: > ListResourceLocator.getInputStreamForResource() : > reso > urceNameorg/apache/ojb/tutorial5/Account.jdo > [java] JDO ENHANCER: found resource: > org/apache/ojb/tutorial5/Account.jdo > [java] JDO ENHANCER: has default constructor. > [java] JDO ENHANCER: has not static initializer. > [java] JDO ENHANCER: has not clone method. > [java] JDO ENHANCER: has not writeObject method. > [java] JDO ENHANCER: has not readObject method. > [java] JDO ENHANCER: has the specific JDO fields: false. > [java] JDO ENHANCER: has the specific JDO methods: false. > [java] JDO ENHANCER: has the specific JDO fields and > methods: false. > [java] JDO ENHANCER: has the instance-callback JDO > methods: false. > [java] JDO ENHANCER: has the instance-callback JDO > methods: false. > [java] JDO ENHANCER: implements the JDO > PersistenceCapable interface: > false > . > [java] JDO ENHANCER: has the generic JDO fields: false. > [java] JDO ENHANCER: has the generic JDO methods: false. > [java] JDO ENHANCER: has the generic JDO fields and > methods: false. > [java] JDO ENHANCER: augmenting class > org.apache.ojb.tutorial5.Account > [java] JDO ENHANCER: adding: implements > javax.jdo.spi.PersistenceCapable > [java] JDO ENHANCER: adding: javax.jdo.spi.StateManager > jdoStateManager > [java] JDO ENHANCER: adding: byte jdoFlags > [java] JDO ENHANCER: adding: void jdoReplaceFlags() > [java] JDO ENHANCER: adding: boolean jdoIsPersistent() > [java] JDO ENHANCER: adding: boolean jdoIsTransactional() > [java] JDO ENHANCER: adding: boolean jdoIsNew() > [java] JDO ENHANCER: adding: boolean jdoIsDeleted() > [java] JDO ENHANCER: adding: boolean jdoIsDirty() > [java] JDO ENHANCER: adding: void jdoMakeDirty(java.lang.String) > [java] JDO ENHANCER: adding: void jdoPreSerialize() > [java] JDO ENHANCER: adding: javax.jdo.PersistenceManager > jdoGetPersistence > Manager() > [java] JDO ENHANCER: adding: java.lang.Object jdoGetObjectId() > [java] JDO ENHANCER: adding: java.lang.Object > jdoGetTransactionalObjectId() > > [java] JDO ENHANCER: adding: void > jdoReplaceStateManager(javax.jdo.spi.Stat > eManager) > [java] JDO ENHANCER: adding: void jdoProvideFields(int[]) > [java] JDO ENHANCER: adding: void jdoReplaceFields(int[]) > [java] JDO ENHANCER: adding: java.lang.Class > sunjdo$classForName$(java.lang > .String) > [java] JDO ENHANCER: adding: int jdoInheritedFieldCount > [java] JDO ENHANCER: adding: java.lang.String[] jdoFieldNames > [java] JDO ENHANCER: adding: java.lang.Class[] jdoFieldTypes > [java] JDO ENHANCER: adding: byte[] jdoFieldFlags > [java] JDO ENHANCER: adding: java.lang.Class > jdoPersistenceCapableSuperclas > s > [java] JDO ENHANCER: adding: int jdoGetManagedFieldCount() > [java] JDO ENHANCER: adding: void <clinit>() > [java] JDO ENHANCER: adding: javax.jdo.spi.PersistenceCapable > jdoNewInstanc > e(javax.jdo.spi.StateManager) > [java] JDO ENHANCER: adding: javax.jdo.spi.PersistenceCapable > jdoNewInstanc > e(javax.jdo.spi.StateManager, java.lang.Object) > [java] JDO ENHANCER: adding: void jdoProvideField(int) > [java] JDO ENHANCER: adding: void jdoReplaceField(int) > [java] JDO ENHANCER: adding: void > jdoCopyField(org.apache.ojb.tutorial5.Acc > ount, int) > [java] JDO ENHANCER: adding: void jdoCopyFields(java.lang.Object, > int[]) > [java] JDO ENHANCER: adding: java.lang.Object > jdoNewObjectIdInstance() > [java] JDO ENHANCER: adding: java.lang.Object > jdoNewObjectIdInstance(java.l > ang.String) > [java] JDO ENHANCER: adding: void > jdoCopyKeyFieldsToObjectId(java.lang.Obje > ct) > [java] JDO ENHANCER: adding: void > jdoCopyKeyFieldsFromObjectId(java.lang.Ob > ject) > [java] JDO ENHANCER: adding: void > jdoCopyKeyFieldsToObjectId(javax.jdo.spi. > PersistenceCapable$ObjectIdFieldSupplier, java.lang.Object) > [java] JDO ENHANCER: adding: void > jdoCopyKeyFieldsFromObjectId(javax.jdo.sp > i.PersistenceCapable$ObjectIdFieldConsumer, java.lang.Object) > [java] JDO ENHANCER: adding: int > jdoGetid(org.apache.ojb.tutorial5.Account) > > [java] JDO ENHANCER: adding: void > jdoSetid(org.apache.ojb.tutorial5.Account > , int) > [java] JDO ENHANCER: adding: java.lang.String > jdoGetname(org.apache.ojb.tut > orial5.Account) > [java] JDO ENHANCER: adding: void > jdoSetname(org.apache.ojb.tutorial5.Accou > nt, java.lang.String) > [java] JDO ENHANCER: adding: double > jdoGetprice(org.apache.ojb.tutorial5.Ac > count) > [java] JDO ENHANCER: adding: void > jdoSetprice(org.apache.ojb.tutorial5.Acco > unt, double) > [java] JDO ENHANCER: adding: int > jdoGetstock(org.apache.ojb.tutorial5.Accou > nt) > [java] JDO ENHANCER: adding: void > jdoSetstock(org.apache.ojb.tutorial5.Acco > unt, int) > [java] JDO ENHANCER: annotating class > org.apache.ojb.tutorial5.Account > [java] JDO ENHANCER: annotating: > org.apache.ojb.tutorial5.Account.getId() > [java] JDO ENHANCER: annotating: > org.apache.ojb.tutorial5.Account.getStock( > ) > [java] JDO ENHANCER: annotating: > org.apache.ojb.tutorial5.Account.<init>() > [java] JDO ENHANCER: annotating: > org.apache.ojb.tutorial5.Account.setId(int > ) > [java] JDO ENHANCER: annotating: > org.apache.ojb.tutorial5.Account.setPrice( > double) > [java] JDO ENHANCER: annotating: > org.apache.ojb.tutorial5.Account.toString( > ) > [java] JDO ENHANCER: annotating: > org.apache.ojb.tutorial5.Account.<init>(in > t, java.lang.String, double, int) > [java] JDO ENHANCER: annotating: > org.apache.ojb.tutorial5.Account.setName(j > ava.lang.String) > [java] JDO ENHANCER: annotating: > org.apache.ojb.tutorial5.Account.getName() > > [java] JDO ENHANCER: annotating: > org.apache.ojb.tutorial5.Account.setStock( > int) > [java] JDO ENHANCER: annotating: > org.apache.ojb.tutorial5.Account.getPrice( > ) > [java] JDO ENHANCER: writing enhanced class > org.apache.ojb.tutorial5.Accoun > t to output stream > > [java] JDO ENHANCER: Enhancer: classfile enhanced successfully. > [java] done. > > BUILD SUCCESSFUL > Total time: 35 seconds > > C:\sw\ojb-0.9.8>bin\tutorial5 > _ _ > __ (_)| |_ > / _\| || _ \ ~ be persistent ~ > \__/| ||___/ v. 0.9.8 > /_/ > > Welcome to the OJB JDO RI tutorial application > > > [0] List all Account entries > [1] Enter a new account > [2] Edit a Account entry > [3] Delete an account entry > [4] Quit Application > type in number to select a use case > 1 > please enter a new account > enter name: eric > enter price: 1 > enter available stock: 1 > [JDO] DEBUG: OjbStoreConnector.begin: connectionReadyForRelease=false > [org.apache.ojb.broker.ta.PersistenceBrokerFactoryDefaultImpl] > INFO: Create > Pers > istenceBroker instance pool, pool configuration was > {whenExhaustedAction=0, > maxI > dle=-1, maxActive=100, maxWait=2000, numTestsPerEvictionRun=10, > testWhileIdle=fa > lse, testOnReturn=false, timeBetweenEvictionRunsMillis=-1, > minEvictableIdleIimeM > illis=600000, testOnBorrow=false} > [org.apache.ojb.broker.util.sequence.SequenceManagerFactory] INFO: Use > sequence > manager class: class > org.apache.ojb.broker.util.sequence.SequenceManagerHiLoImpl > > [org.apache.ojb.broker.accesslayer.ConnectionFactoryPooledImpl > ] INFO: Create > con > nection pool for JdbcDescriptorKey 1863100339 > [org.apache.ojb.broker.accesslayer.ConnectionFactoryPooledImpl > ] INFO: Create > new > connection pool for > org.apache.ojb.broker.metadata.JdbcConnectionDescriptor, > used descriptor: JdbcConnectionDescriptor > DBMS:Hsqldb > DRIVER: org.hsqldb.jdbcDriver > PROTOCOL: jdbc > SUBPROTOCOL: hsqldb > DBALIAS: ../OJB > USERNAME: sa > PASSWORD: > EAGER RELEASE: false > pool configuration was: {whenExhaustedAction=0, maxIdle=-1, > maxActive=21, > maxWai > t=5000, numTestsPerEvictionRun=10, testWhileIdle=false, > testOnReturn=false, > time > BetweenEvictionRunsMillis=-1, minEvictableIdleIimeMillis=600000, > testOnBorrow=tr > ue} > [DEFAULT] ERROR: org.apache.ojb.tutorial5.Account not found in OJB > Repository > org.apache.ojb.broker.metadata.ClassNotPersistenceCapableException: > org.apache.o > jb.tutorial5.Account not found in OJB Repository > at > org.apache.ojb.broker.metadata.DescriptorRepository.getDescriptorFor( > DescriptorRepository.java:346) > at > org.apache.ojb.broker.metadata.DescriptorRepository.getDescriptorFor( > DescriptorRepository.java:334) > at > org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.getClassDescript > or(PersistenceBrokerImpl.java:2335) > at > org.apache.ojb.broker.singlevm.DelegatingPersistenceBroker.getClassDe > scriptor(DelegatingPersistenceBroker.java:214) > at org.apache.ojb.broker.Identity.<init>(Identity.java:186) > at > org.apache.ojb.jdori.sql.OjbStoreManager.createObjectId(OjbStoreManag > er.java:282) > at > com.sun.jdori.common.state.StateManagerImpl.initializeSM(Unknown > Sour > ce) > at > com.sun.jdori.common.state.StateManagerImpl.makePersistent(Unknown So > urce) > at > com.sun.jdori.common.CacheManagerImpl.makePersistent(Unknown > Source) > at > com.sun.jdori.common.PersistenceManagerImpl.makePersistentInternal(Un > known Source) > at > com.sun.jdori.common.PersistenceManagerImpl.makePersistent(Unknown So > urce) > at > com.sun.jdori.common.PersistenceManagerWrapper.makePersistent(Unknown > Source) > at > org.apache.ojb.tutorial5.UCEnterNewAccount.apply(UCEnterNewAccount.ja > va:46) > at > org.apache.ojb.tutorial5.Application.run(Application.java:110) > at > org.apache.ojb.tutorial5.Application.main(Application.java:78) > org.apache.ojb.tutorial5.Account not found in OJB Repository: > org.apache.ojb.tut > orial5.Account not found in OJB Repository > > [0] List all Account entries > [1] Enter a new account > [2] Edit a Account entry > [3] Delete an account entry > [4] Quit Application > type in number to select a use case > 1 > please enter a new account > enter name: joe > enter price: 1 > enter available stock: 1 > [JDO] DEBUG: OjbStoreConnector.begin: connectionReadyForRelease=false > [DEFAULT] ERROR: org.apache.ojb.tutorial5.Account not found in OJB > Repository > org.apache.ojb.broker.metadata.ClassNotPersistenceCapableException: > org.apache.o > jb.tutorial5.Account not found in OJB Repository > at > org.apache.ojb.broker.metadata.DescriptorRepository.getDescriptorFor( > DescriptorRepository.java:346) > at > org.apache.ojb.broker.metadata.DescriptorRepository.getDescriptorFor( > DescriptorRepository.java:334) > at > org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.getClassDescript > or(PersistenceBrokerImpl.java:2335) > at > org.apache.ojb.broker.singlevm.DelegatingPersistenceBroker.getClassDe > scriptor(DelegatingPersistenceBroker.java:214) > at org.apache.ojb.broker.Identity.<init>(Identity.java:186) > at > org.apache.ojb.jdori.sql.OjbStoreManager.createObjectId(OjbStoreManag > er.java:282) > at > com.sun.jdori.common.state.StateManagerImpl.initializeSM(Unknown > Sour > ce) > at > com.sun.jdori.common.state.StateManagerImpl.makePersistent(Unknown So > urce) > at > com.sun.jdori.common.CacheManagerImpl.makePersistent(Unknown > Source) > at > com.sun.jdori.common.PersistenceManagerImpl.makePersistentInternal(Un > known Source) > at > com.sun.jdori.common.PersistenceManagerImpl.makePersistent(Unknown So > urce) > at > com.sun.jdori.common.PersistenceManagerWrapper.makePersistent(Unknown > Source) > at > org.apache.ojb.tutorial5.UCEnterNewAccount.apply(UCEnterNewAccount.ja > va:46) > at > org.apache.ojb.tutorial5.Application.run(Application.java:110) > at > org.apache.ojb.tutorial5.Application.main(Application.java:78) > org.apache.ojb.tutorial5.Account not found in OJB Repository: > org.apache.ojb.tut > orial5.Account not found in OJB Repository > > [0] List all Account entries > [1] Enter a new account > [2] Edit a Account entry > [3] Delete an account entry > [4] Quit Application > type in number to select a use case > 0 > The list of available accounts: > [JDO] DEBUG: OjbStoreConnector.begin: connectionReadyForRelease=false > org.apache.ojb.broker.metadata.ClassNotPersistenceCapableException: > org.apache.o > jb.tutorial5.Account not found in OJB Repository > at > org.apache.ojb.broker.metadata.DescriptorRepository.getDescriptorFor( > DescriptorRepository.java:346) > at > org.apache.ojb.broker.metadata.DescriptorRepository.getDescriptorFor( > DescriptorRepository.java:334) > at > org.apache.ojb.broker.query.QueryFactory.newQuery(QueryFactory.java:1 > 15) > at > org.apache.ojb.broker.query.QueryFactory.newQuery(QueryFactory.java:1 > 27) > at > org.apache.ojb.jdori.sql.OjbExtent.<init>(OjbExtent.java:84) > at > org.apache.ojb.jdori.sql.OjbStoreManager.getExtent(OjbStoreManager.ja > va:271) > 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 > org.apache.ojb.tutorial5.UCListAllAccounts.apply(UCListAllAccounts.ja > va:45) > at > org.apache.ojb.tutorial5.Application.run(Application.java:110) > at > org.apache.ojb.tutorial5.Application.main(Application.java:78) > Cannot close PersistenceManager while transaction is still active. > > [0] List all Account entries > [1] Enter a new account > [2] Edit a Account entry > [3] Delete an account entry > [4] Quit Application > type in number to select a use case > > -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
