I'm trying to use OJB API, and especially Object Persistance, but it
doesn't work.
I can build without any errors, the database schema is properly
generated and executed on the RDBMS (MySQL).
I've tried with default configuration files provided in ojb-blank, thus using embedded
database, and I get exactly the same results.
When I try to use PersistanceBroker, I've got two problems :
-- I get an error because there's no default PBKey when I try to get the
default Broker :
broker = PersistenceBrokerFactory.defaultPersistenceBroker()
results in :
Exception in thread "main" org.apache.ojb.broker.PBFactoryException:
There was no default-PBKey specified
at
org.apache.ojb.broker.core.PersistenceBrokerFactoryBaseImpl.defaultPersistenceBroker(PersistenceBrokerFactoryBaseImpl.java:157)
at
org.apache.ojb.broker.PersistenceBrokerFactory.defaultPersistenceBroker(PersistenceBrokerFactory.java:65)
at PBSample.storeProduct(PBSample.java:19)
at Application.run(Application.java:37)
at Application.main(Application.java:28)
-- When I try to use a specific PBKey created by hand :
initially PersistenceBrokerFactory.getDefaultKey() returns null
PBKey pbk = new PBKey("localmysql","root","");
broker = PersistenceBrokerFactory.createPersistenceBroker(pbk);
results in :
Exception in thread "main" org.apache.ojb.broker.PBFactoryException:
Borrow broker from pool failed, using PBKey org.apache.ojb.broker.PBKey:
jcdAlias=localmysql, user=root, password=*****
at
org.apache.ojb.broker.core.PersistenceBrokerFactoryDefaultImpl.createPersistenceBroker(PersistenceBrokerFactoryDefaultImpl.java:119)
at
org.apache.ojb.broker.PersistenceBrokerFactory.createPersistenceBroker(PersistenceBrokerFactory.java:86)
at PBSample.storeProduct(PBSample.java:25)
at Application.run(Application.java:37)
at Application.main(Application.java:28)
Caused by: org.apache.ojb.broker.PBFactoryException: Given PBKey
org.apache.ojb.broker.PBKey: jcdAlias=default, user=root, password=*****
does not match in metadata configuration
at
org.apache.ojb.broker.core.PersistenceBrokerFactoryBaseImpl.createNewBrokerInstance(PersistenceBrokerFactoryBaseImpl.java:87)
at
org.apache.ojb.broker.core.PersistenceBrokerFactoryDefaultImpl$PBKeyedPoolableObjectFactory.makeObject(PersistenceBrokerFactoryDefaultImpl.java:238)
at
org.apache.commons.pool.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:792)
at
org.apache.ojb.broker.core.PersistenceBrokerFactoryDefaultImpl.createPersistenceBroker(PersistenceBrokerFactoryDefaultImpl.java:100)
... 4 more
However, the repository_database.xml file (in build/ressources), seems
to be well configurated, here is the file :
jdbc-connection-descriptor
jcd-alias="localmysql"
default-connection="true"
platform="MySQL"
jdbc-level="3.0"
driver="com.mysql.jdbc.Driver"
protocol="jdbc"
subprotocol="mysql"
dbalias="//localhost/proj1"
username="root"
password=""
batch-mode="false"
useAutoCommit="1"
ignoreAutoCommitExceptions="false"
>
<object-cache
class="org.apache.ojb.broker.cache.ObjectCacheDefaultImpl">
<attribute attribute-name="timeout" attribute-value="900"/>
<attribute attribute-name="autoSync" attribute-value="true"/>
<attribute attribute-name="cachingKeyType" attribute-value="0"/>
</object-cache>
<connection-pool
maxActive="21"
validationQuery="@VALIDATION_QUERY@"
testOnBorrow="@TEST_ON_BORROW@"
testOnReturn="@TEST_ON_RETURN@"
/>
<sequence-manager
className="org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl">
<attribute attribute-name="grabSize" attribute-value="20"/>
<attribute attribute-name="autoNaming" attribute-value="true"/>
<attribute attribute-name="globalSequenceId"
attribute-value="false"/>
<attribute attribute-name="globalSequenceStart"
attribute-value="10000"/>
</sequence-manager>
</jdbc-connection-descriptor>
<!-- Datasource example -->
<!-- jdbc-connection-descriptor
jcd-alias="default"
platform="Hsqldb"
jdbc-level="2.0"
jndi-datasource-name="java:DefaultDS"
username="sa"
password=""
eager-release="false"
batch-mode="false"
useAutoCommit="0"
ignoreAutoCommitExceptions="false"
>
<sequence-manager
className="org.apache.ojb.broker.util.sequence.SequenceManagerNextValImpl">
<attribute attribute-name="autoNaming" attribute-value="true"/>
</sequence-manager>
</jdbc-connection-descriptor -->