<!DOCTYPE html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <!-- No caching headers -->
    <meta http-equiv="cache-control" content="no-cache"/>
    <meta http-equiv="pragma" content="no-cache"/>
    <meta http-equiv="expires" content="-1"/>
    <meta name="keywords" content="JDO, Apache, Java, Data, Objects"/>
    <meta name="description" content="Apache JDO - Java Data Objects"/>

    <title>JDO Bytecode Enhancement</title>

    <link rel="icon" type="image/png" href="images/JDOx150.png"/>

    <!--
        Apache JDO Documentation Template
        ==================================
        This template derived various aspects from Apache Deltaspike template, the Apache ISIS template and the Datanucleus template.
        This template uses 
        * Bootstrap v3.3.7 (https://getbootstrap.com/) for navbar.
        * Asciidoctor "foundation" CSS
        * Bootswatch "cosmo" theme for Bootstrap (https://bootswatch.com/cosmo).
        * Bootstrap TOC plugin v0.4.1 (https://afeld.github.io/bootstrap-toc/) for the table of contents.
        * jQuery (necessary for Bootstrap's JavaScript plugins)
        * Font-Awesome for some icons used by Asciidoctor
        NOTE: tried using Font-Awesome CSS hosted locally but then fails to work!
    -->
    <link href="css/bootswatch/3.3.7/bootstrap-cosmo.css" rel="stylesheet"/>
    <link href="css/bootstrap-toc/0.4.1/bootstrap-toc.min.css" rel="stylesheet"/>

    <link href="css/asciidoctor/foundation.css" rel="stylesheet"/>
    <link href="css/datanucleus_theme.css" rel="stylesheet"/>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet">

    
    
     

    

    
    
    

    
    
    

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src="js/bootstrap/3.3.7/bootstrap.min.js"></script>
    <script src="js/bootstrap-toc/0.4.1/bootstrap-toc.min.js"></script>

    <!-- Coderay syntax formatter -->
    <style type="text/css">
        /* Stylesheet for CodeRay to match GitHub theme | MIT License | http://foundation.zurb.com */
pre.CodeRay{background:#f7f7f8}
.CodeRay .line-numbers{border-right:1px solid currentColor;opacity:.35;padding:0 .5em 0 0}
.CodeRay span.line-numbers{display:inline-block;margin-right:.75em}
.CodeRay .line-numbers strong{color:#000}
table.CodeRay{border-collapse:separate;border:0;margin-bottom:0;background:none}
table.CodeRay td{vertical-align:top;line-height:inherit}
table.CodeRay td.line-numbers{text-align:right}
table.CodeRay td.code{padding:0 0 0 .75em}
.CodeRay .debug{color:#fff !important;background:#000080 !important}
.CodeRay .annotation{color:#007}
.CodeRay .attribute-name{color:#000080}
.CodeRay .attribute-value{color:#700}
.CodeRay .binary{color:#509}
.CodeRay .comment{color:#998;font-style:italic}
.CodeRay .char{color:#04d}
.CodeRay .char .content{color:#04d}
.CodeRay .char .delimiter{color:#039}
.CodeRay .class{color:#458;font-weight:bold}
.CodeRay .complex{color:#a08}
.CodeRay .constant,.CodeRay .predefined-constant{color:#008080}
.CodeRay .color{color:#099}
.CodeRay .class-variable{color:#369}
.CodeRay .decorator{color:#b0b}
.CodeRay .definition{color:#099}
.CodeRay .delimiter{color:#000}
.CodeRay .doc{color:#970}
.CodeRay .doctype{color:#34b}
.CodeRay .doc-string{color:#d42}
.CodeRay .escape{color:#666}
.CodeRay .entity{color:#800}
.CodeRay .error{color:#808}
.CodeRay .exception{color:inherit}
.CodeRay .filename{color:#099}
.CodeRay .function{color:#900;font-weight:bold}
.CodeRay .global-variable{color:#008080}
.CodeRay .hex{color:#058}
.CodeRay .integer,.CodeRay .float{color:#099}
.CodeRay .include{color:#555}
.CodeRay .inline{color:#000}
.CodeRay .inline .inline{background:#ccc}
.CodeRay .inline .inline .inline{background:#bbb}
.CodeRay .inline .inline-delimiter{color:#d14}
.CodeRay .inline-delimiter{color:#d14}
.CodeRay .important{color:#555;font-weight:bold}
.CodeRay .interpreted{color:#b2b}
.CodeRay .instance-variable{color:#008080}
.CodeRay .label{color:#970}
.CodeRay .local-variable{color:#963}
.CodeRay .octal{color:#40e}
.CodeRay .predefined{color:#369}
.CodeRay .preprocessor{color:#579}
.CodeRay .pseudo-class{color:#555}
.CodeRay .directive{font-weight:bold}
.CodeRay .type{font-weight:bold}
.CodeRay .predefined-type{color:inherit}
.CodeRay .reserved,.CodeRay .keyword {color:#000;font-weight:bold}
.CodeRay .key{color:#808}
.CodeRay .key .delimiter{color:#606}
.CodeRay .key .char{color:#80f}
.CodeRay .value{color:#088}
.CodeRay .regexp .delimiter{color:#808}
.CodeRay .regexp .content{color:#808}
.CodeRay .regexp .modifier{color:#808}
.CodeRay .regexp .char{color:#d14}
.CodeRay .regexp .function{color:#404;font-weight:bold}
.CodeRay .string{color:#d20}
.CodeRay .string .string .string{background:#ffd0d0}
.CodeRay .string .content{color:#d14}
.CodeRay .string .char{color:#d14}
.CodeRay .string .delimiter{color:#d14}
.CodeRay .shell{color:#d14}
.CodeRay .shell .delimiter{color:#d14}
.CodeRay .symbol{color:#990073}
.CodeRay .symbol .content{color:#a60}
.CodeRay .symbol .delimiter{color:#630}
.CodeRay .tag{color:#008080}
.CodeRay .tag-special{color:#d70}
.CodeRay .variable{color:#036}
.CodeRay .insert{background:#afa}
.CodeRay .delete{background:#faa}
.CodeRay .change{color:#aaf;background:#007}
.CodeRay .head{color:#f8f;background:#505}
.CodeRay .insert .insert{color:#080}
.CodeRay .delete .delete{color:#800}
.CodeRay .change .change{color:#66f}
.CodeRay .head .head{color:#f4f}
    </style>
</head>
<body data-spy="scroll" data-target="#toc">
<!-- Navbar -->
<nav class="navbar navbar-default navbar-static-top">
    <div class="container">
        <div class="navbar-header">
            <!-- Three line menu button for use on mobile screens -->
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <!-- 'style' added to align image with navbar. FIX THIS -->
            <a class="navbar-brand" href="https://db.apache.org/jdo/">
                <img style="margin-top: -12px;" alt="Brand" width="45.5" height="45.5" src="images/JDOx150.png"/>
            </a>
            <!-- TODO Any way to abstract the version from Maven? -->
            <a class="navbar-brand" href="index.html">Apache JDO</a>
        </div>
        <!-- Navbar that will collapse on mobile screens -->
        <div id="navbar" class="navbar-collapse collapse">
            <ul class="nav navbar-nav">
                <li class="dropdown">

                  <!-- menu item General -->

                  
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">General<span class="caret"></span></a>
                  
                  <ul class="dropdown-menu">
                        <li><a href="why_jdo.html">Why JDO?</a></li>
                        <li><a href="getting-started.html">Getting Started</a></li>
                        <li><a href="specifications.html">Specifications</a></li>
                        <li><a href="tck.html">TCK</a></li>
                        <li><a href="javadoc.html">API Javadoc</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="jdo_v_jpa.html">JDO v JPA</a></li>
                        <li><a href="jdo_v_jpa_api.html">JDO v JPA : API</a></li>
                        <li><a href="jdo_v_jpa_orm.html">JDO v JPA : ORM</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="license.html">License</a></li>
                        <li><a href="impls.html">Implementations</a></li>
                        <li><a href="jdo_3_0_overview.html">JDO 3.0 Overview</a></li>
                        <li><a href="references.html">References</a></li>
                        <li><a href="glossary.html">Glossary</a></li>
                    </ul>
                </li>

                <!-- menu item API Usage -->

                <li class="dropdown">
                  
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">API Usage<span class="caret"></span></a>
                  
                    <ul class="dropdown-menu">
                        <li><a href="pmf.html">PersistenceManagerFactory</a></li>
                        <li><a href="pm.html">PersistenceManager</a></li>
                        <li><a href="transactions.html">Transactions</a></li>
                        <li><a href="attach_detach.html">Attach-Detach</a></li>
                        <li><a href="fetchgroups.html">Fetch Plan/Groups</a></li>
                        <li><a href="state_transition.html">Object States</a></li>
                        <li><a href="object_retrieval.html">Object Retrieval</a></li>
                        <li><a href="exceptions.html">Exceptions</a></li>
                        <li><a href="jdohelper.html">JDO Helper</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="guides-replication.html">Data Replication</a></li>
                    </ul>
                </li>

                <!-- menu item Types & Metadata -->

                <li class="dropdown">
                  
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false" style="background-color:#2385c6">Types &amp; Metadata<span class="caret"></span></a>
                  
                    <ul class="dropdown-menu">
                        <li><a href="class_types.html">Types of Classes</a></li>
                        <li><a href="field_types.html">Types of Fields</a></li>
                        <li role="separator" class="divider"></li>
                        <!-- <li class="dropdown-header">Metadata</li> -->
                        <li><a href="metadata.html">MetaData</a></li>
                        <li><a href="annotations.html">Annotations</a></li>
                        <li><a href="jdo_dtd.html">jdo DTD/XSD</a></li>
                        <li><a href="orm_dtd.html">orm DTD/XSD</a></li>
                        <li><a href="jdoquery_dtd.html">jdoquery DTD/XSD</a></li>
                        <li><a href="jdoconfig_dtd.html">jdoconfig DTD/XSD</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="enhancement.html">Bytecode Enhancement</a></li>
                    </ul>
                </li>

                <!-- menu item Query -->

                <li class="dropdown">
                  
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Query<span class="caret"></span></a>
                  
                    <ul class="dropdown-menu">
                        <li><a href="query_api.html">Query API</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="jdoql.html">JDOQL</a></li>
                        <li><a href="jdoql_methods.html">Methods</a></li>
                        <li><a href="jdoql_result.html">Result</a></li>
                        <li><a href="jdoql_quickref.pdf">Quick Ref PDF</a></li>
                        <li><a href="jdoql_typed.html">JDOQL Typed API</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="query_sql.html">SQL</a></li>
                    </ul>
               </li>

                <!-- menu item Community -->

               <li class="dropdown">
                  
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Community<span class="caret"></span></a>
                  
                    <ul class="dropdown-menu">
                        <li><a href="get-involved.html">Get Involved</a></li>
                        <li><a href="team-list.html">Project Team</a></li>
                        <li><a href="mail-lists.html">Mailing Lists</a></li>
                        <li><a href="faq.html">FAQ</a></li>
                    </ul>
               </li>

                <!-- menu item Development -->

               <li class="dropdown">
                  
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Development<span class="caret"></span></a>
                  
                    <ul class="dropdown-menu">
                        <li><a href="roadmap.html">RoadMap / TODO</a></li>
                        <li><a href="downloads.html">Downloads</a></li>
                        <li><a href="source-code.html">Source Code</a></li>
                        <li><a href="coding-standards.html">Coding Standards</a></li>
                        <li><a href="issuetracking.html">Issue Tracking</a></li>
                    </ul>
                </li>
            </ul>
           <!-- 'style' added to fix height of input box. FIX THIS -->
            <form class="navbar-form navbar-left" role="search" id="search-form" action="https://www.google.com/search" method="get" style="padding: 1px 15px;">
                <div class="form-group">
                    <input name="sitesearch" value="db.apache.org/jdo" type="hidden">
                    <input name="q" type="text" class="form-control" placeholder="Search" style="margin-top: 7px; padding: 1px; border-radius: 5px; height: 30px; vertical-align: middle;">
                </div>
            </form>
        </div>
    </div>
</nav>
<div class="container">
    
        <!-- No TOC -->
        <div class="row-fluid">
            <div class="col-sm-12">
                
                    <!-- no heading -->
                
                <div id="doc-content">
                    <div class="sect1">
<h2 id="JDO_Bytecode_Enhancement">JDO Bytecode Enhancement</h2>
<div class="sectionbody">
<div class="paragraph">
<p>JDO defines a byte-code enhancement process that provides for dirty detection of fields.
Before a class is used at runtime it is compiled and then "enhanced" to implement the interface <em>PersistenceCapable</em>, and optionally also <em>Detachable</em>.</p>
</div>
<div class="paragraph">
<p>We can demonstrate this by taking a sample class, and seeing it before and after enhancement.
We start with the following class</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="keyword">package</span> <span class="namespace">org.apache.jdo.test</span>;

<span class="directive">public</span> <span class="type">class</span> <span class="class">A</span>
{
    <span class="type">long</span> id;
    <span class="predefined-type">String</span> name;
    B b;

    <span class="directive">public</span> A(<span class="predefined-type">String</span> name)
    {
        <span class="local-variable">this</span>.name = name;
    }

    <span class="directive">public</span> <span class="type">void</span> setId(<span class="type">long</span> id)
    {
        <span class="local-variable">this</span>.id = id;
    }

    <span class="directive">public</span> <span class="type">void</span> setB(B b)
    {
        <span class="local-variable">this</span>.b = b;
    }

    <span class="directive">public</span> <span class="predefined-type">String</span> getName()
    {
        <span class="keyword">return</span> name;
    }

    <span class="directive">public</span> B getB()
    {
        <span class="keyword">return</span> b;
    }

    <span class="directive">public</span> <span class="type">long</span> getId()
    {
        <span class="keyword">return</span> id;
    }

    <span class="directive">public</span> <span class="predefined-type">String</span> toString()
    {
        <span class="keyword">return</span> <span class="string"><span class="delimiter">&quot;</span><span class="content">A : id=</span><span class="delimiter">&quot;</span></span> + id + <span class="string"><span class="delimiter">&quot;</span><span class="content"> [</span><span class="delimiter">&quot;</span></span> + name + <span class="string"><span class="delimiter">&quot;</span><span class="content">] b=</span><span class="char">\&quot;</span><span class="delimiter">&quot;</span></span> + b + <span class="string"><span class="delimiter">&quot;</span><span class="char">\&quot;</span><span class="delimiter">&quot;</span></span>;
    }
}</code></pre>
</div>
</div>
<div class="paragraph">
<p>and require it to be <em>PersistenceCapable</em> and <em>Detachable</em>.
The enhancement process needs to intercept all updates of the fields of the
class (id, name, b) as well as add on the necessary <em>PersistenceCapable</em>, <em>Detachable</em> methods. After "enhancement" it becomes</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="java"><span class="keyword">package</span> <span class="namespace">org.apache.jdo.test</span>;
<span class="keyword">import</span> <span class="include">java.util.BitSet</span>;

<span class="keyword">import</span> <span class="include">javax.jdo.JDODetachedFieldAccessException</span>;
<span class="keyword">import</span> <span class="include">javax.jdo.JDOFatalInternalException</span>;
<span class="keyword">import</span> <span class="include">javax.jdo.PersistenceManager</span>;
<span class="keyword">import</span> <span class="include">javax.jdo.identity.LongIdentity</span>;
<span class="keyword">import</span> <span class="include">javax.jdo.spi.Detachable</span>;
<span class="keyword">import</span> <span class="include">javax.jdo.spi.JDOImplHelper</span>;
<span class="keyword">import</span> <span class="include">javax.jdo.spi.JDOPermission</span>;
<span class="keyword">import</span> <span class="include">javax.jdo.spi.PersistenceCapable</span>;
<span class="keyword">import</span> <span class="include">javax.jdo.spi.StateManager</span>;

<span class="directive">public</span> <span class="type">class</span> <span class="class">A</span> <span class="directive">implements</span> PersistenceCapable, Detachable
{
    <span class="type">long</span> id;
    <span class="predefined-type">String</span> name;
    B b;
    <span class="directive">protected</span> <span class="directive">transient</span> StateManager jdoStateManager;
    <span class="directive">protected</span> <span class="directive">transient</span> <span class="type">byte</span> jdoFlags;
    <span class="directive">protected</span> <span class="predefined-type">Object</span><span class="type">[]</span> jdoDetachedState;
    <span class="directive">private</span> <span class="directive">static</span> <span class="directive">final</span> <span class="type">byte</span><span class="type">[]</span> jdoFieldFlags;
    <span class="directive">private</span> <span class="directive">static</span> <span class="directive">final</span> <span class="predefined-type">Class</span> jdoPersistenceCapableSuperclass;
    <span class="directive">private</span> <span class="directive">static</span> <span class="directive">final</span> <span class="predefined-type">Class</span><span class="type">[]</span> jdoFieldTypes;
    <span class="directive">private</span> <span class="directive">static</span> <span class="directive">final</span> <span class="predefined-type">String</span><span class="type">[]</span> jdoFieldNames = __jdoFieldNamesInit();
    <span class="directive">private</span> <span class="directive">static</span> <span class="directive">final</span> <span class="type">int</span> jdoInheritedFieldCount;

    <span class="directive">static</span>
    {
        jdoFieldTypes = __jdoFieldTypesInit();
        jdoFieldFlags = __jdoFieldFlagsInit();
        jdoInheritedFieldCount = __jdoGetInheritedFieldCount();
        jdoPersistenceCapableSuperclass = __jdoPersistenceCapableSuperclassInit();
        JDOImplHelper.registerClass(___jdo<span class="error">$</span>loadClass(<span class="string"><span class="delimiter">&quot;</span><span class="content">org.apache.jdo.test.A</span><span class="delimiter">&quot;</span></span>),
                    jdoFieldNames, jdoFieldTypes,
                    jdoFieldFlags,
                    jdoPersistenceCapableSuperclass, <span class="keyword">new</span> A());
    }

    <span class="directive">public</span> <span class="type">void</span> setId(<span class="type">long</span> id)
    {
        jdoSetid(<span class="local-variable">this</span>, id);
    }

    <span class="directive">public</span> <span class="type">void</span> setB(B b)
    {
        jdoSetb(<span class="local-variable">this</span>, b);
    }

    <span class="directive">public</span> <span class="predefined-type">String</span> getName()
    {
        <span class="keyword">return</span> jdoGetname(<span class="local-variable">this</span>);
    }

    <span class="directive">public</span> B getB()
    {
        <span class="keyword">return</span> jdoGetb(<span class="local-variable">this</span>);
    }

    <span class="directive">public</span> <span class="type">long</span> getId()
    {
        <span class="keyword">return</span> jdoGetid(<span class="local-variable">this</span>);
    }

    <span class="directive">public</span> <span class="predefined-type">String</span> toString()
    {
        <span class="keyword">return</span> <span class="keyword">new</span> <span class="predefined-type">StringBuilder</span>().append(<span class="string"><span class="delimiter">&quot;</span><span class="content">A : id=</span><span class="delimiter">&quot;</span></span>).append(jdoGetid(<span class="local-variable">this</span>))
           .append(<span class="string"><span class="delimiter">&quot;</span><span class="content"> [</span><span class="delimiter">&quot;</span></span>).append(jdoGetname(<span class="local-variable">this</span>))
           .append(<span class="string"><span class="delimiter">&quot;</span><span class="content">] b=</span><span class="char">\&quot;</span><span class="delimiter">&quot;</span></span>).append(jdoGetb(<span class="local-variable">this</span>))
           .append(<span class="string"><span class="delimiter">&quot;</span><span class="char">\&quot;</span><span class="delimiter">&quot;</span></span>).toString();
    }

    <span class="directive">public</span> <span class="type">void</span> jdoCopyKeyFieldsFromObjectId(PersistenceCapable.ObjectIdFieldConsumer fc, <span class="predefined-type">Object</span> oid)
    {
        <span class="keyword">if</span> (fc == <span class="predefined-constant">null</span>)
            <span class="keyword">throw</span> <span class="keyword">new</span> <span class="exception">IllegalArgumentException</span>
              (<span class="string"><span class="delimiter">&quot;</span><span class="content">ObjectIdFieldConsumer is null</span><span class="delimiter">&quot;</span></span>);
        <span class="keyword">if</span> (!(oid <span class="keyword">instanceof</span> LongIdentity))
            <span class="keyword">throw</span> <span class="keyword">new</span> <span class="exception">ClassCastException</span>
              (<span class="string"><span class="delimiter">&quot;</span><span class="content">oid is not instanceof javax.jdo.identity.LongIdentity</span><span class="delimiter">&quot;</span></span>);
        LongIdentity o = (LongIdentity) oid;
        fc.storeLongField(<span class="integer">1</span>, o.getKey());
    }

    <span class="directive">protected</span> <span class="type">void</span> jdoCopyKeyFieldsFromObjectId(<span class="predefined-type">Object</span> oid)
    {
        <span class="keyword">if</span> (!(oid <span class="keyword">instanceof</span> LongIdentity))
            <span class="keyword">throw</span> <span class="keyword">new</span> <span class="exception">ClassCastException</span>
              (<span class="string"><span class="delimiter">&quot;</span><span class="content">key class is not javax.jdo.identity.LongIdentity or null</span><span class="delimiter">&quot;</span></span>);
        LongIdentity o = (LongIdentity) oid;
        id = o.getKey();
    }

    <span class="directive">public</span> <span class="directive">final</span> <span class="type">void</span> jdoCopyKeyFieldsToObjectId(<span class="predefined-type">Object</span> oid)
    {
        <span class="keyword">throw</span> <span class="keyword">new</span> JDOFatalInternalException
          (<span class="string"><span class="delimiter">&quot;</span><span class="content">It's illegal to call jdoCopyKeyFieldsToObjectId for a class with Single Field Identity.</span><span class="delimiter">&quot;</span></span>);
    }

    <span class="directive">public</span> <span class="directive">final</span> <span class="type">void</span> jdoCopyKeyFieldsToObjectId
    (PersistenceCapable.ObjectIdFieldSupplier fs, <span class="predefined-type">Object</span> oid) {
    <span class="keyword">throw</span> <span class="keyword">new</span> JDOFatalInternalException
          (<span class="string"><span class="delimiter">&quot;</span><span class="content">It's illegal to call jdoCopyKeyFieldsToObjectId for a class with Single Field Identity.</span><span class="delimiter">&quot;</span></span>);
    }

    <span class="directive">public</span> <span class="directive">final</span> <span class="predefined-type">Object</span> jdoGetObjectId()
    {
        <span class="keyword">if</span> (jdoStateManager != <span class="predefined-constant">null</span>)
            <span class="keyword">return</span> jdoStateManager.getObjectId(<span class="local-variable">this</span>);
        <span class="keyword">if</span> (<span class="local-variable">this</span>.jdoIsDetached() != <span class="predefined-constant">true</span>)
            <span class="keyword">return</span> <span class="predefined-constant">null</span>;
        <span class="keyword">return</span> jdoDetachedState[<span class="integer">0</span>];
    }

    <span class="directive">public</span> <span class="directive">final</span> <span class="predefined-type">Object</span> jdoGetVersion()
    {
        <span class="keyword">if</span> (jdoStateManager != <span class="predefined-constant">null</span>)
            <span class="keyword">return</span> jdoStateManager.getVersion(<span class="local-variable">this</span>);
        <span class="keyword">if</span> (<span class="local-variable">this</span>.jdoIsDetached() != <span class="predefined-constant">true</span>)
            <span class="keyword">return</span> <span class="predefined-constant">null</span>;
        <span class="keyword">return</span> jdoDetachedState[<span class="integer">1</span>];
    }

    <span class="directive">protected</span> <span class="directive">final</span> <span class="type">void</span> jdoPreSerialize()
    {
        <span class="keyword">if</span> (jdoStateManager != <span class="predefined-constant">null</span>)
            jdoStateManager.preSerialize(<span class="local-variable">this</span>);
    }

    <span class="directive">public</span> <span class="directive">final</span> PersistenceManager jdoGetPersistenceManager()
    {
        <span class="keyword">return</span> (jdoStateManager != <span class="predefined-constant">null</span>
            ? jdoStateManager.getPersistenceManager(<span class="local-variable">this</span>) : <span class="predefined-constant">null</span>);
    }

    <span class="directive">public</span> <span class="directive">final</span> <span class="predefined-type">Object</span> jdoGetTransactionalObjectId()
    {
        <span class="keyword">return</span> (jdoStateManager != <span class="predefined-constant">null</span>
           ? jdoStateManager.getTransactionalObjectId(<span class="local-variable">this</span>) : <span class="predefined-constant">null</span>);
    }

    <span class="directive">public</span> <span class="directive">final</span> <span class="type">boolean</span> jdoIsDeleted()
    {
        <span class="keyword">return</span> (jdoStateManager != <span class="predefined-constant">null</span> ? jdoStateManager.isDeleted(<span class="local-variable">this</span>): <span class="predefined-constant">false</span>);
    }

    <span class="directive">public</span> <span class="directive">final</span> <span class="type">boolean</span> jdoIsDirty()
    {
        <span class="keyword">if</span> (jdoStateManager != <span class="predefined-constant">null</span>)
            <span class="keyword">return</span> jdoStateManager.isDirty(<span class="local-variable">this</span>);
        <span class="keyword">if</span> (<span class="local-variable">this</span>.jdoIsDetached() != <span class="predefined-constant">true</span>)
            <span class="keyword">return</span> <span class="predefined-constant">false</span>;
        <span class="keyword">if</span> (((<span class="predefined-type">BitSet</span>) jdoDetachedState[<span class="integer">3</span>]).length() &lt;= <span class="integer">0</span>)
            <span class="keyword">return</span> <span class="predefined-constant">false</span>;
        <span class="keyword">return</span> <span class="predefined-constant">true</span>;
    }

    <span class="directive">public</span> <span class="directive">final</span> <span class="type">boolean</span> jdoIsNew()
    {
        <span class="keyword">return</span> jdoStateManager != <span class="predefined-constant">null</span> ? jdoStateManager.isNew(<span class="local-variable">this</span>) : <span class="predefined-constant">false</span>;
    }

    <span class="directive">public</span> <span class="directive">final</span> <span class="type">boolean</span> jdoIsPersistent()
    {
        <span class="keyword">return</span> (jdoStateManager != <span class="predefined-constant">null</span> ? jdoStateManager.isPersistent(<span class="local-variable">this</span>): <span class="predefined-constant">false</span>);
    }

    <span class="directive">public</span> <span class="directive">final</span> <span class="type">boolean</span> jdoIsTransactional()
    {
        <span class="keyword">return</span> (jdoStateManager != <span class="predefined-constant">null</span> ? jdoStateManager.isTransactional(<span class="local-variable">this</span>): <span class="predefined-constant">false</span>);
    }

    <span class="directive">public</span> <span class="directive">final</span> <span class="type">boolean</span> jdoIsDetached()
    {
        <span class="keyword">if</span> (jdoStateManager == <span class="predefined-constant">null</span>) {
            <span class="keyword">if</span> (jdoDetachedState == <span class="predefined-constant">null</span>)
                <span class="keyword">return</span> <span class="predefined-constant">false</span>;
            <span class="keyword">return</span> <span class="predefined-constant">true</span>;
        }
        <span class="keyword">return</span> <span class="predefined-constant">false</span>;
    }

    <span class="directive">public</span> <span class="directive">final</span> <span class="type">void</span> jdoMakeDirty(<span class="predefined-type">String</span> fieldName)
    {
        <span class="keyword">if</span> (jdoStateManager != <span class="predefined-constant">null</span>)
            jdoStateManager.makeDirty(<span class="local-variable">this</span>, fieldName);
    }

    <span class="directive">public</span> <span class="directive">final</span> <span class="predefined-type">Object</span> jdoNewObjectIdInstance()
    {
        <span class="keyword">return</span> <span class="keyword">new</span> LongIdentity(getClass(), id);
    }

    <span class="directive">public</span> <span class="directive">final</span> <span class="predefined-type">Object</span> jdoNewObjectIdInstance(<span class="predefined-type">Object</span> key)
    {
        <span class="keyword">if</span> (key == <span class="predefined-constant">null</span>)
            <span class="keyword">throw</span> <span class="keyword">new</span> <span class="exception">IllegalArgumentException</span>(<span class="string"><span class="delimiter">&quot;</span><span class="content">key is null</span><span class="delimiter">&quot;</span></span>);
        <span class="keyword">if</span> (key <span class="keyword">instanceof</span> <span class="predefined-type">String</span> != <span class="predefined-constant">true</span>)
            <span class="keyword">return</span> <span class="keyword">new</span> LongIdentity(<span class="local-variable">this</span>.getClass(), (<span class="predefined-type">Long</span>) key);
        <span class="keyword">return</span> <span class="keyword">new</span> LongIdentity(<span class="local-variable">this</span>.getClass(), (<span class="predefined-type">String</span>) key);
    }

    <span class="directive">public</span> <span class="directive">final</span> <span class="type">void</span> jdoProvideFields(<span class="type">int</span><span class="type">[]</span> fieldId)
    {
        <span class="keyword">if</span> (fieldId == <span class="predefined-constant">null</span>)
            <span class="keyword">throw</span> <span class="keyword">new</span> <span class="exception">IllegalArgumentException</span>(<span class="string"><span class="delimiter">&quot;</span><span class="content">argment is null</span><span class="delimiter">&quot;</span></span>);
        <span class="type">int</span> i = fieldId.length - <span class="integer">1</span>;
        <span class="keyword">if</span> (i &gt;= <span class="integer">0</span>)
        {
            <span class="keyword">do</span>
                jdoProvideField(fieldId[i]);
            <span class="keyword">while</span> (--i &gt;= <span class="integer">0</span>);
        }
    }

    <span class="directive">public</span> <span class="directive">final</span> <span class="type">void</span> jdoReplaceFields(<span class="type">int</span><span class="type">[]</span> fieldId)
    {
        <span class="keyword">if</span> (fieldId == <span class="predefined-constant">null</span>)
            <span class="keyword">throw</span> <span class="keyword">new</span> <span class="exception">IllegalArgumentException</span>(<span class="string"><span class="delimiter">&quot;</span><span class="content">argument is null</span><span class="delimiter">&quot;</span></span>);
        <span class="type">int</span> i = fieldId.length;
        <span class="keyword">if</span> (i &gt; <span class="integer">0</span>)
        {
            <span class="type">int</span> i_0_ = <span class="integer">0</span>;
            <span class="keyword">do</span>
                jdoReplaceField(fieldId[i_0_]);
            <span class="keyword">while</span> (++i_0_ &lt; i);
        }
    }

    <span class="directive">public</span> <span class="directive">final</span> <span class="type">void</span> jdoReplaceFlags()
    {
        <span class="keyword">if</span> (jdoStateManager != <span class="predefined-constant">null</span>)
        {
            A a = <span class="local-variable">this</span>;
            a.jdoFlags = a.jdoStateManager.replacingFlags(<span class="local-variable">this</span>);
        }
    }

    <span class="directive">public</span> <span class="directive">final</span> <span class="directive">synchronized</span> <span class="type">void</span> jdoReplaceStateManager(StateManager stateManager)
    {
        <span class="keyword">if</span> (jdoStateManager != <span class="predefined-constant">null</span>)
        {
            A a = <span class="local-variable">this</span>;
            a.jdoStateManager = a.jdoStateManager.replacingStateManager(<span class="local-variable">this</span>, stateManager);
        }
        <span class="keyword">else</span>
        {
            JDOImplHelper.checkAuthorizedStateManager(sm);
            jdoStateManager = stateManager;
            jdoFlags = (<span class="type">byte</span>) <span class="integer">1</span>;
        }
    }

    <span class="directive">public</span> <span class="directive">final</span> <span class="directive">synchronized</span> <span class="type">void</span> jdoReplaceDetachedState()
    {
        <span class="keyword">if</span> (jdoStateManager == <span class="predefined-constant">null</span>)
            <span class="keyword">throw</span> <span class="keyword">new</span> <span class="exception">IllegalStateException</span>(<span class="string"><span class="delimiter">&quot;</span><span class="content">state manager is null</span><span class="delimiter">&quot;</span></span>);
        A a = <span class="local-variable">this</span>;
        a.jdoDetachedState = a.jdoStateManager.replacingDetachedState(<span class="local-variable">this</span>, jdoDetachedState);
    }

    <span class="directive">public</span> PersistenceCapable jdoNewInstance(StateManager sm)
    {
        A result = <span class="keyword">new</span> A();
        A a = result;
        a.jdoFlags = (<span class="type">byte</span>) <span class="integer">1</span>;
        a.jdoStateManager = sm;
        <span class="keyword">return</span> a;
    }

    <span class="directive">public</span> PersistenceCapable jdoNewInstance(StateManager sm, <span class="predefined-type">Object</span> o)
    {
        A result = <span class="keyword">new</span> A();
        A a = result;
        a.jdoFlags = (<span class="type">byte</span>) <span class="integer">1</span>;
        a.jdoStateManager = sm;
        result.jdoCopyKeyFieldsFromObjectId(o);
        <span class="keyword">return</span> a;
    }

    <span class="directive">public</span> <span class="type">void</span> jdoReplaceField(<span class="type">int</span> fieldIndex)
    {
        <span class="keyword">if</span> (jdoStateManager == <span class="predefined-constant">null</span>)
            <span class="keyword">throw</span> <span class="keyword">new</span> <span class="exception">IllegalStateException</span>(<span class="string"><span class="delimiter">&quot;</span><span class="content">state manager is null</span><span class="delimiter">&quot;</span></span>);
        <span class="keyword">switch</span> (fieldIndex)
        {
            <span class="keyword">case</span> <span class="integer">0</span>:
            {
                A a = <span class="local-variable">this</span>;
                a.b = (B) a.jdoStateManager.replacingObjectField(<span class="local-variable">this</span>, fieldIndex);
                <span class="keyword">break</span>;
            }
            <span class="keyword">case</span> <span class="integer">1</span>:
            {
                A a = <span class="local-variable">this</span>;
                a.id = a.jdoStateManager.replacingLongField(<span class="local-variable">this</span>, fieldIndex);
                <span class="keyword">break</span>;
            }
            <span class="keyword">case</span> <span class="integer">2</span>:
            {
                A a = <span class="local-variable">this</span>;
                a.name = a.jdoStateManager.replacingStringField(<span class="local-variable">this</span>, fieldIndex);
                <span class="keyword">break</span>;
            }
            <span class="keyword">default</span>:
                <span class="keyword">throw</span> <span class="keyword">new</span> <span class="exception">IllegalArgumentException</span>(<span class="string"><span class="delimiter">&quot;</span><span class="content">out of field index :</span><span class="delimiter">&quot;</span></span> + fieldIndex);
        }
    }

    <span class="directive">public</span> <span class="type">void</span> jdoProvideField(<span class="type">int</span> fieldIndex)
    {
        <span class="keyword">if</span> (jdoStateManager == <span class="predefined-constant">null</span>)
            <span class="keyword">throw</span> <span class="keyword">new</span> <span class="exception">IllegalStateException</span>(<span class="string"><span class="delimiter">&quot;</span><span class="content">state manager is null</span><span class="delimiter">&quot;</span></span>);
        <span class="keyword">switch</span> (fieldIndex)
        {
            <span class="keyword">case</span> <span class="integer">0</span>:
                jdoStateManager.providedObjectField(<span class="local-variable">this</span>, fieldIndex, b);
                <span class="keyword">break</span>;
            <span class="keyword">case</span> <span class="integer">1</span>:
                jdoStateManager.providedLongField(<span class="local-variable">this</span>, fieldIndex, id);
                <span class="keyword">break</span>;
            <span class="keyword">case</span> <span class="integer">2</span>:
                jdoStateManager.providedStringField(<span class="local-variable">this</span>, fieldIndex, name);
                <span class="keyword">break</span>;
            <span class="keyword">default</span>:
                <span class="keyword">throw</span> <span class="keyword">new</span> <span class="exception">IllegalArgumentException</span>(<span class="string"><span class="delimiter">&quot;</span><span class="content">out of field index :</span><span class="delimiter">&quot;</span></span> + fieldIndex);
         }
    }

    <span class="directive">protected</span> <span class="directive">final</span> <span class="type">void</span> jdoCopyField(A obj, <span class="type">int</span> index)
    {
        <span class="keyword">switch</span> (index)
        {
            <span class="keyword">case</span> <span class="integer">0</span>:
                b = obj.b;
                <span class="keyword">break</span>;
            <span class="keyword">case</span> <span class="integer">1</span>:
                id = obj.id;
                <span class="keyword">break</span>;
            <span class="keyword">case</span> <span class="integer">2</span>:
                name = obj.name;
                <span class="keyword">break</span>;
            <span class="keyword">default</span>:
                <span class="keyword">throw</span> <span class="keyword">new</span> <span class="exception">IllegalArgumentException</span>(<span class="string"><span class="delimiter">&quot;</span><span class="content">out of field index :</span><span class="delimiter">&quot;</span></span> + index);
        }
    }

    <span class="directive">public</span> <span class="type">void</span> jdoCopyFields(<span class="predefined-type">Object</span> obj, <span class="type">int</span><span class="type">[]</span> fieldNumbers)
    {
        <span class="keyword">if</span> (jdoStateManager == <span class="predefined-constant">null</span>)
            <span class="keyword">throw</span> <span class="keyword">new</span> <span class="exception">IllegalStateException</span>(<span class="string"><span class="delimiter">&quot;</span><span class="content">state manager is null</span><span class="delimiter">&quot;</span></span>);
        <span class="keyword">if</span> (fieldNumbers == <span class="predefined-constant">null</span>)
            <span class="keyword">throw</span> <span class="keyword">new</span> <span class="exception">IllegalStateException</span>(<span class="string"><span class="delimiter">&quot;</span><span class="content">fieldNumbers is null</span><span class="delimiter">&quot;</span></span>);
        <span class="keyword">if</span> (obj <span class="keyword">instanceof</span> A != <span class="predefined-constant">true</span>)
            <span class="keyword">throw</span> <span class="keyword">new</span> <span class="exception">IllegalArgumentException</span>(<span class="string"><span class="delimiter">&quot;</span><span class="content">object is not org.apache.jdo.test.A</span><span class="delimiter">&quot;</span></span>);
        A me = (A) obj;
        <span class="keyword">if</span> (jdoStateManager != me.jdoStateManager)
            <span class="keyword">throw</span> <span class="keyword">new</span> <span class="exception">IllegalArgumentException</span>(<span class="string"><span class="delimiter">&quot;</span><span class="content">state manager unmatch</span><span class="delimiter">&quot;</span></span>);
        <span class="type">int</span> i = fieldNumbers.length - <span class="integer">1</span>;
        <span class="keyword">if</span> (i &gt;= <span class="integer">0</span>)
        {
            <span class="keyword">do</span>
                jdoCopyField(me, fieldNumbers[i]);
            <span class="keyword">while</span> (--i &gt;= <span class="integer">0</span>);
        }
    }

    <span class="directive">private</span> <span class="directive">static</span> <span class="directive">final</span> <span class="predefined-type">String</span><span class="type">[]</span> __jdoFieldNamesInit()
    {
        <span class="keyword">return</span> <span class="keyword">new</span> <span class="predefined-type">String</span><span class="type">[]</span> { <span class="string"><span class="delimiter">&quot;</span><span class="content">b</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">id</span><span class="delimiter">&quot;</span></span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">name</span><span class="delimiter">&quot;</span></span> };
    }

    <span class="directive">private</span> <span class="directive">static</span> <span class="directive">final</span> <span class="predefined-type">Class</span><span class="type">[]</span> __jdoFieldTypesInit()
    {
        <span class="keyword">return</span> <span class="keyword">new</span> <span class="predefined-type">Class</span><span class="type">[]</span> { ___jdo<span class="error">$</span>loadClass(<span class="string"><span class="delimiter">&quot;</span><span class="content">org.apache.jdo.test.B</span><span class="delimiter">&quot;</span></span>), <span class="predefined-type">Long</span>.TYPE,
                 ___jdo<span class="error">$</span>loadClass(<span class="string"><span class="delimiter">&quot;</span><span class="content">java.lang.String</span><span class="delimiter">&quot;</span></span>) };
    }

    <span class="directive">private</span> <span class="directive">static</span> <span class="directive">final</span> <span class="type">byte</span><span class="type">[]</span> __jdoFieldFlagsInit()
    {
        <span class="keyword">return</span> <span class="keyword">new</span> <span class="type">byte</span><span class="type">[]</span> { <span class="integer">10</span>, <span class="integer">24</span>, <span class="integer">21</span> };
    }

    <span class="directive">protected</span> <span class="directive">static</span> <span class="type">int</span> __jdoGetInheritedFieldCount()
    {
        <span class="keyword">return</span> <span class="integer">0</span>;
    }

    <span class="directive">protected</span> <span class="directive">static</span> <span class="type">int</span> jdoGetManagedFieldCount()
    {
        <span class="keyword">return</span> <span class="integer">3</span>;
    }

    <span class="directive">private</span> <span class="directive">static</span> <span class="predefined-type">Class</span> __jdoPersistenceCapableSuperclassInit()
    {
        <span class="keyword">return</span> <span class="predefined-constant">null</span>;
    }

    <span class="directive">public</span> <span class="directive">static</span> <span class="predefined-type">Class</span> ___jdo<span class="error">$</span>loadClass(<span class="predefined-type">String</span> className)
    {
        <span class="keyword">try</span>
        {
            <span class="keyword">return</span> <span class="predefined-type">Class</span>.forName(className);
        }
        <span class="keyword">catch</span> (<span class="exception">ClassNotFoundException</span> e)
        {
            <span class="keyword">throw</span> <span class="keyword">new</span> <span class="exception">NoClassDefFoundError</span>(e.getMessage());
        }
    }

    <span class="directive">private</span> <span class="predefined-type">Object</span> jdoSuperClone()
    <span class="directive">throws</span> <span class="exception">CloneNotSupportedException</span>
    {
        A o = (A) <span class="local-variable">super</span>.clone();
        o.jdoFlags = (<span class="type">byte</span>) <span class="integer">0</span>;
        o.jdoStateManager = <span class="predefined-constant">null</span>;
        <span class="keyword">return</span> o;
    }

    <span class="directive">public</span> A()
    {
        <span class="comment">/* empty */</span>
    }

    <span class="directive">static</span> <span class="type">void</span> jdoSetb(A objPC, B b_m)
    {
        <span class="keyword">if</span> (objPC.jdoStateManager == <span class="predefined-constant">null</span>)
            objPC.b = b_m;
        <span class="keyword">else</span>
            objPC.jdoStateManager.setObjectField(objPC, <span class="integer">0</span>, objPC.b, b_m);
        <span class="keyword">if</span> (objPC.jdoIsDetached() == <span class="predefined-constant">true</span>)
            ((<span class="predefined-type">BitSet</span>) objPC.jdoDetachedState[<span class="integer">3</span>]).set(<span class="integer">0</span>);
    }

    <span class="directive">static</span> B jdoGetb(A objPC)
    {
        <span class="keyword">if</span> (objPC.jdoStateManager != <span class="predefined-constant">null</span>
        &amp;&amp; !objPC.jdoStateManager.isLoaded(objPC, <span class="integer">0</span>))
            <span class="keyword">return</span> (B) objPC.jdoStateManager.getObjectField(objPC, <span class="integer">0</span>, objPC.b);
        <span class="keyword">if</span> (objPC.jdoIsDetached() != <span class="predefined-constant">false</span>
        &amp;&amp; ((<span class="predefined-type">BitSet</span>) objPC.jdoDetachedState[<span class="integer">2</span>]).get(<span class="integer">0</span>) != <span class="predefined-constant">true</span>
        &amp;&amp; ((<span class="predefined-type">BitSet</span>) objPC.jdoDetachedState[<span class="integer">3</span>]).get(<span class="integer">0</span>) != <span class="predefined-constant">true</span>)
            <span class="keyword">throw</span> <span class="keyword">new</span> JDODetachedFieldAccessException
              (<span class="string"><span class="delimiter">&quot;</span><span class="content">You have just attempted to access field </span><span class="char">\&quot;</span><span class="content">b</span><span class="char">\&quot;</span><span class="content"> yet this field was not detached when you detached the object. </span><span class="delimiter">&quot;</span></span> +
               <span class="string"><span class="delimiter">&quot;</span><span class="content">Either dont access this field, or detach the field when detaching the object.</span><span class="delimiter">&quot;</span></span>);
        <span class="keyword">return</span> objPC.b;
    }

    <span class="directive">static</span> <span class="type">void</span> jdoSetid(A objPC, <span class="type">long</span> id_n)
    {
        objPC.id = id_n;
    }

    <span class="directive">static</span> <span class="type">long</span> jdoGetid(A objPC)
    {
        <span class="keyword">return</span> objPC.id;
    }

    <span class="directive">static</span> <span class="type">void</span> jdoSetname(A objPC, <span class="predefined-type">String</span> name_c)
    {
        <span class="keyword">if</span> (objPC.jdoFlags != <span class="integer">0</span> &amp;&amp; objPC.jdoStateManager != <span class="predefined-constant">null</span>)
            objPC.jdoStateManager.setStringField(objPC, <span class="integer">2</span>, objPC.name, name_c);
        <span class="keyword">else</span>
        {
            objPC.name = name_c;
            <span class="keyword">if</span> (objPC.jdoIsDetached() == <span class="predefined-constant">true</span>)
                ((<span class="predefined-type">BitSet</span>) objPC.jdoDetachedState[<span class="integer">3</span>]).set(<span class="integer">2</span>);
        }
    }

    <span class="directive">static</span> <span class="predefined-type">String</span> jdoGetname(A objPC)
    {
        <span class="keyword">if</span> (objPC.jdoFlags &gt; <span class="integer">0</span> &amp;&amp; objPC.jdoStateManager != <span class="predefined-constant">null</span> &amp;&amp; !objPC.jdoStateManager.isLoaded(objPC, <span class="integer">2</span>))
            <span class="keyword">return</span> objPC.jdoStateManager.getStringField(objPC, <span class="integer">2</span>, objPC.name);
        <span class="keyword">if</span> (objPC.jdoIsDetached() != <span class="predefined-constant">false</span> &amp;&amp; ((<span class="predefined-type">BitSet</span>) objPC.jdoDetachedState[<span class="integer">2</span>]).get(<span class="integer">2</span>) != <span class="predefined-constant">true</span>)
            <span class="keyword">throw</span> <span class="keyword">new</span> JDODetachedFieldAccessException
              (<span class="string"><span class="delimiter">&quot;</span><span class="content">You have just attempted to access field </span><span class="char">\&quot;</span><span class="content">name</span><span class="char">\&quot;</span><span class="content"> yet this field was not detached when you detached the object.</span><span class="delimiter">&quot;</span></span> +
               <span class="string"><span class="delimiter">&quot;</span><span class="content">Either dont access this field, or detach the field when detaching the object.</span><span class="delimiter">&quot;</span></span>);
        <span class="keyword">return</span> objPC.name;
    }

    <span class="directive">public</span> A(<span class="predefined-type">String</span> name)
    {
        jdoSetname(<span class="local-variable">this</span>, name);
    }
}</code></pre>
</div>
</div>
</div>
</div>
                </div>
            </div>
        </div>
    
</div>

  <footer style="color:#fff; background-color:#222222; padding: 5px;">
  <div class="container">
      <div class="row" style="margin-top:25px">
          <div class="col-sm" align="center">
      <a href="https://www.facebook.com/JavaDataObjects" class="externalLink" title="Facebook">Facebook</a>
              |
                          <a href="https://twitter.com/JavaDataObjects" class="externalLink" title="Twitter">Twitter</a>
              |
                          <a href="http://wiki.apache.org/jdo" class="externalLink" title="Wiki">Wiki</a>
              |
                          <a href="http://issues.apache.org/jira/secure/BrowseProject.jspa?id=10630" class="externalLink" title="Issue Tracker">Issue Tracker</a>
              |
                          <a href="mail-lists.html" title="Mailing Lists">Mailing Lists</a>
              |
                          <a href="api31/apidocs/index.html" title="Latest Javadocs">Latest Javadocs</a>
              |
                          <a href="https://privacy.apache.org/policies/privacy-policy-public.html" title="Privacy Policy">Privacy Policy</a>
          </div>
      </div>
      <p class="text-center" style="margin-top:16px">&copy; 2005-2022 Apache Software Foundation. All Rights Reserved.</p>
  </div>
  </footer>

</body>
</html>