
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
  <HEAD>
    <!-- $PAGETITLE -->
    <TITLE>OpenEJB - JAXB2 Java Inheritance</TITLE>
    <LINK href="http://openejb.apache.org/all.css" rel="stylesheet" type="text/css">
    <!--[if IE]><link rel="stylesheet" type="text/css" media="screen, projection" href="openejb.apache.org/ie.css"><![endif]-->

    <LINK rel="SHORTCUT ICON" href="http://openejb.apache.org/images/favicon.ico">
    <META http-equiv="Content-Type" content="text/html;charset=UTF-8">
<SCRIPT language="javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js" type="text/javascript"></SCRIPT>
<SCRIPT language="javascript" src="http://openejb.apache.org/tweet/jquery.tweet.js" type="text/javascript"></SCRIPT>
<SCRIPT type="text/javascript">
    $(document).ready(function(){
        $(".tweet").tweet({
        avatar_size: 32,
        count: 4,
	fetch:25,
        username: "openejb",
        list: "contributors",
	template:"{avatar}{text}",
	filter: function(t){ return /openejb/i.test(t["tweet_raw_text"]); },
        loading_text: "loading list..."
        });
    });
</SCRIPT> 

  </HEAD>
  <BODY>

    <!-- Delay the loading of the external javascript file needed for labels (as it takes too long to load and visibly holds loading of the page body) -->
    <!-- To do this without javascript errors over undefined functions, we need to declare stubs here (that are overrided later by the proper implementations) -->
    <SCRIPT language="JavaScript" type="text/javascript">
      function doAddLabel(hideTextfieldAfterAddParam)
      {
      // stub
      }

      function onAddLabel()
      {
      // stub
      }

      function showLabelsInput()
      {
      // stub
      }
    </SCRIPT>

    <A name="top"></A>
    <TABLE class="frameTable" cellpadding="0" cellspacing="0" border="0">
      <TR class="Row1">
        <TD class="Col1"><IMG alt="" src="http://openejb.apache.org/images/dotTrans.gif"></TD>
        <TD class="Col2"><IMG alt="" src="http://openejb.apache.org/images/dotTrans.gif"></TD>
        <TD class="Col3"><IMG alt="" src="http://openejb.apache.org/images/dotTrans.gif"></TD>
        <TD class="Col4"><IMG alt="" src="http://openejb.apache.org/images/dotTrans.gif"></TD>
        <TD class="Col5"><IMG alt="" src="http://openejb.apache.org/images/dotTrans.gif"></TD>
      </TR>
      <TR class="Row2">
        <TD class="Col1"><IMG alt="" src="http://openejb.apache.org/images/dotTrans.gif"></TD>
        <TD class="Col2">&nbsp;</TD>
        <TD class="Col3" id="breadcrumbs">
          <!-- $TOP_NAV_BAR -->
                    <A href="index.html" title="Index">Home</A> | <A href="news.html" title="News">News</A> | <A href="faq.html" title="FAQ">FAQ</A> | <A href="download.html" title="Download">Download</A> | <A href="mailing-lists.html" title="Mailing Lists">Lists</A> | <A href="http://issues.apache.org/jira/browse/OPENEJB" class="external-link" rel="nofollow">Issues</A>

        </TD>
        <TD class="Col4"><IMG alt="" src="http://openejb.apache.org/images/dotTrans.gif"></TD>
        <TD class="Col5">&nbsp;</TD>
      </TR>
      <TR class="Row3">
        <TD class="Col1"><IMG alt="" class="Row3Img" id="thinLine" src="http://openejb.apache.org/images/line_sm.gif"></TD>
        <TD class="Col2"><IMG alt="" class="Row3Img" src="http://openejb.apache.org/images/dotTrans.gif"></TD>
        <TD class="Col3"><IMG alt="" class="Row3Img" src="http://openejb.apache.org/images/dotTrans.gif"></TD>
        <TD class="Col4"><IMG alt="" src="http://openejb.apache.org/images/dotTrans.gif"></TD>
        <TD class="Col5"><IMG alt="" class="Row3Img" src="http://openejb.apache.org/images/dotTrans.gif"></TD>
      </TR>
      <TR class="Row4">
        <TD class="Col1">
          <SPAN id="Navigation">

                        <H3><A name="Navigation-Overview"></A>Overview</H3>

<UL class="alternate" type="square">
	<LI><A href="index.html" title="Index">Home</A></LI>
	<LI><A href="news.html" title="News">News</A></LI>
	<LI><A href="faq.html" title="FAQ">FAQ</A></LI>
	<LI><A href="download.html" title="Download">Download</A></LI>
	<LI><A href="../OPENEJBx30/index.html" title="Index">Documentation</A></LI>
	<LI><A href="examples.html" title="Examples">Examples</A></LI>
	<LI><A href="http://cwiki.apache.org/confluence/display/OPENEJB/Lightening%20Demos" class="external-link" rel="nofollow">Lightning Demos</A></LI>
	<LI><A href="mailing-lists.html" title="Mailing Lists">Mailing Lists</A></LI>
	<LI><A href="source-code.html" title="Source Code">Source Code</A></LI>
	<LI><A href="http://blogs.apache.org/openejb" class="external-link" rel="nofollow">Project Blog</A></LI>
</UL>


<H3><A name="Navigation-Servers"></A>Servers</H3>

<UL class="alternate" type="square">
	<LI><A href="local-server.html" title="Local Server">Local</A></LI>
	<LI><A href="remote-server.html" title="Remote Server">Remote</A></LI>
</UL>


<H3><A name="Navigation-Integrations"></A>Integrations</H3>

<UL class="alternate" type="square">
	<LI><A href="../OPENEJBx30/tomcat.html" title="Tomcat">Tomcat</A></LI>
	<LI><A href="geronimo.html" title="Geronimo">Geronimo</A></LI>
	<LI><A href="webobjects.html" title="WebObjects">WebObjects</A></LI>
</UL>


<H3><A name="Navigation-Community"></A>Community</H3>

<UL class="alternate" type="square">
	<LI><A href="team.html" title="Team">Team</A></LI>
	<LI><A href="articles.html" title="Articles">Articles</A></LI>
	<LI><A href="http://webchat.freenode.net/?channels=openejb" class="external-link" rel="nofollow">IRC</A></LI>
</UL>


<H3><A name="Navigation-RelatedProjects"></A>Related Projects</H3>

<UL class="alternate" type="square">
	<LI><A href="http://activemq.apache.org/" class="external-link" rel="nofollow">ActiveMQ</A></LI>
	<LI><A href="http://openjpa.apache.org/" class="external-link" rel="nofollow">OpenJPA</A></LI>
	<LI><A href="http://cxf.apache.org/" class="external-link" rel="nofollow">CXF</A></LI>
</UL>


<H3><A name="Navigation-Index"></A>Index</H3>
<UL class="alternate" type="square">
	<LI><A href="space-index.html" title="Space Index">Site Index</A></LI>
	<LI><A href="../OPENEJBx30/space-index.html" title="Space Index">Doc Index</A></LI>
</UL>

            <H3>
              <A name="Navigation-Feeds"></A>
              Feeds
            </H3>

            <UL class="feeds">
            <LI>
              <A href="http://cwiki.apache.org/confluence/spaces/rss.action?key=OPENEJB&newPages=false">
              <IMG src="http://openejb.apache.org/images/rss.gif"></A>
              <A class="feedsText" href="http://cwiki.apache.org/confluence/spaces/rss.action?key=OPENEJB&newPages=false">Site</A>
            </LI>

            <LI><A href="http://cwiki.apache.org/confluence/spaces/blogrss.action?key=OPENEJB">
              <IMG src="http://openejb.apache.org/images/rss.gif"></A>
              <A class="feedsText" href="http://cwiki.apache.org/confluence/spaces/blogrss.action?key=OPENEJB">News</A>
            </LI>
            </UL>
          </SPAN>
        </TD>
        <TD class="Col2">&nbsp;</TD>
        <TD class="Col3">
          <TABLE id="PageHeader" border="0" width="100%">
            <TR>
              <TD>
                <A href="http://openejb.org/">
                  <IMG hspace="0" src="http://openejb.apache.org/images/logo_openejb.gif" vspace="0">
                </A>
              </TD>
              <TD align="right">
                <A href="http://www.apache.org/">
                  <IMG src="http://www.apache.org/images/asf-logo.gif" width="258" height="66">
                </A>
              </TD>
            </TR>
            <TR>
              <TD id="page_title">
                <!-- $TITLE -->
                JAXB2 Java Inheritance
              </TD>

              <TD align="right">
                <BR><BR>
                <!-- Google CSE Search Box Begins  -->
                <FORM id="searchbox_010475492895890475512:_t4iqjrgx90" action="http://www.google.com/cse">
                  <INPUT type="hidden" name="cx" value="010475492895890475512:_t4iqjrgx90">
                  <INPUT type="hidden" name="cof" value="FORID:0">
                  <INPUT name="q" type="text" size="25">
                  <INPUT type="submit" name="sa" value="Search">
                </FORM>
                <SCRIPT type="text/javascript" src="http://www.google.com/coop/cse/brand?form=searchbox_010475492895890475512:_t4iqjrgx90"></SCRIPT>
                <!-- Google CSE Search Box Ends -->

              </TD>
            </TR>
          </TABLE>
          <P>
            <!-- $BODY -->
            <DIV id="PageContent">
              
<H1><A name="JAXB2JavaInheritance-EnterpriseBeansuperclass"></A>EnterpriseBean superclass</H1>

<DIV class="code panel" style="border-width: 1px;"><DIV class="codeHeader panelHeader" style="border-bottom-width: 1px;"><B>EnterpriseBean.java</B></DIV><DIV class="codeContent panelContent">
<PRE class="code-java">/**
 *
 * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
 *
 *  Licensed under the Apache License, Version 2.0 (the <SPAN class="code-quote">&quot;License&quot;</SPAN>);
 *  you may not use <SPAN class="code-keyword">this</SPAN> file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *     http:<SPAN class="code-comment">//www.apache.org/licenses/LICENSE-2.0
</SPAN> *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an <SPAN class="code-quote">&quot;AS IS&quot;</SPAN> BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License <SPAN class="code-keyword">for</SPAN> the specific language governing permissions and
 *  limitations under the License.
 */
<SPAN class="code-keyword">package</SPAN> org.openejb.jee2;

<SPAN class="code-keyword">import</SPAN> javax.xml.bind.annotation.XmlElement;
<SPAN class="code-keyword">import</SPAN> javax.xml.bind.annotation.XmlAttribute;
<SPAN class="code-keyword">import</SPAN> javax.xml.bind.annotation.XmlID;
<SPAN class="code-keyword">import</SPAN> javax.xml.bind.annotation.XmlAccessorType;
<SPAN class="code-keyword">import</SPAN> javax.xml.bind.annotation.XmlAccessType;
<SPAN class="code-keyword">import</SPAN> javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
<SPAN class="code-keyword">import</SPAN> javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
<SPAN class="code-keyword">import</SPAN> java.util.List;
<SPAN class="code-keyword">import</SPAN> java.util.ArrayList;

<SPAN class="code-keyword">public</SPAN> <SPAN class="code-keyword">abstract</SPAN> class EnterpriseBean {
    @XmlElement(required = <SPAN class="code-keyword">true</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> List&lt;Text&gt; description;
    @XmlElement(name = <SPAN class="code-quote">&quot;display-name&quot;</SPAN>, required = <SPAN class="code-keyword">true</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> List&lt;Text&gt; displayName;
    @XmlElement(required = <SPAN class="code-keyword">true</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> List&lt;IconType&gt; icon;
    @XmlElement(name = <SPAN class="code-quote">&quot;ejb-name&quot;</SPAN>, required = <SPAN class="code-keyword">true</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> <SPAN class="code-object">String</SPAN> ejbName;
    @XmlElement(name = <SPAN class="code-quote">&quot;mapped-name&quot;</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> <SPAN class="code-object">String</SPAN> mappedName;
    @XmlElement(name = <SPAN class="code-quote">&quot;ejb-class&quot;</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> <SPAN class="code-object">String</SPAN> ejbClass;
    @XmlElement(name = <SPAN class="code-quote">&quot;around-invoke&quot;</SPAN>, required = <SPAN class="code-keyword">true</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> List&lt;AroundInvokeType&gt; aroundInvoke;
    @XmlElement(name = <SPAN class="code-quote">&quot;env-entry&quot;</SPAN>, required = <SPAN class="code-keyword">true</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> List&lt;EnvEntryType&gt; envEntry;
    @XmlElement(name = <SPAN class="code-quote">&quot;ejb-ref&quot;</SPAN>, required = <SPAN class="code-keyword">true</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> List&lt;EjbRefType&gt; ejbRef;
    @XmlElement(name = <SPAN class="code-quote">&quot;ejb-local-ref&quot;</SPAN>, required = <SPAN class="code-keyword">true</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> List&lt;EjbLocalRefType&gt; ejbLocalRef;
    @XmlElement(name = <SPAN class="code-quote">&quot;service-ref&quot;</SPAN>, required = <SPAN class="code-keyword">true</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> List&lt;ServiceRefType&gt; serviceRef;
    @XmlElement(name = <SPAN class="code-quote">&quot;resource-ref&quot;</SPAN>, required = <SPAN class="code-keyword">true</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> List&lt;ResourceRefType&gt; resourceRef;
    @XmlElement(name = <SPAN class="code-quote">&quot;resource-env-ref&quot;</SPAN>, required = <SPAN class="code-keyword">true</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> List&lt;ResourceEnvRefType&gt; resourceEnvRef;
    @XmlElement(name = <SPAN class="code-quote">&quot;message-destination-ref&quot;</SPAN>, required = <SPAN class="code-keyword">true</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> List&lt;MessageDestinationRefType&gt; messageDestinationRef;
    @XmlElement(name = <SPAN class="code-quote">&quot;persistence-context-ref&quot;</SPAN>, required = <SPAN class="code-keyword">true</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> List&lt;PersistenceContextRefType&gt; persistenceContextRef;
    @XmlElement(name = <SPAN class="code-quote">&quot;persistence-unit-ref&quot;</SPAN>, required = <SPAN class="code-keyword">true</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> List&lt;PersistenceUnitRefType&gt; persistenceUnitRef;
    @XmlElement(name = <SPAN class="code-quote">&quot;post-construct&quot;</SPAN>, required = <SPAN class="code-keyword">true</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> List&lt;LifecycleCallbackType&gt; postConstruct;
    @XmlElement(name = <SPAN class="code-quote">&quot;pre-destroy&quot;</SPAN>, required = <SPAN class="code-keyword">true</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> List&lt;LifecycleCallbackType&gt; preDestroy;
    @XmlElement(name = <SPAN class="code-quote">&quot;security-identity&quot;</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> SecurityIdentityType securityIdentity;
    @XmlAttribute
    @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
    @XmlID
    <SPAN class="code-keyword">protected</SPAN> <SPAN class="code-object">String</SPAN> id;

    <SPAN class="code-keyword">public</SPAN> List&lt;Text&gt; getDescription() {
        <SPAN class="code-keyword">if</SPAN> (description == <SPAN class="code-keyword">null</SPAN>) {
            description = <SPAN class="code-keyword">new</SPAN> ArrayList&lt;Text&gt;();
        }
        <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">this</SPAN>.description;
    }

    <SPAN class="code-keyword">public</SPAN> List&lt;Text&gt; getDisplayName() {
        <SPAN class="code-keyword">if</SPAN> (displayName == <SPAN class="code-keyword">null</SPAN>) {
            displayName = <SPAN class="code-keyword">new</SPAN> ArrayList&lt;Text&gt;();
        }
        <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">this</SPAN>.displayName;
    }

    <SPAN class="code-keyword">public</SPAN> List&lt;IconType&gt; getIcon() {
        <SPAN class="code-keyword">if</SPAN> (icon == <SPAN class="code-keyword">null</SPAN>) {
            icon = <SPAN class="code-keyword">new</SPAN> ArrayList&lt;IconType&gt;();
        }
        <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">this</SPAN>.icon;
    }

    <SPAN class="code-keyword">public</SPAN> <SPAN class="code-object">String</SPAN> getEjbName() {
        <SPAN class="code-keyword">return</SPAN> ejbName;
    }

    <SPAN class="code-keyword">public</SPAN> void setEjbName(<SPAN class="code-object">String</SPAN> value) {
        <SPAN class="code-keyword">this</SPAN>.ejbName = value;
    }

    <SPAN class="code-keyword">public</SPAN> <SPAN class="code-object">String</SPAN> getMappedName() {
        <SPAN class="code-keyword">return</SPAN> mappedName;
    }

    <SPAN class="code-keyword">public</SPAN> void setMappedName(<SPAN class="code-object">String</SPAN> value) {
        <SPAN class="code-keyword">this</SPAN>.mappedName = value;
    }

    <SPAN class="code-keyword">public</SPAN> <SPAN class="code-object">String</SPAN> getEjbClass() {
        <SPAN class="code-keyword">return</SPAN> ejbClass;
    }

    <SPAN class="code-keyword">public</SPAN> void setEjbClass(<SPAN class="code-object">String</SPAN> value) {
        <SPAN class="code-keyword">this</SPAN>.ejbClass = value;
    }

    <SPAN class="code-keyword">public</SPAN> List&lt;AroundInvokeType&gt; getAroundInvoke() {
        <SPAN class="code-keyword">if</SPAN> (aroundInvoke == <SPAN class="code-keyword">null</SPAN>) {
            aroundInvoke = <SPAN class="code-keyword">new</SPAN> ArrayList&lt;AroundInvokeType&gt;();
        }
        <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">this</SPAN>.aroundInvoke;
    }

    <SPAN class="code-keyword">public</SPAN> List&lt;EnvEntryType&gt; getEnvEntry() {
        <SPAN class="code-keyword">if</SPAN> (envEntry == <SPAN class="code-keyword">null</SPAN>) {
            envEntry = <SPAN class="code-keyword">new</SPAN> ArrayList&lt;EnvEntryType&gt;();
        }
        <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">this</SPAN>.envEntry;
    }

    <SPAN class="code-keyword">public</SPAN> List&lt;EjbRefType&gt; getEjbRef() {
        <SPAN class="code-keyword">if</SPAN> (ejbRef == <SPAN class="code-keyword">null</SPAN>) {
            ejbRef = <SPAN class="code-keyword">new</SPAN> ArrayList&lt;EjbRefType&gt;();
        }
        <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">this</SPAN>.ejbRef;
    }

    <SPAN class="code-keyword">public</SPAN> List&lt;EjbLocalRefType&gt; getEjbLocalRef() {
        <SPAN class="code-keyword">if</SPAN> (ejbLocalRef == <SPAN class="code-keyword">null</SPAN>) {
            ejbLocalRef = <SPAN class="code-keyword">new</SPAN> ArrayList&lt;EjbLocalRefType&gt;();
        }
        <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">this</SPAN>.ejbLocalRef;
    }

    <SPAN class="code-keyword">public</SPAN> List&lt;ServiceRefType&gt; getServiceRef() {
        <SPAN class="code-keyword">if</SPAN> (serviceRef == <SPAN class="code-keyword">null</SPAN>) {
            serviceRef = <SPAN class="code-keyword">new</SPAN> ArrayList&lt;ServiceRefType&gt;();
        }
        <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">this</SPAN>.serviceRef;
    }

    <SPAN class="code-keyword">public</SPAN> List&lt;ResourceRefType&gt; getResourceRef() {
        <SPAN class="code-keyword">if</SPAN> (resourceRef == <SPAN class="code-keyword">null</SPAN>) {
            resourceRef = <SPAN class="code-keyword">new</SPAN> ArrayList&lt;ResourceRefType&gt;();
        }
        <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">this</SPAN>.resourceRef;
    }

    <SPAN class="code-keyword">public</SPAN> List&lt;ResourceEnvRefType&gt; getResourceEnvRef() {
        <SPAN class="code-keyword">if</SPAN> (resourceEnvRef == <SPAN class="code-keyword">null</SPAN>) {
            resourceEnvRef = <SPAN class="code-keyword">new</SPAN> ArrayList&lt;ResourceEnvRefType&gt;();
        }
        <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">this</SPAN>.resourceEnvRef;
    }

    <SPAN class="code-keyword">public</SPAN> List&lt;MessageDestinationRefType&gt; getMessageDestinationRef() {
        <SPAN class="code-keyword">if</SPAN> (messageDestinationRef == <SPAN class="code-keyword">null</SPAN>) {
            messageDestinationRef = <SPAN class="code-keyword">new</SPAN> ArrayList&lt;MessageDestinationRefType&gt;();
        }
        <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">this</SPAN>.messageDestinationRef;
    }

    <SPAN class="code-keyword">public</SPAN> List&lt;PersistenceContextRefType&gt; getPersistenceContextRef() {
        <SPAN class="code-keyword">if</SPAN> (persistenceContextRef == <SPAN class="code-keyword">null</SPAN>) {
            persistenceContextRef = <SPAN class="code-keyword">new</SPAN> ArrayList&lt;PersistenceContextRefType&gt;();
        }
        <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">this</SPAN>.persistenceContextRef;
    }

    <SPAN class="code-keyword">public</SPAN> List&lt;PersistenceUnitRefType&gt; getPersistenceUnitRef() {
        <SPAN class="code-keyword">if</SPAN> (persistenceUnitRef == <SPAN class="code-keyword">null</SPAN>) {
            persistenceUnitRef = <SPAN class="code-keyword">new</SPAN> ArrayList&lt;PersistenceUnitRefType&gt;();
        }
        <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">this</SPAN>.persistenceUnitRef;
    }

    <SPAN class="code-keyword">public</SPAN> List&lt;LifecycleCallbackType&gt; getPostConstruct() {
        <SPAN class="code-keyword">if</SPAN> (postConstruct == <SPAN class="code-keyword">null</SPAN>) {
            postConstruct = <SPAN class="code-keyword">new</SPAN> ArrayList&lt;LifecycleCallbackType&gt;();
        }
        <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">this</SPAN>.postConstruct;
    }

    <SPAN class="code-keyword">public</SPAN> List&lt;LifecycleCallbackType&gt; getPreDestroy() {
        <SPAN class="code-keyword">if</SPAN> (preDestroy == <SPAN class="code-keyword">null</SPAN>) {
            preDestroy = <SPAN class="code-keyword">new</SPAN> ArrayList&lt;LifecycleCallbackType&gt;();
        }
        <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">this</SPAN>.preDestroy;
    }

    <SPAN class="code-keyword">public</SPAN> SecurityIdentityType getSecurityIdentity() {
        <SPAN class="code-keyword">return</SPAN> securityIdentity;
    }

    <SPAN class="code-keyword">public</SPAN> void setSecurityIdentity(SecurityIdentityType value) {
        <SPAN class="code-keyword">this</SPAN>.securityIdentity = value;
    }

    <SPAN class="code-keyword">public</SPAN> <SPAN class="code-object">String</SPAN> getId() {
        <SPAN class="code-keyword">return</SPAN> id;
    }

    <SPAN class="code-keyword">public</SPAN> void setId(<SPAN class="code-object">String</SPAN> value) {
        <SPAN class="code-keyword">this</SPAN>.id = value;
    }
}
</PRE>
</DIV></DIV>

<H1><A name="JAXB2JavaInheritance-SessionBeanTypesubclass"></A>SessionBeanType subclass</H1>

<DIV class="code panel" style="border-width: 1px;"><DIV class="codeHeader panelHeader" style="border-bottom-width: 1px;"><B>SessionBeanType.java</B></DIV><DIV class="codeContent panelContent">
<PRE class="code-java">/**
 *
 * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
 *
 *  Licensed under the Apache License, Version 2.0 (the <SPAN class="code-quote">&quot;License&quot;</SPAN>);
 *  you may not use <SPAN class="code-keyword">this</SPAN> file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *     http:<SPAN class="code-comment">//www.apache.org/licenses/LICENSE-2.0
</SPAN> *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an <SPAN class="code-quote">&quot;AS IS&quot;</SPAN> BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License <SPAN class="code-keyword">for</SPAN> the specific language governing permissions and
 *  limitations under the License.
 */

<SPAN class="code-keyword">package</SPAN> org.openejb.jee2;

<SPAN class="code-keyword">import</SPAN> javax.xml.bind.annotation.XmlAccessType;
<SPAN class="code-keyword">import</SPAN> javax.xml.bind.annotation.XmlAccessorType;
<SPAN class="code-keyword">import</SPAN> javax.xml.bind.annotation.XmlElement;
<SPAN class="code-keyword">import</SPAN> javax.xml.bind.annotation.XmlType;
<SPAN class="code-keyword">import</SPAN> java.util.ArrayList;
<SPAN class="code-keyword">import</SPAN> java.util.List;


@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = <SPAN class="code-quote">&quot;session-beanType&quot;</SPAN>, propOrder = {
        <SPAN class="code-quote">&quot;description&quot;</SPAN>,
        <SPAN class="code-quote">&quot;displayName&quot;</SPAN>,
        <SPAN class="code-quote">&quot;icon&quot;</SPAN>,
        <SPAN class="code-quote">&quot;ejbName&quot;</SPAN>,
        <SPAN class="code-quote">&quot;mappedName&quot;</SPAN>,
        <SPAN class="code-quote">&quot;home&quot;</SPAN>,
        <SPAN class="code-quote">&quot;remote&quot;</SPAN>,
        <SPAN class="code-quote">&quot;localHome&quot;</SPAN>,
        <SPAN class="code-quote">&quot;local&quot;</SPAN>,
        <SPAN class="code-quote">&quot;businessLocal&quot;</SPAN>,
        <SPAN class="code-quote">&quot;businessRemote&quot;</SPAN>,
        <SPAN class="code-quote">&quot;serviceEndpoint&quot;</SPAN>,
        <SPAN class="code-quote">&quot;ejbClass&quot;</SPAN>,
        <SPAN class="code-quote">&quot;sessionType&quot;</SPAN>,
        <SPAN class="code-quote">&quot;timeoutMethod&quot;</SPAN>,
        <SPAN class="code-quote">&quot;initMethod&quot;</SPAN>,
        <SPAN class="code-quote">&quot;removeMethod&quot;</SPAN>,
        <SPAN class="code-quote">&quot;transactionType&quot;</SPAN>,
        <SPAN class="code-quote">&quot;aroundInvoke&quot;</SPAN>,
        <SPAN class="code-quote">&quot;envEntry&quot;</SPAN>,
        <SPAN class="code-quote">&quot;ejbRef&quot;</SPAN>,
        <SPAN class="code-quote">&quot;ejbLocalRef&quot;</SPAN>,
        <SPAN class="code-quote">&quot;serviceRef&quot;</SPAN>,
        <SPAN class="code-quote">&quot;resourceRef&quot;</SPAN>,
        <SPAN class="code-quote">&quot;resourceEnvRef&quot;</SPAN>,
        <SPAN class="code-quote">&quot;messageDestinationRef&quot;</SPAN>,
        <SPAN class="code-quote">&quot;persistenceContextRef&quot;</SPAN>,
        <SPAN class="code-quote">&quot;persistenceUnitRef&quot;</SPAN>,
        <SPAN class="code-quote">&quot;postConstruct&quot;</SPAN>,
        <SPAN class="code-quote">&quot;preDestroy&quot;</SPAN>,
        <SPAN class="code-quote">&quot;postActivate&quot;</SPAN>,
        <SPAN class="code-quote">&quot;prePassivate&quot;</SPAN>,
        <SPAN class="code-quote">&quot;securityRoleRef&quot;</SPAN>,
        <SPAN class="code-quote">&quot;securityIdentity&quot;</SPAN>
        })
<SPAN class="code-keyword">public</SPAN> class SessionBeanType <SPAN class="code-keyword">extends</SPAN> EnterpriseBean {

    <SPAN class="code-keyword">protected</SPAN> <SPAN class="code-object">String</SPAN> home;
    <SPAN class="code-keyword">protected</SPAN> <SPAN class="code-object">String</SPAN> remote;
    @XmlElement(name = <SPAN class="code-quote">&quot;local-home&quot;</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> <SPAN class="code-object">String</SPAN> localHome;
    <SPAN class="code-keyword">protected</SPAN> <SPAN class="code-object">String</SPAN> local;
    @XmlElement(name = <SPAN class="code-quote">&quot;business-local&quot;</SPAN>, required = <SPAN class="code-keyword">true</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> List&lt;<SPAN class="code-object">String</SPAN>&gt; businessLocal;
    @XmlElement(name = <SPAN class="code-quote">&quot;business-remote&quot;</SPAN>, required = <SPAN class="code-keyword">true</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> List&lt;<SPAN class="code-object">String</SPAN>&gt; businessRemote;
    @XmlElement(name = <SPAN class="code-quote">&quot;service-endpoint&quot;</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> <SPAN class="code-object">String</SPAN> serviceEndpoint;
    @XmlElement(name = <SPAN class="code-quote">&quot;session-type&quot;</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> SessionTypeType sessionType;
    @XmlElement(name = <SPAN class="code-quote">&quot;timeout-method&quot;</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> NamedMethodType timeoutMethod;
    @XmlElement(name = <SPAN class="code-quote">&quot;init-method&quot;</SPAN>, required = <SPAN class="code-keyword">true</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> List&lt;InitMethodType&gt; initMethod;
    @XmlElement(name = <SPAN class="code-quote">&quot;remove-method&quot;</SPAN>, required = <SPAN class="code-keyword">true</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> List&lt;RemoveMethodType&gt; removeMethod;
    @XmlElement(name = <SPAN class="code-quote">&quot;transaction-type&quot;</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> TransactionTypeType transactionType;
    @XmlElement(name = <SPAN class="code-quote">&quot;post-activate&quot;</SPAN>, required = <SPAN class="code-keyword">true</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> List&lt;LifecycleCallbackType&gt; postActivate;
    @XmlElement(name = <SPAN class="code-quote">&quot;pre-passivate&quot;</SPAN>, required = <SPAN class="code-keyword">true</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> List&lt;LifecycleCallbackType&gt; prePassivate;
    @XmlElement(name = <SPAN class="code-quote">&quot;security-role-ref&quot;</SPAN>, required = <SPAN class="code-keyword">true</SPAN>)
    <SPAN class="code-keyword">protected</SPAN> List&lt;SecurityRoleRefType&gt; securityRoleRef;

    <SPAN class="code-keyword">public</SPAN> <SPAN class="code-object">String</SPAN> getHome() {
        <SPAN class="code-keyword">return</SPAN> home;
    }

    <SPAN class="code-keyword">public</SPAN> void setHome(<SPAN class="code-object">String</SPAN> value) {
        <SPAN class="code-keyword">this</SPAN>.home = value;
    }

    <SPAN class="code-keyword">public</SPAN> <SPAN class="code-object">String</SPAN> getRemote() {
        <SPAN class="code-keyword">return</SPAN> remote;
    }

    <SPAN class="code-keyword">public</SPAN> void setRemote(<SPAN class="code-object">String</SPAN> value) {
        <SPAN class="code-keyword">this</SPAN>.remote = value;
    }

    <SPAN class="code-keyword">public</SPAN> <SPAN class="code-object">String</SPAN> getLocalHome() {
        <SPAN class="code-keyword">return</SPAN> localHome;
    }

    <SPAN class="code-keyword">public</SPAN> void setLocalHome(<SPAN class="code-object">String</SPAN> value) {
        <SPAN class="code-keyword">this</SPAN>.localHome = value;
    }

    <SPAN class="code-keyword">public</SPAN> <SPAN class="code-object">String</SPAN> getLocal() {
        <SPAN class="code-keyword">return</SPAN> local;
    }

    <SPAN class="code-keyword">public</SPAN> void setLocal(<SPAN class="code-object">String</SPAN> value) {
        <SPAN class="code-keyword">this</SPAN>.local = value;
    }

    <SPAN class="code-keyword">public</SPAN> List&lt;<SPAN class="code-object">String</SPAN>&gt; getBusinessLocal() {
        <SPAN class="code-keyword">if</SPAN> (businessLocal == <SPAN class="code-keyword">null</SPAN>) {
            businessLocal = <SPAN class="code-keyword">new</SPAN> ArrayList&lt;<SPAN class="code-object">String</SPAN>&gt;();
        }
        <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">this</SPAN>.businessLocal;
    }

    <SPAN class="code-keyword">public</SPAN> List&lt;<SPAN class="code-object">String</SPAN>&gt; getBusinessRemote() {
        <SPAN class="code-keyword">if</SPAN> (businessRemote == <SPAN class="code-keyword">null</SPAN>) {
            businessRemote = <SPAN class="code-keyword">new</SPAN> ArrayList&lt;<SPAN class="code-object">String</SPAN>&gt;();
        }
        <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">this</SPAN>.businessRemote;
    }

    <SPAN class="code-keyword">public</SPAN> <SPAN class="code-object">String</SPAN> getServiceEndpoint() {
        <SPAN class="code-keyword">return</SPAN> serviceEndpoint;
    }

    <SPAN class="code-keyword">public</SPAN> void setServiceEndpoint(<SPAN class="code-object">String</SPAN> value) {
        <SPAN class="code-keyword">this</SPAN>.serviceEndpoint = value;
    }

    <SPAN class="code-keyword">public</SPAN> SessionTypeType getSessionType() {
        <SPAN class="code-keyword">return</SPAN> sessionType;
    }

    <SPAN class="code-keyword">public</SPAN> void setSessionType(SessionTypeType value) {
        <SPAN class="code-keyword">this</SPAN>.sessionType = value;
    }

    <SPAN class="code-keyword">public</SPAN> NamedMethodType getTimeoutMethod() {
        <SPAN class="code-keyword">return</SPAN> timeoutMethod;
    }

    <SPAN class="code-keyword">public</SPAN> void setTimeoutMethod(NamedMethodType value) {
        <SPAN class="code-keyword">this</SPAN>.timeoutMethod = value;
    }

    <SPAN class="code-keyword">public</SPAN> List&lt;InitMethodType&gt; getInitMethod() {
        <SPAN class="code-keyword">if</SPAN> (initMethod == <SPAN class="code-keyword">null</SPAN>) {
            initMethod = <SPAN class="code-keyword">new</SPAN> ArrayList&lt;InitMethodType&gt;();
        }
        <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">this</SPAN>.initMethod;
    }

    <SPAN class="code-keyword">public</SPAN> List&lt;RemoveMethodType&gt; getRemoveMethod() {
        <SPAN class="code-keyword">if</SPAN> (removeMethod == <SPAN class="code-keyword">null</SPAN>) {
            removeMethod = <SPAN class="code-keyword">new</SPAN> ArrayList&lt;RemoveMethodType&gt;();
        }
        <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">this</SPAN>.removeMethod;
    }

    <SPAN class="code-keyword">public</SPAN> TransactionTypeType getTransactionType() {
        <SPAN class="code-keyword">return</SPAN> transactionType;
    }

    <SPAN class="code-keyword">public</SPAN> void setTransactionType(TransactionTypeType value) {
        <SPAN class="code-keyword">this</SPAN>.transactionType = value;
    }

    <SPAN class="code-keyword">public</SPAN> List&lt;LifecycleCallbackType&gt; getPostActivate() {
        <SPAN class="code-keyword">if</SPAN> (postActivate == <SPAN class="code-keyword">null</SPAN>) {
            postActivate = <SPAN class="code-keyword">new</SPAN> ArrayList&lt;LifecycleCallbackType&gt;();
        }
        <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">this</SPAN>.postActivate;
    }

    <SPAN class="code-keyword">public</SPAN> List&lt;LifecycleCallbackType&gt; getPrePassivate() {
        <SPAN class="code-keyword">if</SPAN> (prePassivate == <SPAN class="code-keyword">null</SPAN>) {
            prePassivate = <SPAN class="code-keyword">new</SPAN> ArrayList&lt;LifecycleCallbackType&gt;();
        }
        <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">this</SPAN>.prePassivate;
    }

    <SPAN class="code-keyword">public</SPAN> List&lt;SecurityRoleRefType&gt; getSecurityRoleRef() {
        <SPAN class="code-keyword">if</SPAN> (securityRoleRef == <SPAN class="code-keyword">null</SPAN>) {
            securityRoleRef = <SPAN class="code-keyword">new</SPAN> ArrayList&lt;SecurityRoleRefType&gt;();
        }
        <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">this</SPAN>.securityRoleRef;
    }
}
</PRE>
</DIV></DIV>
            </DIV>
          </P>
        </TD>
        <TD class="Col4"><IMG src="http://openejb.apache.org/images/dotTrans.gif"></TD>
        <TD class="Col5">
                    
        </TD>
      </TR>
      <TR class="Row5">
        <TD class="Col1">&nbsp;</TD>
        <TD class="Col2">&nbsp;</TD>
        <TD class="Col3">
          <BR>
          <BR>
          <IMG width="100%" height="1" src="http://openejb.apache.org/images/line_light.gif">
          <TABLE width="100%">
            <TR>
              <TD>
                <SPAN class="bodyGrey">
                  <SMALL>
                    <NOTICE><!-- $FOOTER -->
                      Apache OpenEJB is an project of The Apache Software Foundation (ASF)
                    </NOTICE>
                    <BR>
                    Site Powered by
                    <A href="http://atlassian.com/">Atlassian</A>
                    <A href="http://atlassian.com/confluence/">Confluence</A>
                    .
                  </SMALL>
                </SPAN>
              </TD>
              <TD align="right">
                <A style="color:#999;font-size:small;font-weight:normal;" href="https://cwiki.apache.org/confluence/pages/editpage.action?spaceKey=OPENEJB&title=JAXB2%20Java%20Inheritance">[ edit ]</A>
              </TD>
            </TR>
          </TABLE>
          <BR>
        </TD>
        <TD class="Col4"><IMG src="http://openejb.apache.org/images/dotTrans.gif"></TD>
        <TD class="Col5">&nbsp;</TD>
      </TR>
    </TABLE>

    <!-- Needed for composition plugin -->
    <!-- delay the loading of large javascript files to the end so that they don't interfere with the loading of page content -->
    <SPAN style="display: none">
      <SCRIPT type="text/javascript" language="JavaScript" src="http://cwiki.apache.org/confluence/labels-javascript"></SCRIPT>

      <SCRIPT src="http://www.google-analytics.com/urchin.js" type="text/javascript">
      </SCRIPT>
      <SCRIPT type="text/javascript">
        _uacct = "UA-2717626-1";
        urchinTracker();
      </SCRIPT>
    </SPAN>

  </BODY>
</HTML>