Graham --
Out of the box, ojb doesn't support using stored procedures. However, Thomas has
already incoporated some enhancements to the repository dtd and the repository
handlers that allow me to use oracle packages/procedures to perform all inserts,
updates and deletes. These enhancemnets allow me to add 'custom attributes' to the
class-descriptor and field-descriptor elements. At the class-descriptor level, these
attributes allow me to indicate what package/procedure should be used to do an insert,
update or delete. At the field-descriptor level, these custom attributes allow me to
know which fields will be returned to me by the procedure when we do an insert or an
update. I'm not using packages/procedures for any selects. These are still handled by
ojb, without modification. Here's a scaled down example of one of our
class-descriptors:
<class-descriptor class="..." table="CONTRACT">
<field-descriptor column="CONTRACT_ID"...>
<attribute attribute-name="return-on-insert" attribute-value="true"/>
</field-descriptor>
<field-descriptor column="DATE_CREATED" ...>
<attribute attribute-name="return-on-insert" attribute-value="true"/>
</field-descriptor>
<field-descriptor column="DATE_UPDATED" ...>
<attribute attribute-name="return-on-insert" attribute-value="true"/>
<attribute attribute-name="return-on-update" attribute-value="true"/>
</field-descriptor>
<attribute attribute-name="insert-proc" attribute-value="CONTRACT_PKG.ADD"/>
<attribute attribute-name="update-proc" attribute-value="CONTRACT_PKG.CHANGE"/>
<attribute attribute-name="delete-proc" attribute-value="CONTRACT_PKG.DELETE"/>
</class-descriptor>
In order to use these attributes, I had to extend some of the ojb classes. The key
extensions were to the SqlGenerator, StatementsForClassImpl, StatementManager,
JdbcAccess and PersistenceBrokerImpl classes.
* SqlGenerator was extended to utilize some custom statement generators, replacements
for SqlInsertStatement, SqlUpdateStatement and SqlDeleteByPkStatement.
* StatementsForClassImpl was extended so that it could create CallableStatements,
rather than PreparedStatements.
* StatementManager was extended for two reasons: (1) so that it would utilize my
extension to StatementsForClassImpl and (2) so that it could register output
parameters on the CallableStatements that were created by my extension to
StatementsForClassImpl.
* JdbcAccess was extended so that whenever insert or update statements were executed,
we could 'harvest' the output parameters that were returned by the package/stored
procedure.
* PersistenceBrokerImpl was extended in order for it to utilize my extensions to
JdbcAccess and StatementManager.
Suporting all of this behind the scenes is an oracle package that provides the actual
insert, update and delete mechanics. During the insert process, this package assigns
the id value (contract_id) via an oracle sequence and returns the assigned value to
the caller (ojb). The date created/updated are assigned the current system date and
also returned to the caller during an insert. During an update operation, the package
updates the 'date updated' and returns that to the caller.
I believe Thomas is in the process of implementing some additional pluggable
components that will make the process I've gone through a little easier. Once those
enhancements are complete, I'll rework my extensions to utilize them. Once that's
complete, I'll work with Thomas on getting my extensions posted to the contributions
area.
HTH
Ron Gallagher
Atlanta, GA
[EMAIL PROTECTED]
>
> From: "Graham Lounder" <[EMAIL PROTECTED]>
> Date: 2002/10/11 Fri AM 10:41:21 EDT
> To: "OJB Users List" <[EMAIL PROTECTED]>
> Subject: Can OJB use stored procedures?
>
> Hi all,
>
> Simple question, does OJB 0.9.7 support stored procedures? I know Thomas
> answered a similar question back in July. At that time, there was no
> support for this with the exception of using QueryBySQL. Has this fact
> changed with the latest release?
>
> Thanks in advance,
> Graham
>
> ============================================
> Graham Lounder
> Java Developer
> Spatial Components Division
> CARIS
> 264 Rookwood Ave
> Fredericton NB E3B-2M2
> Office 506 462-4263
> Fax 506 459-3849
> [EMAIL PROTECTED]
> http://www.spatialcomponents.com
> ============================================
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>