Hi Dmitry,

I don't know what's going wrong when running the tutorial (seems that Product.class was correctly enhanced by the JDO enhancer). But I wouldn't recommend OJB's JDO 1.0-api implementation for production environments.
The PB-api and ODMG-api are stable and ready for production use
http://db.apache.org/ojb/status.html

If you want to use JDO, please have a look at JPOX or Speedo (or other projects)
http://www.jpox.org/index.jsp
http://speedo.objectweb.org/

regards,
Armin

Dmitry Litvintsev wrote:

Hi, I am developing a java application and I am considering OJB technology to store objects' states seamlessly in the PostgreSQL database. In short I am failing to get tutorial5 up and running. I followed instructions on this link:

        http://db.apache.org/ojb/docu/tutorials/jdo-tutorial.html

My actions:

        1) downloaded ojb-blank.jar
        2) downloaded tutorial5-src.jar
        3) downloaded db-ojb-1.0.4.jar
        4) downloaded jdo.jar,jdori-enhancer.jar,jdori.jar (jdo 1.0.1 RI)
5) downloaded PostgreSQL drivers pg74.216.jdbc3.jar postgresql-8.1-405.jdbc3.jar
my top directory is "ojb-blank"
I put *jar files into lib (ojb-blank/lib)
I put tutorial5 sources to (ojb_blank/src/java/org/apache/ojb/tutorial5)

I modified buid.properties, so it looks like this:

        jcdAlias=default
        databaseName=ojb
        databaseUser=postgres
        databasePassword=

        dbmsName=PostgreSQL
        jdbcLevel=3.0
        jdbcRuntimeDriver=org.postgresql.Driver
        urlProtocol=jdbc
        urlSubprotocol=postgresql
        urlDbalias=//localhost/${databaseName}

        torque.database=postgresql
        torque.database.createUrl=${urlProtocol}:${urlSubprotocol}:${urlDbalias}

        jar.name=my-project.jar

        source.dir=src
        source.java.dir=${source.dir}/java
        source.resource.dir=${source.dir}/resources
        source.test.dir=${source.dir}/test
        source.schema.dir=${source.dir}/schema

        build.dir=build
        lib.dir=lib

        target.dir=target

I do not recall changing build.xml.

1) DB setup

        ant build setup-db

runs w/ errors, but it creates *.sql files which I run byu hand and next time around
        ant build setup-db

        runs w/o errors. So I consider it is a success:
        $ psql ojb
        Welcome to psql 8.0.3, the PostgreSQL interactive terminal.
        
        Type:  \copyright for distribution terms
               \h for help with SQL commands
               \? for help with psql commands
               \g or terminate with semicolon to execute query
               \q to quit
        
        ojb=# \d
                       List of relations
         Schema |       Name        | Type  |  Owner
        --------+-------------------+-------+----------
         public | ojb_dlist         | table | postgres
         public | ojb_dlist_entries | table | postgres
         public | ojb_dmap          | table | postgres
         public | ojb_dmap_entries  | table | postgres
         public | ojb_dset          | table | postgres
         public | ojb_dset_entries  | table | postgres
         public | ojb_hl_seq        | table | postgres
         public | ojb_nrm           | table | postgres
         public | product           | table | postgres
        (9 rows)

2) ant build

        $ ant build
        Buildfile: build.xml

        compile:
            [mkdir] Created dir: /data/postgres/ojb/ojb-blank/build
            [mkdir] Created dir: /data/postgres/ojb/ojb-blank/build/classes
            [javac] Compiling 9 source files to 
/data/postgres/ojb/ojb-blank/build/classes

        xdoclet:
        [ojbdoclet] 2006-04-18 18:33:08,102 [main] INFO  xdoclet.XDocletMain.start - 
Running <ojbrepository/>
        [ojbdoclet] Generating ojb repository descriptor 
(build/repository_user.xml)
        [ojbdoclet] Type org.apache.ojb.tutorial5.Product
        [ojbdoclet] Processed 1 types
        [ojbdoclet] Processed 1 types
        [ojbdoclet] 2006-04-18 18:33:08,493 [main] INFO  xdoclet.XDocletMain.start - 
Running <torqueschema/>
        [ojbdoclet] Generating torque schema (build/database/project-schema.xml)
        [ojbdoclet] Processed 1 types

        build:
             [copy] Copying 7 files to /data/postgres/ojb/ojb-blank/build
            [mkdir] Created dir: /data/postgres/ojb/ojb-blank/build/lib
             [copy] Copying 41 files to /data/postgres/ojb/ojb-blank/build/lib

        build_if_with_mainclass:
             [copy] Copying 2 files to /data/postgres/ojb/ojb-blank/build

        BUILD SUCCESSFUL
        Total time: 3 seconds

so I am encouraged , I proceed to the next step:

3) ant enhance-jdori

        $ ant enhance-jdori

Buildfile: build.xml

compile:

xdoclet:
[ojbdoclet] 2006-04-18 18:34:35,546 [main] INFO  xdoclet.XDocletMain.start - Running 
<ojbrepository/>
[ojbdoclet] 2006-04-18 18:34:36,128 [main] INFO  xdoclet.XDocletMain.start - Running 
<torqueschema/>

build:

build_if_with_mainclass:

enhance-jdori:
     [java] Enhancer: options:
     [java]     verbose = true
     [java]     quiet = false
     [java]     forceWrite = true
     [java]     noWrite = false
     [java]     sourcePath = null
     [java]     destinationDirectory = build/classes
     [java]     propertiesFileName = null
     [java]     doTiming = false
     [java]     classNames = {
     [java]     }
     [java]     jdoFileNames = {
     [java]         src/java/org/apache/ojb/tutorial5/Product.jdo
     [java]     }
     [java]     classFileNames = {
     [java]         build/classes/org/apache/ojb/tutorial5/Product.class
     [java]     }
     [java]     zipFileNames = {
     [java]     }
     [java]     dumpClass = false
     [java]     noAugment = false
     [java]     noAnnotate = false
     [java] JDO ENHANCER: using file: 
file:/data/postgres/ojb/ojb-blank/build/classes/org/apache/ojb/tutorial5/Product.class
     [java] Class Locator: using class files: {
     [java]     build/classes/org/apache/ojb/tutorial5/Product.class
     [java] }
     [java] JDO ENHANCER: using file: 
file:/data/postgres/ojb/ojb-blank/src/java/org/apache/ojb/tutorial5/Product.jdo
[java] ---------------------------------------------------------------------------

     [java] JDO ENHANCER: Enhancer: enhancing classfile ...
     [java] JDO ENHANCER: scanning class org.apache.ojb.tutorial5.Product
     [java] JDO ENHANCER: not found resource: META-INF/package.jdo
     [java] JDO ENHANCER: not found resource: WEB-INF/package.jdo
     [java] JDO ENHANCER: not found resource: package.jdo
     [java] JDO ENHANCER: not found resource: org/package.jdo
     [java] JDO ENHANCER: not found resource: org/apache/package.jdo
     [java] JDO ENHANCER: not found resource: org/apache/ojb/package.jdo
     [java] JDO ENHANCER: not found resource: 
org/apache/ojb/tutorial5/package.jdo
     [java] JDO ENHANCER: found resource: org/apache/ojb/tutorial5/Product.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 writeReplace 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.Product
     [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 
jdoGetPersistenceManager()
     [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.StateManager)
     [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: implements javax.jdo.spi.PersistenceCapable
     [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 
jdoPersistenceCapableSuperclass
     [java] JDO ENHANCER: adding: int jdoGetManagedFieldCount()
     [java] JDO ENHANCER: adding: void <clinit>()
     [java] JDO ENHANCER: adding: javax.jdo.spi.PersistenceCapable 
jdoNewInstance(javax.jdo.spi.StateManager)
     [java] JDO ENHANCER: adding: javax.jdo.spi.PersistenceCapable 
jdoNewInstance(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.Product, 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.lang.String)
     [java] JDO ENHANCER: adding: void 
jdoCopyKeyFieldsToObjectId(java.lang.Object)
     [java] JDO ENHANCER: adding: void 
jdoCopyKeyFieldsFromObjectId(java.lang.Object)
     [java] JDO ENHANCER: adding: void 
jdoCopyKeyFieldsToObjectId(javax.jdo.spi.PersistenceCapable$ObjectIdFieldSupplier,
 java.lang.Object)
     [java] JDO ENHANCER: adding: void 
jdoCopyKeyFieldsFromObjectId(javax.jdo.spi.PersistenceCapable$ObjectIdFieldConsumer,
 java.lang.Object)
     [java] JDO ENHANCER: adding: java.lang.Integer 
jdoGetid(org.apache.ojb.tutorial5.Product)
     [java] JDO ENHANCER: adding: void 
jdoSetid(org.apache.ojb.tutorial5.Product, java.lang.Integer)
     [java] JDO ENHANCER: adding: java.lang.String 
jdoGetname(org.apache.ojb.tutorial5.Product)
     [java] JDO ENHANCER: adding: void 
jdoSetname(org.apache.ojb.tutorial5.Product, java.lang.String)
     [java] JDO ENHANCER: adding: double 
jdoGetprice(org.apache.ojb.tutorial5.Product)
     [java] JDO ENHANCER: adding: void 
jdoSetprice(org.apache.ojb.tutorial5.Product, double)
     [java] JDO ENHANCER: adding: int 
jdoGetstock(org.apache.ojb.tutorial5.Product)
     [java] JDO ENHANCER: adding: void 
jdoSetstock(org.apache.ojb.tutorial5.Product, int)
     [java] JDO ENHANCER: adding: void writeObject(java.io.ObjectOutputStream)
     [java] JDO ENHANCER: annotating class org.apache.ojb.tutorial5.Product
     [java] JDO ENHANCER: annotating: org.apache.ojb.tutorial5.Product.getId()
     [java] JDO ENHANCER: annotating: 
org.apache.ojb.tutorial5.Product.setName(java.lang.String)
     [java] JDO ENHANCER: annotating: org.apache.ojb.tutorial5.Product.<init>()
     [java] JDO ENHANCER: annotating: 
org.apache.ojb.tutorial5.Product.getPrice()
     [java] JDO ENHANCER: annotating: 
org.apache.ojb.tutorial5.Product.setPrice(double)
     [java] JDO ENHANCER: annotating: 
org.apache.ojb.tutorial5.Product.setStock(int)
     [java] JDO ENHANCER: annotating: 
org.apache.ojb.tutorial5.Product.toString()
     [java] JDO ENHANCER: annotating: 
org.apache.ojb.tutorial5.Product.getStock()
     [java] JDO ENHANCER: annotating: org.apache.ojb.tutorial5.Product.getName()
     [java] JDO ENHANCER: annotating: 
org.apache.ojb.tutorial5.Product.setId(int)
     [java] JDO ENHANCER: writing enhanced class 
org.apache.ojb.tutorial5.Product to output stream

     [java] JDO ENHANCER: Enhancer: classfile enhanced successfully.
     [java] done.

BUILD SUCCESSFUL
Total time: 6 seconds

So I am extatic. I do:

4) cd build
   chmod +x run.sh
   ./run.sh
bash: ./run.sh: Permission denied
[EMAIL PROTECTED] build]$ chmod +x run.sh
[EMAIL PROTECTED] build]$ ./run.sh
     _  _
 __ (_)| |_
/ _\| || _ \  ~ be persistent ~
\__/| ||___/    v. 1.0.4
   /_/

Welcome to the OJB JDO RI tutorial application


[0] List all product entries
[1] Enter a new product
[2] Edit a product entry
[3] Delete a product entry
[4] Quit Application
type in number to select a use case
1
please enter a new product
enter name: casio
enter price: 10
enter available stock: 10
0     INFO  [main] BOOT - -- boot log messages -->

21    DEBUG [main] JDO - OjbStoreConnector.begin: 
connectionReadyForRelease=false
41    DEBUG [main] BOOT - Instantiate PersistenceBrokerFactory
64    INFO  [main] BOOT - Loading OJB's properties: 
file:/data/postgres/ojb/ojb-blank/build/OJB.properties
89    DEBUG [main] BOOT - No value for key "ObjectCacheClass", using default 
org.apache.ojb.broker.cache.ObjectCacheDefaultImpl.
144   DEBUG [main] BOOT - Using logger class 'class 
org.apache.ojb.broker.util.logging.Log4jLoggerImpl' for 
org.apache.ojb.broker.core.proxy.AbstractProxyFactory
144   DEBUG [main] BOOT - Initializing logger instance 
org.apache.ojb.broker.core.proxy.AbstractProxyFactory
180   DEBUG [main] BOOT - Using logger class 'class 
org.apache.ojb.broker.util.logging.Log4jLoggerImpl' for 
org.apache.ojb.broker.core.PersistenceBrokerFactoryBaseImpl1
180   DEBUG [main] BOOT - Initializing logger instance 
org.apache.ojb.broker.core.PersistenceBrokerFactoryBaseImpl
180   DEBUG [main] BOOT - Using logger class 'class 
org.apache.ojb.broker.util.logging.Log4jLoggerImpl' for 
org.apache.ojb.broker.core.PersistenceBrokerFactoryDefaultImpl
181   DEBUG [main] BOOT - Initializing logger instance 
org.apache.ojb.broker.core.PersistenceBrokerFactoryDefaultImpl
218   DEBUG [main] core.PersistenceBrokerFactoryDefaultImpl - PersistenceBroker 
pool will be setup with the following configuration [EMAIL PROTECTED]
  maxIdle=-1
  maxActive=100
  maxTotal=-1
  maxWait=2000
  whenExhaustedAction=0
  testOnBorrow=false
  testOnReturn=false
  testWhileIdle=false
  timeBetweenEvictionRunsMillis=-1
  numTestsPerEvictionRun=10
  minEvictableIdleTimeMillis=1000000
]
253 INFO [main] core.PersistenceBrokerFactoryDefaultImpl - Create PersistenceBroker instance pool, pool configuration was {whenExhaustedAction=0, maxIdle=-1, maxActive=100, maxWait=2000, removeAbandoned=false, numTestsPerEvictionRun=10, minEvictableIdleTimeMillis=1000000, testWhileIdle=false, testOnReturn=false, logAbandoned=false, minIdle=0, removeAbandonedTimeout=300, timeBetweenEvictionRunsMillis=-1, testOnBorrow=false}
253   INFO  [main] BOOT - PersistencebrokerFactory class instantiated: [EMAIL 
PROTECTED]
274   DEBUG [main] BOOT - Using logger class 'class 
org.apache.ojb.broker.util.logging.Log4jLoggerImpl' for 
org.apache.ojb.broker.metadata.MetadataManager
275   DEBUG [main] BOOT - Initializing logger instance 
org.apache.ojb.broker.metadata.MetadataManager
303   DEBUG [main] BOOT - Using logger class 'class 
org.apache.ojb.broker.util.logging.Log4jLoggerImpl' for 
org.apache.ojb.broker.metadata.RepositoryPersistor
303   DEBUG [main] BOOT - Initializing logger instance 
org.apache.ojb.broker.metadata.RepositoryPersistor
326   INFO  [main] metadata.RepositoryPersistor - OJB Descriptor Repository: 
file:/data/postgres/ojb/ojb-blank/build/repository.xml
326   INFO  [main] metadata.RepositoryPersistor - Building repository from 
:file:/data/postgres/ojb/ojb-blank/build/repository.xml
370   INFO  [main] metadata.RepositoryPersistor - RepositoryPersistor using 
SAXParserFactory : org.apache.xerces.jaxp.SAXParserFactoryImpl
575   DEBUG [main] BOOT - Using logger class 'class 
org.apache.ojb.broker.util.logging.Log4jLoggerImpl' for 
org.apache.ojb.broker.metadata.DescriptorRepository
575   DEBUG [main] BOOT - Initializing logger instance 
org.apache.ojb.broker.metadata.DescriptorRepository
611   DEBUG [main] BOOT - Using logger class 'class 
org.apache.ojb.broker.util.logging.Log4jLoggerImpl' for 
org.apache.ojb.broker.metadata.RepositoryXmlHandler
611   DEBUG [main] BOOT - Initializing logger instance 
org.apache.ojb.broker.metadata.RepositoryXmlHandler

<SNIP> .... <SNIP> ot tons of debugging stuff

4240 INFO [main] accesslayer.ConnectionFactoryPooledImpl - Create new connection pool:[EMAIL PROTECTED]
  jcd-alias=default
  default-connection=true
  dbms=PostgreSQL
  jdbc-level=3.0
  driver=org.postgresql.Driver
  protocol=jdbc
  sub-protocol=postgresql
  db-alias=//localhost/ojb
  user=postgres
  password=*****
  eager-release=false
ConnectionPoolDescriptor={whenExhaustedAction=0, maxIdle=-1, maxActive=30, maxWait=10000, removeAbandoned=false, numTestsPerEvictionRun=10, minEvictableIdleTimeMillis=600000, testWhileIdle=false, testOnReturn=false, logAbandoned=false, minIdle=0, fetchSize=0, removeAbandonedTimeout=300, timeBetweenEvictionRunsMillis=-1, testOnBorrow=true}
  batchMode=false
  useAutoCommit=AUTO_COMMIT_SET_TRUE_AND_TEMPORARY_FALSE
  ignoreAutoCommitExceptions=false
[EMAIL PROTECTED] sequenceManagerClass=class org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl
     Properties={autoNaming=true, seq.start=200000, grabSize=20}
]
]
4241  DEBUG [main] accesslayer.ConnectionFactoryPooledImpl - createPool was 
called
4270  DEBUG [main] accesslayer.ConnectionFactoryPooledImpl - makeObject called
4368  DEBUG [main] accesslayer.ConnectionFactoryAbstractImpl - Create new 
connection using DriverManager: [EMAIL PROTECTED]
4370  DEBUG [main] accesslayer.ConnectionManagerImpl - Request new connection 
from ConnectionFactory: [EMAIL PROTECTED]
4390  DEBUG [main] accesslayer.ConnectionManagerImpl - localBegin was called 
for con [EMAIL PROTECTED]
4391  DEBUG [main] accesslayer.ConnectionManagerImpl - Try to change autoCommit 
state to 'false'
Missing JDO metadata for enhanced class 'org.apache.ojb.tutorial5.Product'.
com.sun.jdori.model.ModelFatalException: Missing JDO metadata for enhanced 
class 'org.apache.ojb.tutorial5.Product'.
        at 
com.sun.jdori.common.model.jdo.JDOModelImpl.lookupXMLMetadata(Unknown Source)
        at com.sun.jdori.common.model.jdo.JDOModelImpl.getJDOClass(Unknown 
Source)
        at com.sun.jdori.common.model.jdo.JDOModelImpl.getJDOClass(Unknown 
Source)
        at 
com.sun.jdori.common.model.runtime.RuntimeJavaType.getJDOClass(Unknown Source)
        at com.sun.jdori.common.state.StateManagerImpl.initializePC(Unknown 
Source)
        at com.sun.jdori.common.state.StateManagerImpl.<init>(Unknown Source)
        at com.sun.jdori.common.state.StateManagerFactory.newInstance(Unknown 
Source)
        at com.sun.jdori.common.CacheManagerImpl.makePersistent(Unknown Source)
        at 
com.sun.jdori.common.PersistenceManagerImpl.makePersistentInternal(Unknown 
Source)
        at com.sun.jdori.common.PersistenceManagerImpl.makePersistent(Unknown 
Source)
        at 
com.sun.jdori.common.PersistenceManagerWrapper.makePersistent(Unknown Source)
        at org.apache.ojb.tutorial5.UCEnterNewProduct.apply(Unknown Source)
        at org.apache.ojb.tutorial5.Application.run(Unknown Source)
        at org.apache.ojb.tutorial5.Application.main(Unknown Source)


        
So You can see I am failing with "Missing JDO metadata for enhanced class 'org.apache.ojb.tutorial5.Product'"!

I would greatly appreciate yuor taking time looking into my problem and hinting on what am I doing wrong! I have been stuck on this for a couple of days and, I think, I exhausted my limited aresenal of knowldege.

additional info:

- I am running on FedoreCore 3 - I am running postgres 8.0.3
        - I use j2sdk1.4.2_09


        

best regards,
Dmitri Litvintsev



---------------------------------------------------------------------
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]

Reply via email to