blob: 1f257e3d7bedaf9fea5263b5501c25e89edd8c83 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<!-- $PAGETITLE -->
<TITLE>OpenEJB - Injection of EntityManager Example</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">
</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="../OPENEJB/index.html" title="Index">Home</A> | <A href="../OPENEJB/download.html" title="Download">Download</A> | <A href="../OPENEJB/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="../OPENEJB/index.html" title="Index">Home</A></LI>
<LI><A href="../OPENEJB/news.html" title="News">News</A></LI>
<LI><A href="../OPENEJB/faq.html" title="FAQ">FAQ</A></LI>
<LI><A href="../OPENEJB/download.html" title="Download">Download</A></LI>
<LI><A href="index.html" title="Index">Documentation</A></LI>
<LI><A href="../OPENEJB/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="../OPENEJB/mailing-lists.html" title="Mailing Lists">Mailing Lists</A></LI>
<LI><A href="../OPENEJB/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="../OPENEJB/local-server.html" title="Local Server">Local</A></LI>
<LI><A href="../OPENEJB/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="tomcat.html" title="Tomcat">Tomcat</A></LI>
<LI><A href="../OPENEJB/geronimo.html" title="Geronimo">Geronimo</A></LI>
<LI><A href="../OPENEJB/webobjects.html" title="WebObjects">WebObjects</A></LI>
</UL>
<H3><A name="Navigation-Community"></A>Community</H3>
<UL class="alternate" type="square">
<LI><A href="../OPENEJB/team.html" title="Team">Team</A></LI>
<LI><A href="../OPENEJB/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="../OPENEJB/space-index.html" title="Space Index">Site Index</A></LI>
<LI><A href="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 -->
Injection of EntityManager Example
</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="InjectionofEntityManagerExample-Overview"></A>Overview</H1>
<P><SPAN style="float: right; margin-left: 20px;">
<OBJECT width="400" height="250"><PARAM name="movie" value="http://www.youtube.com/v/s4uiIoAehgQ?fs=1&hl=en_US&rel=0"></PARAM><PARAM name="allowFullScreen" value="true"></PARAM><PARAM name="allowscriptaccess" value="always"></PARAM><EMBED src="http://www.youtube.com/v/s4uiIoAehgQ?fs=1&hl=en_US&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="250"></EMBED></OBJECT>
</SPAN></P>
<DIV>
<P>Shows use of <B>@PersistenceContext</B> to have an <B>EntityManager</B> with an <B>EXTENDED</B> persistence context injected into a @Stateful bean. An EJB 3 <B>@Entity</B> bean is used with the EntityManager to create, persist and merge data to a database.</P>
<P>If you need to use a TRANSACTION persistence context, see <A href="testing-transactions-example.html" title="Testing Transactions Example">this example</A>.</P>
<P><EM>The source for this example is in the &quot;injection-of-entitymanager&quot; directory located in the <A href="../OPENEJB/download.html" title="Download">openejb-examples.zip</A> available on the download page.</EM></P>
</DIV>
<DIV style="clear:both;"></DIV>
<H1><A name="InjectionofEntityManagerExample-TheCode"></A>The Code</H1>
<H2><A name="InjectionofEntityManagerExample-TheStatefulbean"></A>The Stateful bean</H2>
<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
<PRE class="code-java"><SPAN class="code-keyword">import</SPAN> javax.ejb.Stateful;
<SPAN class="code-keyword">import</SPAN> javax.persistence.EntityManager;
<SPAN class="code-keyword">import</SPAN> javax.persistence.PersistenceContext;
<SPAN class="code-keyword">import</SPAN> javax.persistence.PersistenceContextType;
<SPAN class="code-keyword">import</SPAN> javax.persistence.Query;
<SPAN class="code-keyword">import</SPAN> java.util.List;
@Stateful(name = <SPAN class="code-quote">&quot;Movies&quot;</SPAN>)
<SPAN class="code-keyword">public</SPAN> class MoviesImpl <SPAN class="code-keyword">implements</SPAN> Movies {
@PersistenceContext(unitName = <SPAN class="code-quote">&quot;movie-unit&quot;</SPAN>, type = PersistenceContextType.EXTENDED)
<SPAN class="code-keyword">private</SPAN> EntityManager entityManager;
<SPAN class="code-keyword">public</SPAN> void addMovie(Movie movie) <SPAN class="code-keyword">throws</SPAN> Exception {
entityManager.persist(movie);
}
<SPAN class="code-keyword">public</SPAN> void deleteMovie(Movie movie) <SPAN class="code-keyword">throws</SPAN> Exception {
entityManager.remove(movie);
}
<SPAN class="code-keyword">public</SPAN> List&lt;Movie&gt; getMovies() <SPAN class="code-keyword">throws</SPAN> Exception {
Query query = entityManager.createQuery(<SPAN class="code-quote">&quot;SELECT m from Movie as m&quot;</SPAN>);
<SPAN class="code-keyword">return</SPAN> query.getResultList();
}
}
</PRE>
</DIV></DIV>
<H2><A name="InjectionofEntityManagerExample-TheEntitybean"></A>The Entity bean</H2>
<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
<PRE class="code-java"><SPAN class="code-keyword">import</SPAN> javax.persistence.Entity;
@Entity
<SPAN class="code-keyword">public</SPAN> class Movie {
<SPAN class="code-keyword">private</SPAN> <SPAN class="code-object">String</SPAN> director;
<SPAN class="code-keyword">private</SPAN> <SPAN class="code-object">String</SPAN> title;
<SPAN class="code-keyword">private</SPAN> <SPAN class="code-object">int</SPAN> year;
<SPAN class="code-keyword">public</SPAN> Movie() {
}
<SPAN class="code-keyword">public</SPAN> Movie(<SPAN class="code-object">String</SPAN> director, <SPAN class="code-object">String</SPAN> title, <SPAN class="code-object">int</SPAN> year) {
<SPAN class="code-keyword">this</SPAN>.director = director;
<SPAN class="code-keyword">this</SPAN>.title = title;
<SPAN class="code-keyword">this</SPAN>.year = year;
}
<SPAN class="code-keyword">public</SPAN> <SPAN class="code-object">String</SPAN> getDirector() {
<SPAN class="code-keyword">return</SPAN> director;
}
<SPAN class="code-keyword">public</SPAN> void setDirector(<SPAN class="code-object">String</SPAN> director) {
<SPAN class="code-keyword">this</SPAN>.director = director;
}
<SPAN class="code-keyword">public</SPAN> <SPAN class="code-object">String</SPAN> getTitle() {
<SPAN class="code-keyword">return</SPAN> title;
}
<SPAN class="code-keyword">public</SPAN> void setTitle(<SPAN class="code-object">String</SPAN> title) {
<SPAN class="code-keyword">this</SPAN>.title = title;
}
<SPAN class="code-keyword">public</SPAN> <SPAN class="code-object">int</SPAN> getYear() {
<SPAN class="code-keyword">return</SPAN> year;
}
<SPAN class="code-keyword">public</SPAN> void setYear(<SPAN class="code-object">int</SPAN> year) {
<SPAN class="code-keyword">this</SPAN>.year = year;
}
}
</PRE>
</DIV></DIV>
<H2><A name="InjectionofEntityManagerExample-Thepersistenceunit"></A>The persistence unit</H2>
<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
<PRE class="code-xml"><SPAN class="code-tag">&lt;persistence xmlns=<SPAN class="code-quote">&quot;http://java.sun.com/xml/ns/persistence&quot;</SPAN> version=<SPAN class="code-quote">&quot;1.0&quot;</SPAN>&gt;</SPAN>
<SPAN class="code-tag">&lt;persistence-unit name=<SPAN class="code-quote">&quot;movie-unit&quot;</SPAN>&gt;</SPAN>
<SPAN class="code-tag">&lt;jta-data-source&gt;</SPAN>movieDatabase<SPAN class="code-tag">&lt;/jta-data-source&gt;</SPAN>
<SPAN class="code-tag">&lt;non-jta-data-source&gt;</SPAN>movieDatabaseUnmanaged<SPAN class="code-tag">&lt;/non-jta-data-source&gt;</SPAN>
<SPAN class="code-tag">&lt;class&gt;</SPAN>org.superbiz.injection.jpa.Movie<SPAN class="code-tag">&lt;/class&gt;</SPAN>
<SPAN class="code-tag">&lt;properties&gt;</SPAN>
<SPAN class="code-tag">&lt;property name=<SPAN class="code-quote">&quot;openjpa.jdbc.SynchronizeMappings&quot;</SPAN> value=<SPAN class="code-quote">&quot;buildSchema(ForeignKeys=true)&quot;</SPAN>/&gt;</SPAN>
<SPAN class="code-tag">&lt;/properties&gt;</SPAN>
<SPAN class="code-tag">&lt;/persistence-unit&gt;</SPAN>
<SPAN class="code-tag">&lt;/persistence&gt;</SPAN>
</PRE>
</DIV></DIV>
<H1><A name="InjectionofEntityManagerExample-Writingaunittestfortheexample"></A>Writing a unit test for the example</H1>
<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
<PRE class="code-java"><SPAN class="code-keyword">public</SPAN> class MoviesTest <SPAN class="code-keyword">extends</SPAN> TestCase {
<SPAN class="code-keyword">public</SPAN> void test() <SPAN class="code-keyword">throws</SPAN> Exception {
Properties p = <SPAN class="code-keyword">new</SPAN> Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, <SPAN class="code-quote">&quot;org.apache.openejb.client.LocalInitialContextFactory&quot;</SPAN>);
p.put(<SPAN class="code-quote">&quot;movieDatabase&quot;</SPAN>, <SPAN class="code-quote">&quot;<SPAN class="code-keyword">new</SPAN>:<SPAN class="code-comment">//Resource?type=DataSource&quot;</SPAN>);
</SPAN> p.put(<SPAN class="code-quote">&quot;movieDatabase.JdbcDriver&quot;</SPAN>, <SPAN class="code-quote">&quot;org.hsqldb.jdbcDriver&quot;</SPAN>);
p.put(<SPAN class="code-quote">&quot;movieDatabase.JdbcUrl&quot;</SPAN>, <SPAN class="code-quote">&quot;jdbc:hsqldb:mem:moviedb&quot;</SPAN>);
p.put(<SPAN class="code-quote">&quot;movieDatabaseUnmanaged&quot;</SPAN>, <SPAN class="code-quote">&quot;<SPAN class="code-keyword">new</SPAN>:<SPAN class="code-comment">//Resource?type=DataSource&quot;</SPAN>);
</SPAN> p.put(<SPAN class="code-quote">&quot;movieDatabaseUnmanaged.JdbcDriver&quot;</SPAN>, <SPAN class="code-quote">&quot;org.hsqldb.jdbcDriver&quot;</SPAN>);
p.put(<SPAN class="code-quote">&quot;movieDatabaseUnmanaged.JdbcUrl&quot;</SPAN>, <SPAN class="code-quote">&quot;jdbc:hsqldb:mem:moviedb&quot;</SPAN>);
p.put(<SPAN class="code-quote">&quot;movieDatabaseUnmanaged.JtaManaged&quot;</SPAN>, <SPAN class="code-quote">&quot;<SPAN class="code-keyword">false</SPAN>&quot;</SPAN>);
Context context = <SPAN class="code-keyword">new</SPAN> InitialContext(p);
Movies movies = (Movies) context.lookup(<SPAN class="code-quote">&quot;MoviesLocal&quot;</SPAN>);
movies.addMovie(<SPAN class="code-keyword">new</SPAN> Movie(<SPAN class="code-quote">&quot;Quentin Tarantino&quot;</SPAN>, <SPAN class="code-quote">&quot;Reservoir Dogs&quot;</SPAN>, 1992));
movies.addMovie(<SPAN class="code-keyword">new</SPAN> Movie(<SPAN class="code-quote">&quot;Joel Coen&quot;</SPAN>, <SPAN class="code-quote">&quot;Fargo&quot;</SPAN>, 1996));
movies.addMovie(<SPAN class="code-keyword">new</SPAN> Movie(<SPAN class="code-quote">&quot;Joel Coen&quot;</SPAN>, <SPAN class="code-quote">&quot;The Big Lebowski&quot;</SPAN>, 1998));
List&lt;Movie&gt; list = movies.getMovies();
assertEquals(<SPAN class="code-quote">&quot;List.size()&quot;</SPAN>, 3, list.size());
<SPAN class="code-keyword">for</SPAN> (Movie movie : list) {
movies.deleteMovie(movie);
}
assertEquals(<SPAN class="code-quote">&quot;Movies.getMovies()&quot;</SPAN>, 0, movies.getMovies().size());
}
}
</PRE>
</DIV></DIV>
<P>Curious on the InitialContext parameters used? See the <A href="injection-of-datasource-example.html" title="Injection of DataSource Example">Injection of DataSource Example</A> for an explanation of how any Resource can be configured via properties in the TestCase itself or via an openejb.xml file.</P>
<H1><A name="InjectionofEntityManagerExample-Running"></A>Running</H1>
<P>Running the example is fairly simple. In the &quot;injection-of-entitymanager&quot; directory of the <A href="../OPENEJB/download.html" title="Download">examples zip</A>, just run:</P>
<P>$ mvn clean install</P>
<P>Which should create output like the following.</P>
<DIV class="preformatted panel" style="border-width: 1px;"><DIV class="preformattedContent panelContent">
<PRE>-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running org.superbiz.injection.jpa.MoviesTest
Apache OpenEJB 3.0 build: 20080408-04:13
http://openejb.apache.org/
INFO - openejb.home = /Users/dblevins/work/openejb-3.0/examples/injection-of-entitymanager
INFO - openejb.base = /Users/dblevins/work/openejb-3.0/examples/injection-of-entitymanager
INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)
INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
INFO - Configuring Service(id=movieDatabaseUnmanaged, type=Resource, provider-id=Default JDBC Database)
INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database)
INFO - Configuring Service(id=Default JDK 1.3 ProxyFactory, type=ProxyFactory, provider-id=Default JDK 1.3 ProxyFactory)
INFO - Found EjbModule in classpath: /Users/dblevins/work/openejb-3.0/examples/injection-of-entitymanager/target/classes
INFO - Configuring app: /Users/dblevins/work/openejb-3.0/examples/injection-of-entitymanager/target/classes
INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)
INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container)
INFO - Configuring PersistenceUnit(name=movie-unit)
INFO - Loaded Module: /Users/dblevins/work/openejb-3.0/examples/injection-of-entitymanager/target/classes
INFO - Assembling app: /Users/dblevins/work/openejb-3.0/examples/injection-of-entitymanager/target/classes
INFO - PersistenceUnit(name=movie-unit, provider=org.apache.openjpa.persistence.PersistenceProviderImpl)
ERROR - JAVA AGENT NOT INSTALLED. The JPA Persistence Provider requested installation of a ClassFileTransformer which requires
a JavaAgent. See http://openejb.apache.org/3.0/javaagent.html
INFO - Jndi(name=MoviesLocal) --&gt; Ejb(deployment-id=Movies)
INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)
INFO - Deployed Application(path=/Users/dblevins/work/openejb-3.0/examples/injection-of-entitymanager/target/classes)
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.095 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
</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=OPENEJBx30&title=Injection%20of%20EntityManager%20Example">[ 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>