geronimo-scm mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From conflue...@apache.org
Subject [CONF] Apache Geronimo v2.1: Using Java Persistence API in application client (page edited)
Date Tue, 27 May 2008 08:36:00 GMT
<html>
<head>
    <base href="http://cwiki.apache.org/confluence" />
    <style type="text/css">
    <!--
    body, p, td, table, tr, .bodytext, .stepfield {
	font-family: Verdana, arial, sans-serif;
	font-size: 11px;
	line-height: 16px;
	color: #000000;
	font-weight: normal;
}
#PageContent {
	text-align: left;
	background-color: #fff;
	padding: 0px;
	margin: 0px;
    padding-bottom:20px;
}
/*
** when this stylesheet is used for the Tiny MCE Wysiwyg editor's edit area, we can't
** use an id=PageContent or class=wiki-content, so we must
** set the body style to that used for PageContent, and p to that used for wiki-content.
*/

body {
	margin: 0px;
	padding: 0px;
	text-align: center;
    background-color: #f0f0f0;
}

@media print {

body {
    background-color: #fff;
}

}

.monospaceInput {
    font:12px monospace
}

.wiki-content p, .commentblock p {
    margin: 16px 0px 16px 0px;
    padding: 0px;
}

.wiki-content-preview {
    padding: 5px;
    border-left: 1px solid #3c78b5;
    border-right: 1px solid #3c78b5;
}

ul, ol {
    margin-top: 2px;
    margin-bottom: 2px;
    padding-top: 0px;
    padding-bottom: 0px;
}

pre {
    padding: 0px;
    margin-top: 5px;
    margin-left: 15px;
    margin-bottom: 5px;
    margin-right: 5px;
    text-align: left;
}

.helpheading {
    font-weight: bold;
    background-color: #D0D9BD;
        border-bottom: 1px solid #3c78b5;
        padding: 4px 4px 4px 4px;
        margin: 0px;
        margin-top: 10px;
}
.helpcontent {
        padding: 4px 4px 20px 4px;
    background-color: #f5f7f1;
}

.code {
 	border: 1px dashed #3c78b5;
    font-size: 11px;
	font-family: Courier;
    margin: 10px;
	line-height: 13px;
}

.focusedComment {
    background: #ffffce;
}

.commentBox, .focusedComment {
    padding: 10px;
    margin: 5px 0 5px 0;
    border: 1px #bbb solid;
}

.codeHeader {
    background-color: #f0f0f0;
 	border-bottom: 1px dashed #3c78b5;
    padding: 3px;
	text-align: center;
}

.codeContent {
    text-align: left;
    background-color: #f0f0f0;
    padding: 3px;
}

.preformatted {
 	border: 1px dashed #3c78b5;
    font-size: 11px;
	font-family: Courier;
    margin: 10px;
	line-height: 13px;
}

.preformattedHeader {
    background-color: #f0f0f0;
 	border-bottom: 1px dashed #3c78b5;
    padding: 3px;
	text-align: center;
}

.preformattedContent {
    background-color: #f0f0f0;
    padding: 3px;
}

.panel {
 	border: 1px dashed #3c78b5;
    margin: 10px;
    margin-top: 0px;
}

.panelHeader {
    background-color: #f0f0f0;
 	border-bottom: 1px dashed #3c78b5;
    padding: 3px;
	text-align: center;
}

.panelContent {
    background-color: #f0f0f0;
    padding: 5px;
}

.anonymousAlert {
    background-color: #f0f0f0;
 	border: 1px dashed red;
    font-size: 11px;
    padding: 10px 5px 10px 5px;
    margin: 4px;
	line-height: 13px;
}

.lockAlert {
    background-color: #f0f0f0;
    width: 50%;
 	border: 1px dashed red;
    font-size: 11px;
    padding: 10px 5px 10px 5px;
    margin: 4px;
	line-height: 13px;
}


.code-keyword {
  color: #000091;
  background-color: inherit;
}

.code-object {
  color: #910091;
  background-color: inherit;
}

.code-quote {
  color: #009100;
  background-color: inherit;
}

.code-comment {
  color: #808080;
  background-color: inherit;
}


.code-xml .code-keyword {
  color: inherit;
  font-weight: bold;
}

.code-tag {
  color: #000091;
  background-color: inherit;
}

.breadcrumbs {
    background-color: #f0f0f0;
 	border-color: #3c78b5;
	border-width: 1px 0px 1px 0px;
	border-style: solid;
    font-size: 11px;
    padding: 3px 0px 3px 0px;
}

.navmenu {
    border: 1px solid #ccc;
}

.menuheading {
    font-weight: bold;
    background-color: #f0f0f0;
 	border-bottom: 1px solid #3c78b5;
	padding: 4px 4px 2px 4px;
}

.menuitems {
	padding: 4px 4px 20px 4px;
}

.rightpanel {
    border-left: 1px solid #ccc;
    border-bottom: 1px solid #ccc;
}

#helpheading {
    text-align: left;
    font-weight: bold;
    background-color: #D0D9BD;
 	border-bottom: 1px solid #3c78b5;
	padding: 4px 4px 4px 4px;
	margin: 0px;
}
#helpcontent {
	padding: 4px 4px 4px 4px;
    background-color: #f5f7f1;
}
.helptab-unselected {
    font-weight: bold;
	padding: 5px;
    background-color: #f5f7f1;
}
.helptab-selected {
    font-weight: bold;
    background-color: #D0D9BD;
	padding: 5px;
}
.helptabs {
    margin: 0px;
    background-color: #f5f7f1;
	padding: 5px;
}
.infopanel-heading {
    font-weight: bold;
	padding: 4px 0px 2px 0px;
}

.pagebody {
}

.pageheader {
	padding: 5px 5px 5px 0px;
 	border-bottom: 1px solid #3c78b5;
}

.pagetitle {
	font-size: 22px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: #003366;
}

.newpagetitle {
    color: #ccc !important;
}

.steptitle {
	font-size: 18px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: #003366;
	margin-bottom: 7px;
}

.substeptitle {
    font-size: 12px;
    font-weight: bold;
    font-family: Arial, sans-serif;
    color: #003366;
    margin: 2px 4px 4px 4px;
    padding: 2px 4px 1px 4px;
}

.stepdesc {
    font-family: Verdana, arial, sans-serif;
	font-size: 11px;
	line-height: 16px;
	font-weight: normal;
    color: #666666;
    margin-top: 7px;
    margin-bottom: 7px;
}

.steplabel {
    font-weight: bold;
    margin-right: 4px;
    color: black;
    float: left;
    width: 15%;
    text-align: right;
}

.stepfield {
    background: #f0f0f0;
    padding: 5px;
}

.submitButtons{
    margin-top:5px;
    text-align:right;
}

.formtitle {
	font-size: 12px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: #003366;
}

.sectionbottom {
    border-bottom: 1px solid #3c78b5;
}

.topRow {
    border-top: 2px solid #3c78b5;
}

.tabletitle {
	font-size: 14px;
	font-weight: bold;
	font-family: Arial, sans-serif;
    padding: 3px 0px 2px 0px;
    margin: 8px 4px 2px 0px;
	color: #003366;
	border-bottom: 2px solid #3c78b5;
}
.pagesubheading {
    color: #666666;
    font-size: 10px;
    padding: 0px 0px 5px 0px;
}

HR {
	color: 3c78b5;
	height: 1;
}

A:link, A:visited, A:active, A:hover {
	color: #003366;
}

h1 A:link, h1 A:visited, h1 A:active {
	text-decoration: none;
}

h1 A:hover {
    border-bottom: 1px dotted #003366;
}

.wiki-content > :first-child, .commentblock > :first-child {
    margin-top: 3px;
}

.logocell {
    padding: 10px;
}

input {
	font-family: verdana, geneva, arial, sans-serif;
	font-size: 11px;
	color: #000000;
}

textarea, textarea.editor {
	font-family: verdana, geneva, arial, sans-serif;
	font-size: 11px;
	color: #333333;
}

/* use logoSpaceLink instead.
.spacenametitle {
	font: 21px/31px Impact, Arial, Helvetica;
    font-weight: 100;
    color: #999999;
	margin: 0px;
}
.spacenametitle img {
  margin: 0 0 -4px 0;
}
.spacenametitle a {
    text-decoration: none;
    color: #999999;
}
.spacenametitle a:visited {
    text-decoration: none;
    color: #999999;
}*/

.spacenametitle-printable {
	font: 20px/25px Impact, Arial, Helvetica;
    font-weight: 100;
    color: #999999;
	margin: 0px;
}
.spacenametitle-printable a {
    text-decoration: none;
    color: #999999;
}
.spacenametitle-printable a:visited {
    text-decoration: none;
    color: #999999;
}

.blogDate {
	font-weight: bold;
	text-decoration: none;
	color: black;
}

.blogSurtitle {
    background: #f0f0f0;
 	border: 1px solid #ddd;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.blogHeading {
    font-size: 20px;
    line-height: normal;
    font-weight: bold;
    padding: 0px;
    margin: 0px;
}

.blogHeading a {
   text-decoration: none;
   color: black;
}

.endsection {
	align: right;
	color: #666666;
	margin-top: 10px;
}
.endsectionleftnav {
	align: right;
	color: #666666;
	margin-top: 10px;
}

h1 {
	font-size: 24px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	color: #003366;
 	border-bottom: 1px solid #3c78b5;
	padding: 2px;
	margin: 36px 0px 4px 0px;
}

h2 {
	font-size: 18px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
 	border-bottom: 1px solid #3c78b5;
	padding: 2px;
	margin: 27px 0px 4px 0px;
}

h3 {
	font-size: 14px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 21px 0px 4px 0px;
}

h4 {
	font-size: 12px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 18px 0px 4px 0px;
}

h4.search {
	font-size: 12px;
	line-height: normal;
	font-weight: normal;
	background-color: #f0f0f0;
	padding: 4px;
	margin: 18px 0px 4px 0px;
}

h5 {
	font-size: 10px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 14px 0px 4px 0px;
}

h6 {
	font-size: 8px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 14px 0px 4px 0px;
}

.smallfont {
    font-size: 10px;
}
.descfont {
    font-size: 10px;
    color: #666666;
}
.smallerfont {
    font-size: 9px;
}
.smalltext {
    color: #666666;
    font-size: 10px;
}
.smalltext a {
    color: #666666;
}
.smalltext-blue {
    color: #3c78b5;
    font-size: 10px;
}
.surtitle {
    margin-left: 1px;
    margin-bottom: 5px;
    font-size: 14px;
    color: #666666;
}

/* css hack found here:  http://www.fo3nix.pwp.blueyonder.co.uk/tutorials/css/hacks/ */
.navItemOver { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #003366; cursor: hand; voice-family: '\'}\''; voice-family:inherit; cursor: pointer;}
.navItemOver a { color: #ffffff; background-color:#003366; text-decoration: none; }
.navItemOver a:visited { color: #ffffff; background-color:#003366; text-decoration: none; }
.navItemOver a:hover { color: #ffffff; background-color:#003366; text-decoration: none; }
.navItem { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #3c78b5; }
.navItem a { color: #ffffff; text-decoration: none; }
.navItem a:hover { color: #ffffff; text-decoration: none; }
.navItem a:visited { color: #ffffff; text-decoration: none; }

div.padded { padding: 4px; }
div.thickPadded { padding: 10px; }
h3.macrolibrariestitle {
    margin: 0px 0px 0px 0px;
}

div.centered { text-align: center; margin: 10px; }
div.centered table {margin: 0px auto; text-align: left; }

.tableview table {
    margin: 0;
}

.tableview th {
    text-align: left;
    color: #003366;
    font-size: 12px;
    padding: 5px 0px 0px 5px;
    border-bottom: 2px solid #3c78b5;
}
.tableview td {
    text-align: left;
    border-color: #ccc;
    border-width: 0px 0px 1px 0px;
    border-style: solid;
    margin: 0;
    padding: 4px 10px 4px 5px;
}

.grid {
    margin: 2px 0px 5px 0px;
    border-collapse: collapse;
}
.grid th  {
    border: 1px solid #ccc;
    padding: 2px 4px 2px 4px;
    background: #f0f0f0;
    text-align: center;
}
.grid td  {
    border: 1px solid #ccc;
    padding: 3px 4px 3px 4px;
}
.gridHover {
	background-color: #f9f9f9;
}

td.infocell {
    background-color: #f0f0f0;
}
.label {
	font-weight: bold;
	color: #003366;
}

label {
	font-weight: bold;
	color: #003366;
}

.error {
	background-color: #fcc;
}

.errorBox {
	background-color: #fcc;
    border: 1px solid #c00;
    padding: 5px;
    margin: 5px;
}

.errorMessage {
	color: #c00;
}

.success {
	background-color: #dfd;
}

.successBox {
	background-color: #dfd;
    border: 1px solid #090;
    padding: 5px;
    margin-top:5px;
    margin-bottom:5px;
}

blockquote {
	padding-left: 10px;
	padding-right: 10px;
	margin-left: 5px;
	margin-right: 0px;
	border-left: 1px solid #3c78b5;
}

table.confluenceTable
{
    margin: 5px;
    border-collapse: collapse;
}

/* Added as a temporary fix for CONF-4223. The table elements appear to be inheriting the border: none attribute from the sectionMacro class */
table.confluenceTable td.confluenceTd
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
}

/* Added as a temporary fix for CONF-4223. The table elements appear to be inheriting the border: none attribute from the sectionMacro class */
table.confluenceTable th.confluenceTh
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
    background-color: #f0f0f0;
    text-align: center;
}

td.confluenceTd
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
}

th.confluenceTh
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
    background-color: #f0f0f0;
    text-align: center;
}

DIV.small {
	font-size: 9px;
}

H1.pagename {
	margin-top: 0px;
}

IMG.inline  {}

.loginform {
    margin: 5px;
    border: 1px solid #ccc;
}

/* The text how the "This is a preview" comment should be shown. */
.previewnote { text-align: center;
                font-size: 11px;
                    color: red; }

/* How the preview content should be shown */
.previewcontent { background: #E0E0E0; }

/* How the system messages should be shown (DisplayMessage.jsp) */
.messagecontent { background: #E0E0E0; }

/* How the "This page has been modified..." -comment should be shown. */
.conflictnote { }

.createlink {
    color: maroon;
}
a.createlink {
    color: maroon;
}
.templateparameter {
    font-size: 9px;
    color: darkblue;
}

.diffadded {
    background: #ddffdd;
    padding: 1px 1px 1px 4px;
	border-left: 4px solid darkgreen;
}
.diffdeleted {
    color: #999;
    background: #ffdddd;
    padding: 1px 1px 1px 4px;
	border-left: 4px solid darkred;
}
.diffnochange {
    padding: 1px 1px 1px 4px;
	border-left: 4px solid lightgrey;
}
.differror {
    background: brown;
}
.diff {
    font-family: lucida console, courier new, fixed-width;
	font-size: 12px;
	line-height: 14px;
}
.diffaddedchars {
    background-color:#99ff99;
    font-weight:bolder;
}
.diffremovedchars {
    background-color:#ff9999;
    text-decoration: line-through;
    font-weight:bolder;
}

.greybackground {
    background: #f0f0f0
}

.greybox {
 	border: 1px solid #ddd;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.borderedGreyBox {
    border: 1px solid #cccccc;
    background-color: #f0f0f0;
    padding: 10px;
}

.greyboxfilled {
 	border: 1px solid #ddd;
    background: #f0f0f0;
    padding: 3px;
	margin: 1px 1px 10px 1px;
}

.navBackgroundBox {
    padding: 5px 5px 5px 5px;
    font-size: 22px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: white;
    background: #3c78b5;
    text-decoration: none;
}

.previewBoxTop {
	background-color: #f0f0f0;
    border-width: 1px 1px 0px 1px;
    border-style: solid;
    border-color: #3c78b5;
    padding: 5px;
    margin: 5px 0px 0px 0px;
    text-align: center;
}
.previewContent {
    background-color: #fff;
 	border-color: #3c78b5;
	border-width: 0px 1px 0px 1px;
	border-style: solid;
	padding: 10px;
	margin: 0px;
}
.previewBoxBottom {
	background-color: #f0f0f0;
    border-width: 0px 1px 1px 1px;
    border-style: solid;
    border-color: #3c78b5;
    padding: 5px;
    margin: 0px 0px 5px 0px;
    text-align: center;
}

.functionbox {
    background-color: #f0f0f0;
 	border: 1px solid #3c78b5;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.functionbox-greyborder {
    background-color: #f0f0f0;
 	border: 1px solid #ddd;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.search-highlight {
    background-color: #ffffcc;
}

/* normal (white) background */
.rowNormal {
    background-color: #ffffff;
 }

/* alternate (pale yellow) background */
.rowAlternate {
    background-color: #f7f7f7;
}

/* used in the list attachments table */
.rowAlternateNoBottomColor {
    background-color: #f7f7f7;
}

.rowAlternateNoBottomNoColor {
}

.rowAlternateNoBottomColor td {
    border-bottom: 0px;
}

.rowAlternateNoBottomNoColor td {
    border-bottom: 0px;
}

/* row highlight (grey) background */
.rowHighlight {
    background-color: #f0f0f0;

}

TD.greenbar {FONT-SIZE: 2px; BACKGROUND: #00df00; BORDER: 1px solid #9c9c9c; PADDING: 0px; }
TD.redbar {FONT-SIZE: 2px; BACKGROUND: #df0000; BORDER: 1px solid #9c9c9c; PADDING: 0px; }
TD.darkredbar {FONT-SIZE: 2px; BACKGROUND: #af0000; BORDER: 1px solid #9c9c9c; PADDING: 0px; }

TR.testpassed {FONT-SIZE: 2px; BACKGROUND: #ddffdd; PADDING: 0px; }
TR.testfailed {FONT-SIZE: 2px; BACKGROUND: #ffdddd; PADDING: 0px; }

.toolbar  {
    margin: 0px;
    border-collapse: collapse;
}

.toolbar td  {
    border: 1px solid #ccc;
    padding: 2px 2px 2px 2px;
    color: #ccc;
}

td.noformatting {
    border-width: 0px;
    border-style: none;
    text-align: center;
	padding: 0px;
}

.commentblock {
    margin: 12px 0 12px 0;
}

/*
 * Divs displaying the license information, if necessary.
 */
.license-eval, .license-none, .license-nonprofit {
    border-top: 1px solid #bbbbbb;
    text-align: center;
    font-size: 10px;
    font-family: Verdana, Arial, Helvetica, sans-serif;
}

.license-eval, .license-none {
    background-color: #ffcccc;
}

.license-eval b, .license-none b {
    color: #990000
}

.license-nonprofit {
    background-color: #ffffff;
}

/*
 * The shadow at the bottom of the page between the main content and the
 * "powered by" section.
 */
.bottomshadow {
    height: 12px;
    background-image: url("$req.contextPath/images/border/border_bottom.gif");
    background-repeat: repeat-x;
}

/*
 * Styling of the operations box
 */
.navmenu .operations li, .navmenu .operations ul {
    list-style: none;
    margin-left: 0;
    padding-left: 0;
}

.navmenu .operations ul {
    margin-bottom: 9px;
}

.navmenu .label {
    font-weight: inherit;
}

/*
 * Styling of ops as a toolbar
 */
.toolbar div {
    display: none;
}

.toolbar .label {
    display: none;
}

.toolbar .operations {
    display: block;
}

.toolbar .operations ul {
    display: inline;
    list-style: none;
    margin-left: 10px;
    padding-left: 0;
}

.toolbar .operations li {
    list-style: none;
    display: inline;
}

/* list page navigational tabs */
#foldertab {
padding: 3px 0px 3px 8px;
margin-left: 0;
border-bottom: 1px solid #3c78b5;
font: bold 11px Verdana, sans-serif;
}

#foldertab li {
list-style: none;
margin: 0;
display: inline;
}

#foldertab li a {
padding: 3px 0.5em;
margin-left: 3px;
border: 1px solid #3c78b5;
border-bottom: none;
background: #3c78b5;
text-decoration: none;
}

#foldertab li a:link { color: #ffffff; }
#foldertab li a:visited { color: #ffffff; }

#foldertab li a:hover {
color: #ffffff;
background: #003366;
border-color: #003366;
}

#foldertab li a.current {
background: white;
border-bottom: 1px solid white;
color: black;
}

#foldertab li a.current:link { color: black; }
#foldertab li a.current:visited { color: black; }
#foldertab li a.current:hover {
background: white;
border-bottom: 1px solid white;
color: black;
}

/* alphabet list */
ul#squaretab {
margin-left: 0;
padding-left: 0;
white-space: nowrap;
font: bold 8px Verdana, sans-serif;
}

#squaretab li {
display: inline;
list-style-type: none;
}

#squaretab a {
padding: 2px 6px;
border: 1px solid #3c78b5;
}

#squaretab a:link, #squaretab a:visited {
color: #fff;
background-color: #3c78b5;
text-decoration: none;
}

#squaretab a:hover {
color: #ffffff;
background-color: #003366;
border-color: #003366;
text-decoration: none;
}

#squaretab li a#current {
background: white;
color: black;
}

.blogcalendar * {
    font-family:verdana, arial, sans-serif;
    font-size:x-small;
    font-weight:normal;
    line-height:140%;
    padding:2px;
}


table.blogcalendar {
    border: 1px solid #3c78b5;
}

.blogcalendar th.calendarhead, a.calendarhead {
    font-size:x-small;
    font-weight:bold;
    padding:2px;
    text-transform:uppercase;
    background-color: #3c78b5;
    color: #ffffff;
    letter-spacing: .3em;
    text-transform: uppercase;
}

.calendarhead:visited {color: white;}
.calendarhead:active {color: white;}
.calendarhead:hover {color: white;}

.blogcalendar th {
    font-size:x-small;
    font-weight:bold;
    padding:2px;
    background-color:#f0f0f0;
}

.blogcalendar td {
    font-size:x-small;
    font-weight:normal;
}

.searchGroup { padding: 0 0 10px 0; background: #f0f0f0; }
.searchGroupHeading { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #3c78b5; padding: 2px 4px 1px 4px; }
.searchItem { padding: 1px 4px 1px 4px; }
.searchItemSelected { padding: 1px 4px 1px 4px; font-weight: bold; background: #ddd; }

/* permissions page styles */
.permissionHeading {
    border-bottom: #bbb; border-width: 0 0 1px 0; border-style: solid; font-size: 16px; text-align: left;
}
.permissionTab {
    border-width: 0 0 0 1px; border-style: solid; background: #3c78b5; color: #ffffff; font-size: 10px;
}
.permissionSuperTab {
    border-width: 0 0 0 1px; border-style: solid; background: #003366; color: #ffffff;
}
.permissionCell {
    border-left: #bbb; border-width: 0 0 0 1px; border-style: solid;
}

/* warning panel */
.warningPanel { background: #FFFFCE; border:#F0C000 1px solid; padding: 8px; margin: 10px; }
/* alert panel */
.alertPanel { background: #FFCCCC; border:#C00 1px solid; padding: 8px; margin: 10px; }
/* info panel */
.infoPanel { background: #D8E4F1; border:#3c78b5 1px solid; padding: 8px; margin: 10px; }

/* side menu highlighting (e.g. space content screen) */
.optionPadded { padding: 2px; }
.optionSelected { background-color: #ffffcc; padding: 2px; border: 1px solid #ddd; margin: -1px; }
.optionSelected a { font-weight: bold; text-decoration: none; color: black; }

/* information macros */
.noteMacro { border-style: solid; border-width: 1px; border-color: #F0C000; background-color: #FFFFCE; text-align:left; margin-top: 5px; margin-bottom: 5px}
.warningMacro { border-style: solid; border-width: 1px; border-color: #c00; background-color: #fcc; text-align:left; margin-top: 5px; margin-bottom: 5px}
.infoMacro { border-style: solid; border-width: 1px; border-color: #3c78b5; background-color: #D8E4F1; text-align:left; margin-top: 5px; margin-bottom: 5px}
.tipMacro { border-style: solid; border-width: 1px; border-color: #090; background-color: #dfd; text-align:left; margin-top: 5px; margin-bottom: 5px}
.informationMacroPadding { padding: 5px 0 0 5px; }

table.infoMacro td, table.warningMacro td, table.tipMacro td, table.noteMacro td, table.sectionMacro td {
    border: none;
}

table.sectionMacroWithBorder td.columnMacro { border-style: dashed; border-width: 1px; border-color: #cccccc;}

.pagecontent
{
    padding: 10px;
    text-align: left;
}

/* styles for links in the top bar */
.topBarDiv a:link {color: #ffffff;}
.topBarDiv a:visited {color: #ffffff;}
.topBarDiv a:active {color: #ffffff;}
.topBarDiv a:hover {color: #ffffff;}
.topBarDiv {color: #ffffff;}

.topBar {
    background-color: #003366;
}


/* styles for extended operations */
.greyLinks a:link {color: #666666; text-decoration:underline;}
.greyLinks a:visited {color: #666666; text-decoration:underline;}
.greyLinks a:active {color: #666666; text-decoration:underline;}
.greyLinks a:hover {color: #666666; text-decoration:underline;}
.greyLinks {color: #666666; display:block; padding: 10px}

.logoSpaceLink {color: #999999; text-decoration: none}
.logoSpaceLink a:link {color: #999999; text-decoration: none}
.logoSpaceLink a:visited {color: #999999; text-decoration: none}
.logoSpaceLink a:active {color: #999999; text-decoration: none}
.logoSpaceLink a:hover {color: #003366; text-decoration: none}

/* basic panel (basicpanel.vmd) style */
.basicPanelContainer {border: 1px solid #3c78b5; margin-top: 2px; margin-bottom: 8px; width: 100%}
.basicPanelTitle {padding: 5px; margin: 0px; background-color: #f0f0f0; color: black; font-weight: bold;}
.basicPanelBody {padding: 5px; margin: 0px}

.separatorLinks a:link {color: white}
.separatorLinks a:visited {color: white}
.separatorLinks a:active {color: white}

.greynavbar {background-color: #f0f0f0; border-top: 1px solid #3c78b5; margin-top: 2px}

div.headerField {
    float: left;
    width: auto;
    height: 100%;
}

.headerFloat {
    margin-left: auto;
    width: 50%;
}

.headerFloatLeft {
    float: left;
    margin-right: 20px;
    margin-bottom: 10px;
}

#headerRow {
    padding: 10px;
}

div.license-personal {
   background-color: #003366;
   color: #ffffff;
}

div.license-personal a {
   color: #ffffff;
}

.greyFormBox {
    border: 1px solid #cccccc;
    padding: 5px;
}

/* IE automatically adds a margin before and after form tags. Use this style to remove that */
.marginlessForm {
    margin: 0px;
}

.openPageHighlight {
    background-color: #ffffcc;
    padding: 2px;
    border: 1px solid #ddd;
}

.editPageInsertLinks, .editPageInsertLinks a
{
    color: #666666;
    font-weight: bold;
    font-size: 10px;
}

/* Style for label heatmap. */
.top10 a {
    font-weight: bold;
    font-size: 2em;
    color: #003366;
}
.top25 a {
    font-weight: bold;
    font-size: 1.6em;
    color: #003366;
}
.top50 a {
    font-size: 1.4em;
    color: #003366;
}
.top100 a {
    font-size: 1.2em;
    color: #003366;
}

.heatmap {
    list-style:none;
    width: 95%;
    margin: 0px auto;
}

.heatmap a {
    text-decoration:none;
}

.heatmap a:hover {
    text-decoration:underline;
}

.heatmap li {
    display: inline;
}

.minitab {
padding: 3px 0px 3px 8px;
margin-left: 0;
margin-top: 1px;
margin-bottom: 0px;
border-bottom: 1px solid #3c78b5;
font: bold 9px Verdana, sans-serif;
text-decoration: none;
float:none;
}
.selectedminitab {
padding: 3px 0.5em;
margin-left: 3px;
margin-top: 1px;
border: 1px solid #3c78b5;
background: white;
border-bottom: 1px solid white;
color: #000000;
text-decoration: none;
}
.unselectedminitab {
padding: 3px 0.5em;
margin-left: 3px;
margin-top: 1px;
border: 1px solid #3c78b5;
border-bottom: none;
background: #3c78b5;
color: #ffffff;
text-decoration: none;
}

a.unselectedminitab:hover {
color: #ffffff;
background: #003366;
border-color: #003366;
}

a.unselectedminitab:link { color: white; }
a.unselectedminitab:visited { color: white; }

a.selectedminitab:link { color: black; }
a.selectedminitab:visited { color: black; }

.linkerror { background-color: #fcc;}

a.labelOperationLink:link {text-decoration: underline}
a.labelOperationLink:active {text-decoration: underline}
a.labelOperationLink:visited {text-decoration: underline}
a.labelOperationLink:hover {text-decoration: underline}

a.newLabel:link {background-color: #ddffdd}
a.newLabel:active {background-color: #ddffdd}
a.newLabel:visited {background-color: #ddffdd}
a.newLabel:hover {background-color: #ddffdd}

ul.square {list-style-type: square}

.inline-control-link {
    background: #ffc;
    font-size: 9px;
    color: #666;
    padding: 2px;
    text-transform: uppercase;
    text-decoration: none;
}


.inline-control-link a:link {text-decoration: none}
.inline-control-link a:active {text-decoration: none}
.inline-control-link a:visited {text-decoration: none}
.inline-control-link a:hover {text-decoration: none}

.inline-control-link {
    background: #ffc;
    font-size: 9px;
    color: #666;
    padding: 2px;
    text-transform: uppercase;
    text-decoration: none;
    cursor: pointer;
}

div.auto_complete {
    width: 350px;
    background: #fff;
}
div.auto_complete ul {
    border: 1px solid #888;
    margin: 0;
    padding: 0;
    width: 100%;
    list-style-type: none;
}
div.auto_complete ul li {
    margin: 0;
    padding: 3px;
}
div.auto_complete ul li.selected {
    background-color: #ffb;
}
div.auto_complete ul strong.highlight {
    color: #800;
    margin: 0;
    padding: 0;
}

/******* Edit Page Styles *******/
.toogleFormDiv{
    border:1px solid #A7A6AA;
    background-color:white;
    padding:5px;
    margin-top: 5px;
}

.toogleInfoDiv{
    border:1px solid #A7A6AA;
    background-color:white;
    display:none;
    padding:5px;
    margin-top: 10px;
}

.inputSection{
    margin-bottom:20px;
}

#editBox{
   border:1px solid lightgray;
   background-color:#F0F0F0;
}

/******* Left Navigation Theme Styles ********/
.leftnav li a {
    text-decoration:none;
    color:white;
    margin:0px;
    display:block;
    padding:2px;
    padding-left:5px;
    background-color: #3c78b5;
    border-top:1px solid #3c78b5;
}

.leftnav li a:active {color:white;}
.leftnav li a:visited {color:white;}
.leftnav li a:hover {background-color: #003366; color:white;}

/* Added by Shaun during i18n */
.replaced
{
    background-color: #33CC66;
}

.topPadding
{
    margin-top: 20px;
}

/* new form style */
.form-block {
    padding: 6px;
}
.form-error-block {
    padding: 6px;
    background: #fcc;
    border-top: #f0f0f0 1px solid;
    border-bottom: #f0f0f0 1px solid;
    margin-bottom: 6px;
    padding: 0 12px 0 12px;
}
.form-element-large {
    font-size: 16px;
    font-weight: bold;
    font-family: Arial, sans-serif;
    color: #003366;
}

.form-element-small {
    font-size: 12px;
    font-weight: bold;
    font-family: Arial, sans-serif;
    color: #003366;
}

.form-header {
    background: lightyellow;
    border-top: #f0f0f0 1px solid;
    border-bottom: #f0f0f0 1px solid;
    margin-bottom: 6px;
    padding: 0 12px 0 12px;
}
.form-header p, .form-block p, .form-error-block p {
    line-height: normal;
    margin: 12px 0 12px 0;
}
.form-example {
    color: #888;
    font-size: 11px;
}
.form-divider {
    border-bottom: #ccc 1px solid;
    margin-bottom: 6px;
}
.form-buttons {
    margin-top: 6px;
    border-top: #ccc 1px solid;
    border-bottom: #ccc 1px solid;
    background: #f0f0f0;
    padding: 10px;
    text-align: center;
}
.form-buttons input {
    width: 100px;
}
.form-block .error {
    padding: 6px;
    margin-bottom: 6px;
}
    -->
    </style>
</head>
<body>

<div id="PageContent">
<table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%"><tr>
<td valign="top" class="pagebody">

    <div class="pageheader">
        <span class="pagetitle">
            Page Edited :
            <a href="http://cwiki.apache.org/confluence/display/GMOxDOC21">GMOxDOC21</a> :
            <a href="http://cwiki.apache.org/confluence/display/GMOxDOC21/Using+Java+Persistence+API+in+application+client">Using Java Persistence API in application client</a>
        </span>
    </div>

     <p>
        <a href="http://cwiki.apache.org/confluence/display/GMOxDOC21/Using+Java+Persistence+API+in+application+client">Using Java Persistence API in application client</a>
        has been edited by             <a href="http://cwiki.apache.org/confluence/display/~phanibalaji">Phani Balaji Madgula</a>
            <span class="smallfont">(May 27, 2008)</span>.
     </p>
    
     <p>
                 <a href="http://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=86607&originalVersion=9&revisedVersion=10">(View changes)</a>
     </p>

    <span class="label">Content:</span><br/>
    <div class="greybox wiki-content"><p>The Java Persistence API (JPA) is a new programming model under EJB3.0 specification (JSR220) for the management of persistence and object/relational mapping with Java EE and Java SE. With JPA, developers can easily develop java applications that perform operations on relational database management systems using java objects and mapping. In that way, java applications developed using JPA are not only portable across different platforms, but also applications can be easily developed using simple yet powerful programming model provided by JPA. This greatly improves application maintainability against ever changing database world. JPA insulates applications from all the complexity and non-portable boilerplate code involved in database connectivity and operations.</p>

<p>Apache Geronimo uses <span class="nobr"><a href="http://openjpa.apache.org/" title="Visit page outside Confluence" rel="nofollow">Apache OpenJPA<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> for providing Java Persistence API implementation to Java EE applications deployed in the server. Even though JPA is a part of EJB3 spec, it is independent of it. Hence, JPA can be used in JavaSE, web and ejb applications in the same uniform way. Think of a JPA implementation, e.g. Apache OpenJPA as a driver for JPA (JPA driver) similarly to what a JDBC driver is for JDBC.</p>

<p>The below section illustrates developing and deploying a JEE application client that uses JPA to access and manipulate database data residing in an embedded derby database.</p>

<p>In order to develop, deploy and run the application, the following environment is required.</p>

<ul>
	<li>Sun JDK 5.0+ (J2SE 1.5)</li>
	<li>Eclipse 3.3.1.1 (Eclipse Classic package of Europa distribution), which is platform specific</li>
	<li>Web Tools Platform (WTP) 2.0.1</li>
	<li>Data Tools Platform (DTP) 1.5.1</li>
	<li>Eclipse Modeling Framework (EMF) 2.3.1</li>
	<li>Graphical Editing Framework (GEF) 3.3.1</li>
</ul>


<p>The article has the following sections.</p>

<ul>
	<li>Setting up Eclipse for Application development</li>
	<li>Developing Entities and Client</li>
	<li>Preparing Deployment Descriptors and Deployment Plans</li>
	<li>Deploying the application client</li>
	<li>Running the application client</li>
</ul>


<h2><a name="UsingJavaPersistenceAPIinapplicationclient-SettingEclipseforApplicationdevelopment"></a>Setting Eclipse for Application development</h2>

<p>1. Start the Eclipse IDE and create <tt>ApplicationClientJPA</tt> java project.<br/>
   Right click on the <em>Project Explorer</em> Window and click on <em>New &gt; Java Project</em>.</p>

<p>   <img src="/confluence/download/attachments/86607/1.jpg" align="absmiddle" border="0" /></p>

<p>   Provide <tt>ApplicationClientJPA</tt> as the name for the Java Project.</p>

<p>   <img src="/confluence/download/attachments/86607/2.jpg" align="absmiddle" border="0" /></p>

<p>   Click on <em>Finish</em>.</p>

<p>   Right click on the Project and click on the <em>Properties</em> option which is the last option in the menu.</p>

<p>   <img src="/confluence/download/attachments/86607/11.jpg" align="absmiddle" border="0" /></p>

<p>   This will open up <em>Properties</em> Window. Click on <em>Java Build Path =&gt; Libraries</em> tab on the right hand side.</p>

<p>   <img src="/confluence/download/attachments/86607/12.jpg" align="absmiddle" border="0" /></p>

<p>   Click on <em>Add External JARs</em> button and browse for <tt>geronimo-jpa_3.0_spec-1.1.1.jar</tt> file which should be in <tt>&lt;geronimo_home&gt;/repository/org/apache/geronimo/specs/geronimo-jpa_3.0_spec/1.1.1</tt>. The jar file is only to compile entity and entity client classes you're about to create. Geronimo provides the jar at runtime.<br/>
   Select the file and click on the <em>Open</em> button. </p>

<p>   <img src="/confluence/download/attachments/86607/13.jpg" align="absmiddle" border="0" /></p>

<p>   This will add the library to the build path. Click on <em>OK</em>.</p>

<p>   <img src="/confluence/download/attachments/86607/14.jpg" align="absmiddle" border="0" /></p>

<p>2. Create <tt>META-INF</tt> folder in the project. Right click on the project and click on <em>New &gt; Folder</em></p>

<p>   <img src="/confluence/download/attachments/86607/3.jpg" align="absmiddle" border="0" /></p>

<p>   Provide <tt>META-INF</tt> for the folder name and click on <em>Finish</em>.</p>

<p>   <img src="/confluence/download/attachments/86607/4.jpg" align="absmiddle" border="0" /></p>

<p>That's all! the setup required for developing the application client is over.</p>

<h2><a name="UsingJavaPersistenceAPIinapplicationclient-DevelopingEntitiesandtheClient"></a>Developing Entities and the Client </h2>
<p>    1.Right click on the project and create a <tt>Account</tt> java class as follows.</p>

<p>    <img src="/confluence/download/attachments/86607/5.jpg" align="absmiddle" border="0" /></p>

<p>     Provide name for the class as <tt>Account</tt> with a package name as <tt>sample.jpa.appclient</tt>. Click on <em>Finish</em>.</p>

<p>    <img src="/confluence/download/attachments/86607/6.jpg" align="absmiddle" border="0" /></p>

<p>    2. Copy the below contents to the <tt>Account.java</tt>.</p>

<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>Account.java</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> sample.jpa.appclient;

<span class="code-keyword">import</span> java.io.Serializable;

<span class="code-keyword">import</span> javax.persistence.Entity;
<span class="code-keyword">import</span> javax.persistence.Id;
<span class="code-keyword">import</span> javax.persistence.Table;

@Entity
@Table(name=<span class="code-quote">"Account1"</span>)
<span class="code-keyword">public</span> class Account <span class="code-keyword">implements</span> Serializable{

 <span class="code-keyword">private</span> <span class="code-keyword">static</span> <span class="code-keyword">final</span> <span class="code-object">long</span> serialVersionUID = 1L;

 @Id
 <span class="code-keyword">public</span> <span class="code-object">int</span> accountNo;
 <span class="code-keyword">public</span> <span class="code-object">String</span> name;
 <span class="code-keyword">public</span> <span class="code-object">String</span> address;
 <span class="code-keyword">public</span> <span class="code-object">int</span> branchCode;
 <span class="code-keyword">public</span> <span class="code-object">double</span> balance;

 <span class="code-keyword">public</span> Account(){
  <span class="code-keyword">this</span>.accountNo = 0;
  <span class="code-keyword">this</span>.name = <span class="code-quote">"DUMMY"</span>;
  <span class="code-keyword">this</span>.address = <span class="code-quote">"DUMMY"</span>;
  <span class="code-keyword">this</span>.branchCode = 0;
 }
	
 <span class="code-keyword">public</span> <span class="code-object">int</span> getAccountNo() {
  <span class="code-keyword">return</span> accountNo;
 }
 
 <span class="code-keyword">public</span> void setAccountNo(<span class="code-object">int</span> accountNo) {
  <span class="code-keyword">this</span>.accountNo = accountNo;
 }
 
 <span class="code-keyword">public</span> <span class="code-object">String</span> getName() {
  <span class="code-keyword">return</span> name;
 }
 
 <span class="code-keyword">public</span> void setName(<span class="code-object">String</span> name) {
  <span class="code-keyword">this</span>.name = name;
 }
 
 <span class="code-keyword">public</span> <span class="code-object">String</span> getAddress() {
  <span class="code-keyword">return</span> address;
 }
 
 <span class="code-keyword">public</span> void setAddress(<span class="code-object">String</span> address) {
  <span class="code-keyword">this</span>.address = address;
 }
 
 <span class="code-keyword">public</span> <span class="code-object">int</span> getBranchCode() {
  <span class="code-keyword">return</span> branchCode;
 }

 <span class="code-keyword">public</span> void setBranchCode(<span class="code-object">int</span> branchCode) {
  <span class="code-keyword">this</span>.branchCode = branchCode;
 }

 <span class="code-keyword">public</span> <span class="code-object">double</span> getBalance() {
  <span class="code-keyword">return</span> balance;
 }

 <span class="code-keyword">public</span> void setBalance(<span class="code-object">double</span> balance) {
  <span class="code-keyword">this</span>.balance = balance;
 }

}</pre>
</div></div>

<p> 3. Similarly, right click on the project and create another java class by name <tt>AccountClient.java</tt>. Also, provide the same package name <tt>sample.jpa.appclient</tt>.</p>

<p> 4.Copy the below contents to the <tt>AccountClient.java</tt>.</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>AccountClient.java</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> sample.jpa.appclient;

<span class="code-keyword">import</span> java.util.List;

<span class="code-keyword">import</span> javax.persistence.EntityManager;
<span class="code-keyword">import</span> javax.persistence.EntityManagerFactory;
<span class="code-keyword">import</span> javax.persistence.Persistence;
<span class="code-keyword">import</span> javax.persistence.Query;

<span class="code-keyword">public</span> class AccountClient {

    <span class="code-keyword">private</span> EntityManager em;

    <span class="code-keyword">public</span> AccountClient() {

        EntityManagerFactory emf = Persistence.createEntityManagerFactory(<span class="code-quote">"JPA-App-Client"</span>);
        <span class="code-keyword">if</span> (emf == <span class="code-keyword">null</span>) {
            <span class="code-keyword">throw</span> <span class="code-keyword">new</span> IllegalStateException(<span class="code-quote">"EntityManagerFactory is unavailable"</span>);
        }

        em = emf.createEntityManager();
        <span class="code-keyword">if</span> (em == <span class="code-keyword">null</span>) {
            <span class="code-keyword">throw</span> <span class="code-keyword">new</span> IllegalStateException(<span class="code-quote">"EntityManager is unavailable"</span>);
        }
    }

    <span class="code-keyword">public</span> <span class="code-keyword">static</span> void main(<span class="code-object">String</span>[] args) {

        AccountClient client = <span class="code-keyword">new</span> AccountClient();

        <span class="code-object">String</span> opt = args[0];
        <span class="code-keyword">if</span> (<span class="code-quote">"create"</span>.equals(opt)) {
            <span class="code-keyword">if</span> (args.length != 6) {
                <span class="code-object">System</span>.err.println(<span class="code-quote">"No values <span class="code-keyword">for</span> accountNo, name, address, branchCode and balance. Exiting."</span>);
                <span class="code-object">System</span>.exit(0);
            } <span class="code-keyword">else</span> {
                <span class="code-object">int</span> accNo = <span class="code-object">Integer</span>.parseInt(args[1]);
                <span class="code-object">String</span> name = args[2];
                <span class="code-object">String</span> address = args[3];
                <span class="code-object">int</span> branchCode = <span class="code-object">Integer</span>.parseInt(args[4]);
                <span class="code-object">double</span> balance = <span class="code-object">Double</span>.parseDouble(args[5]);
                client.createAccount(accNo, name, address, branchCode, balance);
            }
        } <span class="code-keyword">else</span> <span class="code-keyword">if</span> (<span class="code-quote">"list"</span>.equals(opt)) {
            List&lt;Account&gt; accounts = client.listAccounts();
            <span class="code-keyword">for</span> (Account account: accounts) {
                <span class="code-object">System</span>.out.println(<span class="code-quote">"_________________________________"</span>);
                <span class="code-object">System</span>.out.println(account.getAccountNo());
                <span class="code-object">System</span>.out.println(account.getName());
                <span class="code-object">System</span>.out.println(account.getAddress());
                <span class="code-object">System</span>.out.println(account.getBranchCode());
                <span class="code-object">System</span>.out.println(account.getBalance());
                <span class="code-object">System</span>.out.println(<span class="code-quote">"____________________________________________"</span>);
                <span class="code-object">System</span>.out.println("");
            }
        } <span class="code-keyword">else</span> <span class="code-keyword">if</span> (<span class="code-quote">"update"</span>.equals(opt)) {
            <span class="code-keyword">if</span> (args.length != 3) {
                <span class="code-object">System</span>.out.println(<span class="code-quote">"No values <span class="code-keyword">for</span> accountNo and <span class="code-keyword">new</span> balace value. Exiting."</span>);
                <span class="code-object">System</span>.exit(0);
            } <span class="code-keyword">else</span> {
                <span class="code-object">int</span> accNo = <span class="code-object">Integer</span>.parseInt(args[1]);
                <span class="code-object">double</span> newbalance = <span class="code-object">Double</span>.parseDouble(args[2]);
                client.updateAccountBalance(accNo, newbalance);
            }
        } <span class="code-keyword">else</span> <span class="code-keyword">if</span> (opt.equals(<span class="code-quote">"delete"</span>)) {
            <span class="code-keyword">if</span> (args.length != 2) {
                <span class="code-object">System</span>.out.println(<span class="code-quote">"No values <span class="code-keyword">for</span> accountNo <span class="code-keyword">for</span> delete. Exiting."</span>);
                <span class="code-object">System</span>.exit(0);
            } <span class="code-keyword">else</span> {
                <span class="code-object">int</span> accNo = <span class="code-object">Integer</span>.parseInt(args[1]);
                client.deleteAccount(accNo);
            }
        }
        <span class="code-keyword">else</span> {
            <span class="code-object">System</span>.err.println(<span class="code-quote">"Unknown option ("</span> + opt + <span class="code-quote">") selected"</span>);
        }

    }

    <span class="code-keyword">public</span> Account createAccount(<span class="code-object">int</span> accNo, <span class="code-object">String</span> name, <span class="code-object">String</span> address, <span class="code-object">int</span> branchCode, <span class="code-object">double</span> balance) {

        Account acc1 = em.find(Account.class, accNo);
        <span class="code-keyword">if</span> (acc1 != <span class="code-keyword">null</span>) {
            <span class="code-keyword">throw</span> <span class="code-keyword">new</span> IllegalArgumentException(<span class="code-quote">"Account already exists - account <span class="code-object">Number</span> ("</span> + accNo + <span class="code-quote">")"</span>);
        }
        Account acc = <span class="code-keyword">new</span> Account();
        acc.setAccountNo(accNo);
        acc.setAddress(address);
        acc.setBalance(balance);
        acc.setBranchCode(branchCode);
        acc.setName(name);
        <span class="code-object">System</span>.out.println(<span class="code-quote">"Persisting account entity (accNo = "</span> + accNo + <span class="code-quote">")"</span>);
        em.persist(acc);
        <span class="code-object">System</span>.out.println(<span class="code-quote">"Persisted successfully account entity (accNo = "</span> + accNo + <span class="code-quote">")"</span>);
        <span class="code-keyword">return</span> acc;

    }

    @SuppressWarnings(<span class="code-quote">"unchecked"</span>)
    <span class="code-keyword">public</span> List&lt;Account&gt; listAccounts() {
        Query q = em.createQuery(<span class="code-quote">"SELECT a FROM Account a"</span>);
        List&lt;Account&gt; currList = q.getResultList();
        <span class="code-keyword">return</span> currList;
    }

    <span class="code-keyword">public</span> Account updateAccountBalance(<span class="code-object">int</span> accNo, <span class="code-object">double</span> newBalance) {
        Account acc = em.find(Account.class, accNo);
        <span class="code-keyword">if</span> (acc == <span class="code-keyword">null</span>) {
            <span class="code-keyword">throw</span> <span class="code-keyword">new</span> IllegalArgumentException(<span class="code-quote">"Account not found : Account <span class="code-object">Number</span> ("</span> + accNo + <span class="code-quote">")"</span>);
        }
        acc.setBalance(newBalance);
        em.merge(acc);
        <span class="code-keyword">return</span> acc;

    }

    <span class="code-keyword">public</span> void deleteAccount(<span class="code-object">int</span> accNo) {
        em.remove(em.getReference(Account.class, accNo));
    }
}</pre>
</div></div>

<h2><a name="UsingJavaPersistenceAPIinapplicationclient-PreparingDeploymentDescriptorsandDeploymentPlans"></a>Preparing Deployment Descriptors and Deployment Plans</h2>

<p>1. Create <tt>persistence.xml</tt> file in the <tt>META-INF</tt> folder as follows.<br/>
   Right click on the <tt>META-INF</tt> folder and click on <em>New =&gt; File</em>.</p>

<p>   <img src="/confluence/download/attachments/86607/7.jpg" align="absmiddle" border="0" /></p>

<p>   Provide <tt>persistence.xml</tt> as the file name and click on <em>Finish</em>.</p>

<p>   <img src="/confluence/download/attachments/86607/8.jpg" align="absmiddle" border="0" /></p>

<p>   Copy the below contents to the <tt>persistence.xml</tt>.</p>

<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>persistence.xml</b></div><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&gt;</span>
&lt;persistence xmlns=<span class="code-quote">"http://java.sun.com/xml/ns/persistence"</span>
  <span class="code-keyword">xmlns:xsi</span>=<span class="code-quote">"http://www.w3.org/2001/XMLSchema-instance"</span>
  xsi:schemaLocation=<span class="code-quote">"http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"</span>
  version=<span class="code-quote">"1.0"</span> &gt;
  <span class="code-tag">&lt;persistence-unit name=<span class="code-quote">"JPA-App-Client"</span>&gt;</span>
    <span class="code-tag">&lt;description&gt;</span>JPA Application Client<span class="code-tag">&lt;/description&gt;</span>
    <span class="code-tag">&lt;provider&gt;</span>org.apache.openjpa.persistence.PersistenceProviderImpl<span class="code-tag">&lt;/provider&gt;</span>
    <span class="code-tag">&lt;class&gt;</span>sample.jpa.appclient.Account<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">"openjpa.ConnectionURL"</span> value=<span class="code-quote">"jdbc:derby://localhost/AccountDB"</span> /&gt;</span>
      <span class="code-tag">&lt;property name=<span class="code-quote">"openjpa.ConnectionDriverName"</span> value=<span class="code-quote">"org.apache.derby.jdbc.ClientDriver"</span> /&gt;</span>
      <span class="code-tag">&lt;property name=<span class="code-quote">"ConnectionUserName"</span> value=<span class="code-quote">"app"</span> /&gt;</span>
      <span class="code-tag">&lt;property name=<span class="code-quote">"openjpa.jdbc.SynchronizeMappings"</span> value=<span class="code-quote">"false"</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>

<p>2. Similarly, create <tt>application-client.xml</tt> file in the <tt>META-INF</tt> folder as given the previous step and copy the below contents into the file.</p>

<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>application-client.xml</b></div><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&gt;</span>
&lt;application-client xmlns=<span class="code-quote">"http://java.sun.com/xml/ns/javaee"</span> 
  <span class="code-keyword">xmlns:xsi</span>=<span class="code-quote">"http://www.w3.org/2001/XMLSchema-instance"</span>
  xsi:schemaLocation=<span class="code-quote">"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application-client_5.xsd"</span>
  version=<span class="code-quote">"5"</span>&gt;
<span class="code-tag">&lt;/application-client&gt;</span></pre>
</div></div>

<p>Since we are using JPA annotations to declare the resources, we do not require any entries in the file.</p>

<p>3. Similarly, create <tt>geronimo-application-client.xml</tt> file under <tt>META-INF</tt> file and copy the below contents.</p>

<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>geronimo-application-client.xml</b></div><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&gt;</span>
&lt;application-client xmlns=<span class="code-quote">"http://geronimo.apache.org/xml/ns/j2ee/application-client-2.0"</span> 
  <span class="code-keyword">xmlns:sys</span>=<span class="code-quote">"http://geronimo.apache.org/xml/ns/deployment-1.2"</span>
  <span class="code-keyword">xmlns:naming</span>=<span class="code-quote">"http://geronimo.apache.org/xml/ns/naming-1.2"</span> 
  <span class="code-keyword">xmlns:security</span>=<span class="code-quote">"http://geronimo.apache.org/xml/ns/security-2.0"</span>
  <span class="code-keyword">xmlns:connector</span>=<span class="code-quote">"http://geronimo.apache.org/xml/ns/j2ee/connector-1.2"</span>&gt;
  <span class="code-tag">&lt;sys:client-environment&gt;</span>
    <span class="code-tag">&lt;sys:moduleId&gt;</span>
      <span class="code-tag">&lt;sys:groupId&gt;</span>AccountJPA<span class="code-tag">&lt;/sys:groupId&gt;</span>
      <span class="code-tag">&lt;sys:artifactId&gt;</span>AccountJPA-app-client<span class="code-tag">&lt;/sys:artifactId&gt;</span>
      <span class="code-tag">&lt;sys:version&gt;</span>3.0<span class="code-tag">&lt;/sys:version&gt;</span>
      <span class="code-tag">&lt;sys:type&gt;</span>jar<span class="code-tag">&lt;/sys:type&gt;</span>
    <span class="code-tag">&lt;/sys:moduleId&gt;</span>
    <span class="code-tag">&lt;sys:dependencies&gt;</span>
      <span class="code-tag">&lt;sys:dependency&gt;</span>
        <span class="code-tag">&lt;sys:groupId&gt;</span>org.apache.geronimo.configs<span class="code-tag">&lt;/sys:groupId&gt;</span>
        <span class="code-tag">&lt;sys:artifactId&gt;</span>transaction<span class="code-tag">&lt;/sys:artifactId&gt;</span>
        <span class="code-tag">&lt;sys:version&gt;</span>2.1<span class="code-tag">&lt;/sys:version&gt;</span>
        <span class="code-tag">&lt;sys:type&gt;</span>car<span class="code-tag">&lt;/sys:type&gt;</span>
      <span class="code-tag">&lt;/sys:dependency&gt;</span>
    <span class="code-tag">&lt;/sys:dependencies&gt;</span>
  <span class="code-tag">&lt;/sys:client-environment&gt;</span>
  <span class="code-tag">&lt;sys:server-environment&gt;</span>
    <span class="code-tag">&lt;sys:moduleId&gt;</span>
      <span class="code-tag">&lt;sys:groupId&gt;</span>AccountJPA<span class="code-tag">&lt;/sys:groupId&gt;</span>
      <span class="code-tag">&lt;sys:artifactId&gt;</span>AccountJPA-app-client-server<span class="code-tag">&lt;/sys:artifactId&gt;</span>
      <span class="code-tag">&lt;sys:version&gt;</span>3.0<span class="code-tag">&lt;/sys:version&gt;</span>
      <span class="code-tag">&lt;sys:type&gt;</span>jar<span class="code-tag">&lt;/sys:type&gt;</span>
    <span class="code-tag">&lt;/sys:moduleId&gt;</span>
  <span class="code-tag">&lt;/sys:server-environment&gt;</span>
<span class="code-tag">&lt;/application-client&gt;</span></pre>
</div></div>

<h2><a name="UsingJavaPersistenceAPIinapplicationclient-DeployingtheFinishtheexportoftheproject.applicationclient"></a>Deploying the Finish the export of the project. application client</h2>

<p>1. Export the Java Project to a jar file Start the geronimo server and open the admin console <tt><span class="nobr"><a href="http://localhost:8080/console" title="Visit page outside Confluence" rel="nofollow">http://localhost:8080/console<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></tt>.<br/>
   Click on Embedded <em>DB =&gt; DB Manager</em> on the <em>Console Navigation</em> portlet. This will open up <em>DB Viewer</em> and <em>Run SQL</em> portlets on the right hand side as follows.</p>

<p><img src="/confluence/download/attachments/86607/19.jpg" align="absmiddle" border="0" /></p>

<p>  Enter <em>AccountDB</em> in the <em>Create DB</em> text box and click on <em>Create</em> button. This will create a new Database <em>AccountDB</em> and will be listed in the <em>DB Viewer</em> portlet. </p>

<p>  In the textarea <em>SQL Command/s:</em> which is on the <em>Run SQL</em> portlet, enter the below SQL command, and select <em>AccountDB</em> in the <em>Use DB</em> combo box, and click on <em>Run SQL</em> button. This creates the <em>Account1</em> table in the <em>AccountDB</em> database.</p>

<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>Account1 table</b></div><div class="codeContent">
<pre class="code-sql">create table ACCOUNT1 (ACCOUNTNO integer, NAME varchar(50), ADDRESS varchar(225), BRANCHCODE integer, BALANCE decimal(15,2));</pre>
</div></div>

<p>Insert some sample rows in the table using the below SQL statements by following the same outlined procedure above.</p>

<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>Account1 table</b></div><div class="codeContent">
<pre class="code-sql">insert into Account1 values (1111, 'Joe', 'NewYork', 10, 30000.0);
insert into Account1 values (2222, 'John', 'NewJersy', 11, 31000.0);
insert into Account1 values (3333, 'Jane', 'Raleigh', 13, 32000.0);</pre>
</div></div>


<p>3. Export the Java project by name <tt>ApplicationClientJPA.jar</tt> as follows.<br/>
   Right click on the java project and export it as jar file.</p>

<p><img src="/confluence/download/attachments/86607/15.jpg" align="absmiddle" border="0" /></p>

<p>   Select <em>Java =&gt; jar</em></p>

<p><img src="/confluence/download/attachments/86607/16.jpg" align="absmiddle" border="0" /></p>

<p>  Click on <em>Next</em> and provide the jar file name and destination folder as below and click on <em>Next</em>.</p>

<p><img src="/confluence/download/attachments/86607/17.jpg" align="absmiddle" border="0" /></p>

<p>  In the next screen click <em>Next</em>. In the <em>Jar Manifest Specification</em> wizard, select <tt>sample.jpa.appclient.AccountClient</tt> using <em>Browse</em> button. This is the class that has <tt>public static void main(String[] args)</tt> method which is the application entry point.</p>

<p><img src="/confluence/download/attachments/86607/18.jpg" align="absmiddle" border="0" /></p>

<p>Click <em>Finish</em>.</p>

<p>2. Deploy the application client as follows.</p>

<p>Change the directory to <tt>&lt;geronimo_home&gt;\bin</tt>.<br/>
Submit the below command<br/>
<tt>deploy.bat --user system --password manager deploy &lt;location_of_the_exported_jar_file&gt;</tt></p>

<h2><a name="UsingJavaPersistenceAPIinapplicationclient-Runningtheapplicationclient"></a>Running the application client</h2>

<p>1. Run the application client as follows.</p>

<p>The application performs the following operations.</p>

<ul>
	<li>List : This option lists the accounts curently in the database. The command to list is as follows.<br/>
<font color="white"><br/>
<div class="preformatted" style="border-style: solid; "><div class="preformattedContent" style="background-color: #000000; ">
<pre>&lt;geronimo_home&gt;/bin&gt;java -Djava.endorsed.dirs="&lt;geronimo_home&gt;/lib/endorsed" -jar &lt;geronimo_home&gt;/bin/client.jar 
AccountJPA/AccountJPA-app-client/3.0/jar list
</pre>
</div></div></font></li>
</ul>


<ul>
	<li>Create : This option creates an account in the database. The command to create is as follows.<br/>
<font color="white"><br/>
<div class="preformatted" style="border-style: solid; "><div class="preformattedContent" style="background-color: #000000; ">
<pre>&lt;geronimo_home&gt;/bin&gt;java -Djava.endorsed.dirs="&lt;geronimo_home&gt;/lib/endorsed" -jar &lt;geronimo_home&gt;/bin/client.jar 
AccountJPA/AccountJPA-app-client/3.0/jar create 2222 Joe NewYork BranchX 20000.0
</pre>
</div></div></font></li>
</ul>


<ul>
	<li>Update : This option updates an account with a new balance in the database.<br/>
  The command to update is as follows.<br/>
<font color="white"><br/>
<div class="preformatted" style="border-style: solid; "><div class="preformattedContent" style="background-color: #000000; ">
<pre>&lt;geronimo_home&gt;/bin&gt;java -Djava.endorsed.dirs="&lt;geronimo_home&gt;/lib/endorsed" -jar &lt;geronimo_home&gt;/bin/client.jar 
AccountJPA/AccountJPA-app-client/3.0/jar update 2222 30000.00
</pre>
</div></div></font></li>
</ul>


<ul>
	<li>Delete : This option deletes an account in the database. The command to delete is as follows.<br/>
<font color="white"><br/>
<div class="preformatted" style="border-style: solid; "><div class="preformattedContent" style="background-color: #000000; ">
<pre>&lt;geronimo_home&gt;/bin&gt;java -Djava.endorsed.dirs="&lt;geronimo_home&gt;/lib/endorsed" -jar &lt;geronimo_home&gt;/bin/client.jar 
AccountJPA/AccountJPA-app-client/3.0/jar delete 2222.
</pre>
</div></div></font></li>
</ul>



</div>


</td></tr></table></div>
<p>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
    <tr>
        <td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="http://cwiki.apache.org/confluence/images/border/spacer.gif" width="1" height="1" border="0"/></td>
    </tr>
</table>

<div class="smalltext">
    Powered by
    <a href="http://www.atlassian.com/software/confluence/default.jsp?clicked=footer" class="smalltext">Atlassian Confluence</a>
    (Version: 2.2.9 Build:#527 Sep 07, 2006)
    -
    <a href="http://jira.atlassian.com/secure/BrowseProject.jspa?id=10470" class="smalltext">Bug/feature request</a><br/>
    <br>
    <a href="http://cwiki.apache.org/confluence/users/viewnotifications.action">Unsubscribe or edit your notifications preferences</a>

</div>

</body>
</html>


Mime
View raw message