Author: arminw
Date: Thu Aug 2 08:51:54 2007
New Revision: 562151
URL: http://svn.apache.org/viewvc?view=rev&rev=562151
Log:
update docs
Modified:
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/basic-technique.xml
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/odmg-guide.xml
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/pb-guide.xml
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/repository.xml
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/tutorials/pb-tutorial.xml
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/site.xml
Modified:
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/basic-technique.xml
URL:
http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/basic-technique.xml?view=diff&rev=562151&r1=562150&r2=562151
==============================================================================
---
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/basic-technique.xml
(original)
+++
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/basic-technique.xml
Thu Aug 2 08:51:54 2007
@@ -1297,121 +1297,206 @@
<anchor id="using-proxy"/>
<section>
- <title>Using Proxy Classes</title>
+ <title>Lazy Loading via Proxy Classes</title>
<p>
Proxy classes can be used for "lazy loading" aka
"lazy
materialization". Using Proxy classes can help you in
reducing
unneccessary database lookups.
<br/>
- There are two kind of proxy mechanisms available:
+ There are three kind of proxy mechanisms available:
</p>
<ol>
<li>
- <strong>Dynamic proxies</strong> provided by OJB.
- They can simply be activated by setting certain switches
in repository.xml.
- This is the solution recommemded for
- <strong>most</strong> cases.
+ <strong>Dynamic proxies</strong> provided by OJB and
external libraries.
+ They can simply be activated by setting certain switches in
+ <a href="site:repository">repository file</a>. Replaces a
persistent object by
+ a proxy object.
</li>
<li>
<strong>User defined proxies</strong>. User defined
proxies allow the user to write
- proxy implementations.
+ proxy implementations. Replaces a persistent object by
+ a proxy object.
+ </li>
+ <li>
+ <strong>Proxy references</strong>. Replacement of
referenced objects (1:1, 1:n, m:n)
+ by a proxy placeholder. Replaces a whole reference by a
proxy object.
</li>
</ol>
<p>
- As it is important to understand the mechanics of the proxy
mechanism
- I highly recommend to read this section before turning to the
next sections
- "using dynamic proxies", "using a single proxy for a whole
collection" and
- "using a proxy for a reference", covering dynamic proxies.
- </p>
- <p>
- As a simple example we take a ProductGroup object
+ As a simple example we take a <code>ProductGroup</code> object
<code>pg</code> which contains a collection
- of fifteen Article objects. Now we examine what happens when
the ProductGroup is loaded
- from the database:
- </p>
- <p>
- Without using proxies all fifteen associated Article objects
are
- immediately loaded from the db, even if you are not interested
in
- them and just want to lookup the description-attribute of the
- ProductGroup object.
- </p>
- <p>
- If proxies are used, the collection is filled with fifteen
proxy
- objects, that implement the same interface as the "real
objects"
- but contain only an OID and a void reference. The fifteen
article objects
- are not instantiated when the ProductGroup is initially
materialized. Only
- when a method is invoked on such a proxy
- object will it load its "real subject" and delegate
the
- method call to it. Using this dynamic delegation mechanism
- instantiation of persistent objects and database lookups can be
- minimized.
- </p>
- <p>
- To use proxies, the persistent class in question (in our case
the
- Article class) must implement an interface (for example
- InterfaceArticle). This interface is needed to allow
replacement of
- the proper Article object with a proxy implementing the same
- interface. Have a look at the code:
+ of fifteen <code>Article</code> objects. Now we examine what
happens when the
+ <code>ProductGroup</code> is loaded from the database:
</p>
+ <ul>
+ <li>
+ <p>
+ <em>Without using proxies</em> - all fifteen
associated Article objects are
+ immediately loaded from the db, even if you are not
interested in
+ them and just want to lookup the description-attribute
of the
+ ProductGroup object.
+ </p>
+ </li>
+ <li>
+ <p>
+ <em>Use proxies for the referenced objects</em> - the
collection is filled
+ with fifteen proxy objects, that contain only an OID
and a void reference.
+ The fifteen <code>Article</code> objects are not
instantiated when the
+ <code>ProductGroup</code> is initially materialized.
+ <br/>
+ Only when a method is invoked on such a proxy
+ object will it load its "real subject" and
delegate the
+ method call to it. Using this dynamic delegation
mechanism
+ instantiation of persistent objects and database
lookups can be
+ minimized.
+ </p>
+ </li>
+ <li>
+ <p>
+ <em>Replace the reference by a proxy object</em> - the
whole collection
+ (1:n and m:n references) or single reference (1:1) is
replaced by a single
+ proxy object and fully materialized on the first
reference access.
+ <br/>
+ This is the recommended way (in most cases) to realize
lazy
+ loading for references (1:1, 1:n and m:n).
+ </p>
+ </li>
+ </ul>
+
+ <note>
+ In most cases the best performance results in using
+ <a href="#reference-proxy">a proxy for referenced objects</a>.
+ <br/>
+ Only in specific cases the use
+ of proxies for persistence capable classes (<a
href="#dynamic-proxy">dynamic</a> or
+ <a href="#user-defined-proxy">user defined</a> proxies) are
useful.
+ </note>
+
+ <anchor id="dynamic-proxy"/>
+ <section>
+ <title>Dynamic Proxies for persistence capable objects</title>
+ <p>
+ The implementation of a proxy class is a boring task that
repeats
+ the same delegation scheme for each new class. To liberate
the
+ developer from this unproductive job OJB provides a
dynamic proxy
+ solution based on the JDK 1.3 dynamic proxy concept.
+ <br/>
+ The basic idea of the dynamic proxy concept is to catch
all method
+ invocations on the not-yet materialized (loaded from
database) object.
+ When a method is called on the object, Java directs this
call to the
+ invocation handler registered for it (in OJB's case a
class implementing
+ the
<code>org.apache.ojb.broker.core.proxy.IndirectionHandler</code>
+ interface). This handler then materializes the object from
the
+ database and replaces the proxy with the real object.
+ By default OJB uses the class
+
<code>org.apache.ojb.broker.core.proxy.IndirectionHandlerDefaultImpl</code>.
+ If you are interested in the mechanics have a look at this
class.
+ </p>
+
+ <anchor id="dynamic-proxy-jdk"/>
+ <section>
+ <title>Dynamic Proxies with JDK standard proxies</title>
+ <p>
+ To use a dynamic proxy for lazy materialization of
<code>Article</code> objects
+ we have to declare it in the repository.xml file.
+ </p>
+ <source><![CDATA[
+ <class-descriptor
+ class="org.apache.ojb.broker.Article"
+ proxy="dynamic"
+ table="Artikel"
+ >
+ ...]]></source>
+
+ <p>
+ Just as with standard JDK proxies, the persistent class in
question (in our case
+ the <code>Article</code> class) must implement an
interface with all getter/setter methods
+ (for example <code>InterfaceArticle</code>) to be able to
benefit from dynamic proxies.
+ </p>
+ </section>
+
+ <anchor id="dynamic-proxy-cglib"/>
+ <section>
+ <title>Dynamic Proxies with CGLib</title>
+ <p>
+ When using <a href="#cglib-proxies">CGLib</a> for
proxy generation the declaration
+ is the same as above:
+ </p>
+ <source><![CDATA[
+ <class-descriptor
+ class="org.apache.ojb.broker.Article"
+ proxy="dynamic"
+ table="Artikel"
+ >
+ ...]]></source>
+ <p>
+ But <a href="#cglib-proxies">CGLib based proxies</a>
<strong>don't require an
+ interface</strong> for the persistent class in
question. So we can use class
+ <code>Article</code> without any modification.
+ </p>
+ </section>
+
+ <p>
+ The proxy generation implementation classes (standard JDK
or CGLib) can easily be
+ switched - see section:
+ <a href="#proxy-customization">customize the proxy
generation implementation</a>
+ </p>
+ </section>
+
+ <anchor id="user-defined-proxy"/>
+ <section>
+ <title>User defined proxies for persistence capable
objects</title>
+ <p>
+ To use standard JDK proxies for the referenced objects,
the persistent class in question
+ (in our case the <code>Article</code> class) must
implement an interface (for example
+ <code>InterfaceArticle</code>). This interface is needed
to allow replacement of
+ the proper Article object with a proxy implementing the
same
+ interface. Have a look at the code:
+ </p>
<source><![CDATA[
- public class Article implements InterfaceArticle
- {
- /** maps to db-column "Artikel-Nr"; PrimaryKey*/
- protected int articleId;
- /** maps to db-column "Artikelname"*/
- protected String articleName;
- ...
-
- public int getArticleId()
- {
- return articleId;
- }
-
- public java.lang.String getArticleName()
- {
- return articleName;
- }
- ...
- }
+public class Article implements InterfaceArticle
+{
+ protected int articleId;
+ protected String articleName;
+ ...
+ public int getArticleId()
+ {return articleId;}
- public interface InterfaceArticle
- {
- public int getArticleId();
- public java.lang.String getArticleName();
- ...
- }]]></source>
- <p>
+ public String getArticleName()
+ {return articleName;}
+ ...
+}
+public interface InterfaceArticle
+{
+ public int getArticleId();
+ public String getArticleName();
+ ...
+}]]></source>
+ <p>
+ Now we have to create the proxy implementation class itself.
OJB expects that all
+ user defined proxy classes are sub-classes of
+ <code>org.apache.ojb.broker.core.proxy.VirtualProxy</code>:
</p>
<source><![CDATA[
public class ArticleProxy extends VirtualProxy implements InterfaceArticle
{
public ArticleProxy(ojb.broker.Identity uniqueId, PersistenceBroker broker)
- {
- super(uniqueId, broker);
- }
+ {super(uniqueId, broker);}
public int getArticleId()
- {
- return realSubject().getArticleId();
- }
+ {return realSubject().getArticleId();}
- public java.lang.String getArticleName()
- {
- return realSubject().getArticleName();
- }
+ public String getArticleName()
+ {return realSubject().getArticleName();}
private InterfaceArticle realSubject()
{
try
- {
- return (InterfaceArticle) getRealSubject();
- }
+ {return (InterfaceArticle) getRealSubject();}
catch (Exception e)
- {
- return null;
- }
+ {return null;}
}
}]]></source>
<p>
@@ -1422,31 +1507,27 @@
uses getRealSubject() from the base class VirtualProxy:
</p>
<source><![CDATA[
- public Object getRealSubject() throws PersistenceBrokerException
- {
- return indirectionHandler.getRealSubject();
- }]]></source>
+public Object getRealSubject() throws PersistenceBrokerException
+{
+ return indirectionHandler.getRealSubject();
+}]]></source>
<p>
The proxy delegates the the materialization work to its
<code>IndirectionHandler</code>.
- If the real subject has not yet been materialized, a
PersistenceBroker is used to retrieve it by its OID:
+ If the real subject has not yet been materialized, a
PersistenceBroker is
+ used to retrieve it by its OID:
</p>
<source><![CDATA[
- public synchronized Object getRealSubject()
- throws PersistenceBrokerException
- {
- if (realSubject == null)
- {
- materializeSubject();
- }
- return realSubject;
- }
+public synchronized Object getRealSubject() throws PersistenceBrokerException
+{
+ if (realSubject == null) materializeSubject();
+ return realSubject;
+}
- private void materializeSubject()
- throws PersistenceBrokerException
- {
- realSubject = broker.getObjectByIdentity(id);
- }]]></source>
+private void materializeSubject() throws PersistenceBrokerException
+{
+ realSubject = broker.getObjectByIdentity(id);
+}]]></source>
<p>
To tell OJB to use proxy objects instead of materializing full
Article objects we have to add the following section to the XML
@@ -1466,68 +1547,20 @@
<p>
<img src="images/proxies.gif" alt="proxy image"/>
</p>
+ </section>
- <anchor id="dynamic-proxy"/>
+
+ <anchor id="reference-proxy"/>
<section>
- <title>Using Dynamic Proxies</title>
- <p>
- The implementation of a proxy class is a boring task that
repeats
- the same delegation scheme for each new class. To liberate
the
- developer from this unproductive job OJB provides a
dynamic proxy
- solution based on the JDK 1.3 dynamic proxy concept. (For
JDK1.2 we
- ship a replacement for the required
- <code>java.lang.reflect</code>
- classes. Credits for this solution to ObjectMentor.)
- The basic idea of the dynamic proxy concept is to catch
all method
- invocations on the not-yet materialized (loaded from
database) object.
- When a method is called on the object, Java directs this
call to the
- invocation handler registered for it (in OJB's case a
class implementing
- the
<code>org.apache.ojb.broker.core.proxy.IndirectionHandler</code>
- interface). This handler then materializes the object from
the
- database and replaces the proxy with the real object.
- By default OJB uses the class
-
<code>org.apache.ojb.broker.core.proxy.IndirectionHandlerDefaultImpl</code>.
- If you are interested in the mechanics have a look at this
class.
- </p>
+ <title>Proxy for referenced objects</title>
<p>
- To use a dynamic proxy for lazy materialization of Article
objects
- we have to declare it in the repository.xml file.
+ Beside proxies for persistence capable classes, OJB
supports proxies for
+ a referenced object (1:1 reference) or collection (1:n,
m:n reference):
</p>
- <source><![CDATA[
- <class-descriptor
- class="org.apache.ojb.broker.Article"
- proxy="dynamic"
- table="Artikel"
- >
- ...]]></source>
-
- <p>
- Just as with normal proxies, the persistent class in
question (in our case
- the Article class) must implement an interface (for example
- InterfaceArticle) to be able to benefit from dynamic
proxies.
- </p>
- <note>
- As of OJB 1.0.4, a facility is now present to allow the
generation of
- dynamic proxies that <strong>do not</strong> require
the persistent class
- to implement an interface. Previous versions generated
Proxies using the JDK
- proxy pattern. That has been extracted into a new
configuration setting named
- 'ProxyFactoryClass'.
- <br/><br/>
- Two implementations of this ProxyClass have been
provided: the previous JDK-based version (default),
- and a new CGLIB-based implementation. Since the CGLIB
version does byte-code
- manipulation to generate the proxy, your class is not
required to implement any
- interface. All generated Proxies will automatically be
sub-classes of your
- persistent class.
- <br/><br/>
- See below in the section "Customizing the proxy
mechanism" for how to enable the new
- CGLIB Proxy generation.
-
- </note>
- </section>
<anchor id="collection-proxy"/>
<section>
- <title>Using a Single Proxy for a Whole Collection</title>
+ <title>Proxy for a whole Collection (1:n, m:n
references)</title>
<p>
A collection proxy represents a whole collection of
objects, where
as a proxy class represents a single object.
@@ -1610,18 +1643,19 @@
</p>
</section>
- <anchor id="reference-proxy"/>
+ <anchor id="single-reference-proxy"/>
<section>
- <title>Using a Proxy for a Reference</title>
+ <title>Proxy for a 1:1 reference</title>
<p>
- A proxy reference is based on the original proxy class
concept. The main
- difference is that the ReferenceDescriptor defines when to
use a proxy class and
- not the ClassDescriptor.
+ A proxy reference is based on OJB's original <a
href="#using-proxy">proxy class concept</a>
+ for a persistence capable object.
+ The main difference is that the <a
href="site:repository/reference-descriptor">reference-descriptor</a>
+ defines when to use a proxy class and not the
+ <a
href="site:repository/class-descriptor">class-descriptor</a>.
<br/>
- In the following mapping the class ProductGroup is
- <strong>not</strong> defined to be a
- proxy class in its ClassDescriptor. Only for shown
relationship a proxy of
- ProductGroup should be used:
+ In the following mapping the class
<code>ProductGroup</code> is
+ <strong>not</strong> defined to be a proxy class in its
class-descriptor.
+ Only for the shown relationship a proxy of ProductGroup is
used:
</p>
<source><![CDATA[
@@ -1639,9 +1673,9 @@
/>
...
<reference-descriptor
- name="productGroup"
- class-ref="org.apache.ojb.broker.ProductGroup"
- proxy="true"
+ name="productGroup"
+ class-ref="org.apache.ojb.broker.ProductGroup"
+ proxy="true"
>
<foreignkey field-ref="productGroupId"/>
</reference-descriptor>
@@ -1649,10 +1683,51 @@
<p>
Because a proxy reference is only about the location of
the definition, the
- referenced class must implement a special interface (see
- <a href="#using-proxy">using proxy classes</a>).
+ referenced class must implement a special interface if
+ <a href="#dynamic-proxy-jdk">standard JDK proxies</a>
+ are used (<a href="#cglib-proxies">CGLib based proxies</a>
do not need this).
+ </p>
+ </section>
+ </section>
+
+
+ <anchor id="cglib-proxies"/>
+ <section>
+ <title>CGLib advantages and requirements</title>
+ <p>
+ Since version 1.0.4 OJB supports <a
href="ext:cglib">CGLib</a> based proxy generation and since
+ version 1.0.5 this library is used as default proxy
generation library.
+ <br/>
+ The advantages are:
+ </p>
+ <ul>
+ <li>
+ CGLib can generate proxy objects for all classes.
Since the CGLib version does
+ byte-code manipulation to generate the proxy, your
class is not required to implement any
+ interface. All generated Proxies will automatically be
sub-classes of your
+ persistent class.
+ </li>
+ <li>
+ The performance of CGLib proxies is very good and
often outperform the standard JDK proxies.
+ </li>
+ </ul>
+ <p>
+ The requirements are:
+ </p>
+ <ul>
+ <li>
+ Final declared persistence capable classes are not
allowed.
+ </li>
+ <li>
+ Final methods in persistence capable classes are not
allowed.
+ </li>
+ </ul>
+ <p>
+ In <a href="site:ojb-properties">OJB's configuration
file</a> you can
+ <a href="#proxy-customization">customize the proxy
generation classes</a>.
</p>
</section>
+
<anchor id="proxy-customization"/>
<section>
Modified:
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/odmg-guide.xml
URL:
http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/odmg-guide.xml?view=diff&rev=562151&r1=562150&r2=562151
==============================================================================
---
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/odmg-guide.xml
(original)
+++
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/odmg-guide.xml
Thu Aug 2 08:51:54 2007
@@ -215,8 +215,62 @@
<section>
<title>Object State Detection</title>
<p>
- !!!TODO
+ The ODMG-API implementation supports "persistence by
reachability" for all locked objects (object locking
+ can be done by hand or let OJB handle it - see <a
href="#locks">implicit locking</a>). To realise this
+ feature OJB use object state detection based on in-memory
copies of object fields to find modfied
+ objects. For all locked objects OJB take a snapshot.
+ <br/>
+ So it's recommended to avoid large query results or to disable
the implicit locking (permanent via
+ <a href="#configuration">OJB.properties setting</a> or <a
href="#extImplicitLocking">at runtime</a>).
</p>
+ <p>
+ If persistence capable objects with big memory footprint are
used the copy based state detection
+ cause memory overhead and slow down the performance. In this
case it can be useful to
+ disable the object state detection for this classes/fields and
+ <a href="#markDirty">mark changed objects by hand</a>.
+ </p>
+ <p>
+ OJB support three different flags:
+ </p>
+ <ul>
+ <li>
+ StateDetection.ON
+ <br/>
+ State detection is enabled.
+ </li>
+ <li>
+ StateDetection.OFF
+ <br/>
+ State detection is disabled.
+ </li>
+ <li>
+ StateDetection.INHERIT
+ <br/>
+ State detection status will be inherited from a higher
level entity.
+ </li>
+ </ul>
+ <p>
+ OJB allows fine grained state-detection declaration in the
following elements of the
+ <a href="site:repository">metadata mapping file</a>:
+ </p>
+ <ul>
+ <li>
+ In the <a
href="site:repository/descriptor-repository">descriptor-repository</a>
+ to enable/disable state-detection for all mapped classes.
+ </li>
+ <li>
+ In the <a
href="site:repository/class-descriptor">class-descriptor</a>
+ to enable/disable state-detection for a specific class.
+ </li>
+ <li>
+ In the <a
href="site:repository/field-descriptor">field-descriptor</a>
+ to enable/disable state-detection for a specific field of
a class.
+ </li>
+ </ul>
+ <note>
+ If <em>state-detection</em> is disabled the user is
responsible to mark changed
+ objects as dirty - see <a href="#markDirty">mark changed
objects by hand</a>.
+ </note>
</section>
@@ -543,6 +597,7 @@
<a href="ext:odmg-transaction-ext">TransactionExt</a>.
</li>
<li>
+ <anchor id="markDirty"/>
markDirty
<br/>
Description can be found in javadoc of
@@ -555,6 +610,7 @@
<a href="ext:odmg-transaction-ext">TransactionExt</a>.
</li>
<li>
+ <anchor id="extImplicitLocking"/>
is/setImplicitLocking
<br/>
Description can be found in javadoc of
@@ -664,6 +720,7 @@
</p>
</section>
+ <anchor id="locks"/>
<section>
<title>Locks</title>
<p>
Modified:
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/pb-guide.xml
URL:
http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/pb-guide.xml?view=diff&rev=562151&r1=562150&r2=562151
==============================================================================
---
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/pb-guide.xml
(original)
+++
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/pb-guide.xml
Thu Aug 2 08:51:54 2007
@@ -157,6 +157,43 @@
<anchor id="questions"/>
<section>
<title>Questions</title>
+
+ <anchor id="plain-store"/>
+ <section>
+ <title>How to update/insert an object without cascading the
whole object graph (referenced objects)</title>
+ <p>
+ The PB-api supports an extended store method to suppress
the cascading update/insert of
+ referenced objects (e.g. via 1:1, 1:n or m:n reference)
independent from the settings
+ made in the <a href="site:repository">repository mapping
file</a>:
+ </p>
+ <source><![CDATA[
+/**
+ * Makes the given object persistent in the underlying persistence system.
+ * This is usually done by issuing an INSERT ... or UPDATE ... in an RDBMS.
+ *
+ * @param obj The object to store
+ * @param modification Specifies what operation to perform (for generating
optimized SQL)
+ * @param ignoreReferences If set <em>true</em> OJB will ignore all referenced
objects
+ * and only insert/update the fields of the object.
+ */
+public void store(Object obj, ObjectModification modification, boolean
ignoreReferences)
+]]></source>
+ <p>
+ In the example below only the <code>Article</code> object
will be updated, OJB completely
+ ignore the referenced objects.
+ </p>
+ <source><![CDATA[
+...
+article.setPrice(0.99);
+article.getProductGroup().setName("test");
+broker.store(article, ObjectModification.UPDATE, true);
+...
+]]></source>
+ <p>
+ So the name change in <code>ProductGroup</code> will
<strong>not</strong> take effect
+ only the new price of the article object will be persisted.
+ </p>
+ </section>
<anchor id="multiple-databases"/>
<section>
@@ -271,8 +308,7 @@
run.
</p>
<source><![CDATA[
-brokerLeakDetection=true
- ]]></source>
+brokerLeakDetection=true]]></source>
<note>
The leak detection is costly, so take care to disable this
property in production environments.
</note>
Modified:
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/repository.xml
URL:
http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/repository.xml?view=diff&rev=562151&r1=562150&r2=562151
==============================================================================
---
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/repository.xml
(original)
+++
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/guides/repository.xml
Thu Aug 2 08:51:54 2007
@@ -255,8 +255,10 @@
</p>
<p>
The <em>state-detection</em> attribute is used by
API's supporting automatic state detection
- of persistence capable objects. The attribute indicate
whether or not mapped classes should
- be included in object state detection (automatic
detection of changed object fields).
+ of persistence capable objects (automatic detection of
changed object fields - e.g. like the
+ <a href="site:odmg-guide">ODMG implementation</a>).
+ The attribute indicate whether or not the object state
detection is enabled for all
+ mapped classes.
</p>
<source><![CDATA[
<!ATTLIST descriptor-repository
@@ -264,7 +266,7 @@
isolation-level (read-uncommitted | read-committed | repeatable-read |
serializable | optimistic | none) "read-uncommitted"
proxy-prefetching-limit CDATA "50"
- state-detection (true | false) "true"
+ state-detection (on | off) "on"
>]]></source>
</section>
</section>
@@ -1355,10 +1357,10 @@
</p>
<p>
The <em>state-detection</em> attribute is used by API's
supporting automatic state detection
- of persistence capable objects (e.g. odmg-api
implementation does). The attribute indicate
- whether or not this class should be included in object
state detection (automatic detection
- of changed object fields). If <em>state-detection</em> is
generally disabled, this setting
- will (normally) be ignored.
+ of persistence capable objects (automatic detection of
changed object fields - e.g. like the
+ <a href="site:odmg-guide">ODMG implementation</a>).
+ The attribute indicate whether or not the object state
detection is enabled for this class
+ or if it's inherited from a higher level entity.
</p>
<p>
The <em>field-class</em> attribute can be used to override
the
@@ -1382,7 +1384,7 @@
factory-class CDATA #IMPLIED
factory-method CDATA #IMPLIED
refresh (true | false) "false"
- state-detection CDATA #IMPLIED
+ state-detection (on | off | inherit) "inherit"
field-class CDATA #IMPLIED
>]]></source>
</section>
@@ -1506,7 +1508,7 @@
</p>
<anchor id="null-check"/>
<p>
- The optional <em>null-check</em> attribute (since OJB
1.0.5) should
+ The optional <em>null-check</em> attribute (since OJB
1.0.5) must
contain a fully qualified class name or a valid shortcut
name.
This class must implement the interface
<code>org.apache.ojb.broker.accesslayer.NullCheck</code>.
@@ -1560,11 +1562,10 @@
</p>
<p>
The <em>state-detection</em> attribute is used by API's
supporting automatic state detection
- of persistence capable objects. The attribute indicate
whether or not this field should
- be included in object state detection (automatic detection
of changed object fields).
- If in the <em>state-detection</em> is generally disabled
or in the associated
- <a
href="site:repository/class-descriptor">class-descriptor</a>, this setting will
(normally)
- be ignored.
+ of persistence capable objects (automatic detection of
changed object fields - e.g. like the
+ <a href="site:odmg-guide">ODMG implementation</a>).
+ The attribute indicate whether or not the object state
detection is enabled for this field
+ or if it's inherited from a higher level entity.
</p>
<p>
The <em>field-class</em> attribute can be used to override
the
@@ -1596,7 +1597,7 @@
precision CDATA #IMPLIED
scale CDATA #IMPLIED
access (readonly | readwrite | anonymous) "readwrite"
- state-detection CDATA #IMPLIED
+ state-detection (on | off | inherit) "inherit"
field-class CDATA #IMPLIED
>]]></source>
</section>
Modified:
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/tutorials/pb-tutorial.xml
URL:
http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/tutorials/pb-tutorial.xml?view=diff&rev=562151&r1=562150&r2=562151
==============================================================================
---
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/tutorials/pb-tutorial.xml
(original)
+++
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/docu/tutorials/pb-tutorial.xml
Thu Aug 2 08:51:54 2007
@@ -403,7 +403,7 @@
result.setStock(new Integer(result.getStock().intValue() - 1));
broker.store(result);
// alternative, more performant
- // broker.store(result, ObjectModificationDefaultImpl.UPDATE);
+ // broker.store(result, ObjectModification.UPDATE);
broker.commitTransaction();
isSold = true;
}
@@ -570,5 +570,9 @@
</p>
</section>
+ <p>
+ That's all! Now we recommend to read the <a
href="site:pb-guide">PB-guide</a> for more detailed
+ information about the PB-api.
+ </p>
</body>
</document>
Modified:
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/site.xml
URL:
http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/site.xml?view=diff&rev=562151&r1=562150&r2=562151
==============================================================================
---
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/site.xml
(original)
+++
db/ojb/branches/OJB_1_0_RELEASE/src/doc/forrest/src/documentation/content/xdocs/site.xml
Thu Aug 2 08:51:54 2007
@@ -467,6 +467,7 @@
<spring href="http://www.springframework.org/"/>
<linguine-maps
href="http://www.softwaresecretweapons.com/jspwiki/Wiki.jsp?page=LinguineMaps"/>
<clepsydra href="http://clepsydra.javaforge.com/"/>
+ <cglib href="http://cglib.sourceforge.net/"/>
<!-- Article links used within OJB -->
@@ -475,7 +476,6 @@
<spring-ojb-part-2 href="http://staff.osuosl.org/~mckerrj/?p=4"/>
<spring-ojb-part-3 href="http://staff.osuosl.org/~mckerrj/?p=8"/>
<springframework-and-ojb
href="http://blogs.codepuccino.com/dude/index.php?p=23"/>
- <cglib-pitfall
href="http://blog.springframework.com/rob/archives/2005/08/18/caveats-with-class-proxying-in-spring/"/>
</article>
</external-refs>
</site>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]