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: Bean Managed Persistence with JPA (page edited)
Date Tue, 17 Jun 2008 12:20: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/Bean+Managed+Persistence+with+JPA">Bean Managed Persistence with JPA</a>
        </span>
    </div>

     <p>
        <a href="http://cwiki.apache.org/confluence/display/GMOxDOC21/Bean+Managed+Persistence+with+JPA">Bean Managed Persistence with JPA</a>
        has been edited by             <a href="http://cwiki.apache.org/confluence/display/~phanibalaji">Phani Balaji Madgula</a>
            <span class="smallfont">(Jun 17, 2008)</span>.
     </p>
    
     <p>
                 <a href="http://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=88453&originalVersion=1&revisedVersion=2">(View changes)</a>
     </p>

    <span class="label">Content:</span><br/>
    <div class="greybox wiki-content"><p>The Java Persistence API 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">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 to Java EE applications deployed in the server. Even though JPA is a part of EJB3.0 spec, it is independent of it. Hence, JPA can be used in JavaSE, web and ejb applications in the same uniform way. </p>

<p>Below tutorial illustrates the use of application managed entity manager object. The <tt>EntityManager</tt> object is created from <tt>EntityManagerFactory</tt>. The <tt>EntityManagerFactory</tt> object is injected by the container when <tt>@PersistenceUnit(unitName="&lt;PersistentUnitName&gt;")</tt> annotation is used. The persistence context of the entity manager is not propagated along with any transaction that is currently active. If the transaction spans across components, all the entity manager object references that point to same persistence unit will have a different persistence context. Thus, any changes made to the entities through any entity manager reference, are not seen through other entity manager references. The persistence scope of the application managed entity manager is <tt>Extended</tt> by default. The <tt>transaction-type</tt> can be either <tt>JTA</tt> or <tt>RESOURCE_LOCAL</tt>. If the <tt>transaction-type</tt> is <tt>JTA</tt> the <tt>EntityManager</tt> can join the transaction by calling <tt>joinTransaction()</tt>  method. The <tt>transaction-type</tt> of <tt>RESOURCE_LOCAL</tt> is used in when the <tt>EntityManager</tt> is not interested to join the global transaction. This is typically used in non-JEE environments. In summary, the life cycle of the entity manager and the associated persistence context is not managed the container. It is the application's responsibility to close the <tt>EntityManager</tt> object explicitly. The persistence context spans beyond transactions by default.</p>

<p>The tutorial creates an enterprise application that has an ejb module and a web module. The ejb module uses <tt>Account</tt> entity and <tt>Person</tt> entity. The <tt>Account</tt> entity has <tt>accountNumber</tt>, <tt>personId</tt> and <tt>balance</tt> attributes. The <tt>Person</tt> entity has <tt>personId</tt>, <tt>personName</tt> and <tt>address</tt> attributes. The <tt>personId</tt> in <tt>Account</tt> entity refers to <tt>personId</tt> in <tt>Person</tt> entity. The <tt>AccountBean</tt> injects <tt>EntityManagerFactory</tt> from which it creates <tt>EntityManager</tt> object. It is a stateful session bean which has <tt>Account</tt> entity object, corresponding <tt>Person</tt> entity object, <tt>EntityManager</tt> object and <tt>EntityManagerFactory</tt> object as state fields. The bean has <tt>updateAllValues(String address, String personName, double balance)</tt> method that updates <tt>Account</tt> and <tt>Person</tt> entity attributes. It has also <tt>deposit(double amount)</tt> and <tt>withdraw(double amount)</tt> methods for withdrawing and depositing the amounts to the account. In all the above mentioned methods, the <tt>EntityManager</tt> object joins the active transaction using <tt>joinTransaction()</tt> method as the its {[transaction-type}} is <tt>JTA</tt> and bean's transaction is managed by the container. The <tt>initialize(integer accountNumber</tt> initializes the bean with <tt>Account</tt> and <tt>Person}}entity objects corresponding to the {{accountNumber</tt> sent as the parameter. Finally, the <tt>EntityManager</tt> object is closed in the <tt>destroy()</tt> method.</p>

<p>The web module allows user to update the <tt>Account</tt> entity and <tt>Person</tt> entity attributes and transfer amount from one account to another using <tt>AccountBean</tt>. The <tt>RetrieveAccount.jsp</tt> performs update and the <tt>TransferAmount.jsp</tt> performs transfer of amount in a JTA transaction.</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 tutorial is divided into the following sections.</p>

<ul>
	<li>Setting the Eclipse environment</li>
	<li>Creating ejb application with entities</li>
	<li>Creating web application</li>
	<li>Setting up the database tables and the Datasource.</li>
	<li>Deploying the (ear) application</li>
	<li>Running the application</li>
</ul>


<p>The entire application can be downloaded from this <span class="nobr"><a href="/confluence/download/attachments/88453/BeanManagedJPA-EAR.ear?version=1" title="BeanManagedJPA-EAR.ear attached to Bean Managed Persistence with JPA">link<sup><img class="rendericon" src="/confluence/images/icons/link_attachment_7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>.</p>

<h2><a name="BeanManagedPersistencewithJPA-SettingtheEclipseenvironment"></a>Setting the Eclipse environment</h2>

<p>1. Download Apache Geronimo2.1 and install it on the server. Look into the geronimo documentation for   <br/>
   instructions.</p>

<p>2. Install the eclipse IDE and download geronimo eclipse plugin and install it on top of eclipse. Look into the<br/>
   geronimo eclipse plugin documentation for instructions.</p>

<p>3. Create a runtime environment for Apache Geronimo2.1 in the eclipse. Look into the geronimo eclipse plugin <br/>
   documentation for instructions to install a runtime for Apache Geronimo2.1.</p>

<h2><a name="BeanManagedPersistencewithJPA-Creatingejbapplicationwithentities"></a>Creating ejb application with entities</h2>

<p>1. Open the eclipse tool and change the perspective to <em>Java EE</em> by clicking on <br/>
  <em>Windows =&gt; Open Perspective =&gt; Other</em>. It will open up <em>Open Perspective</em> wizard. Select <em>Java EE</em> from the <br/>
   list and click <em>OK</em> button.</p>

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

<p>2. Right click on the <em>Package Explorer</em> and select <em>EJB Project</em>. </p>

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

<p>3. This will open up the <em>New EJB Project</em> wizard. Provide the values for <em>Project Name</em>, <em>Target Runtime</em> as given in the screen shot below. Click on <em>Next</em> button.</p>
<table cellpadding='5' width='85%' cellspacing='8px' class='noteMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
<p>If target runtime is not setup, create a new target runtime pointing to geronimo installation directory. For more information, look at the geronimo documentation that explains setting up eclipse plugin for geronimo and setting up runtime environment. This setup is required to resolve class dependencies during compilation.</p></td></tr></table>

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

<p>4. Select the check boxes as given in the screen shot below and click on the <em>Next</em> button.</p>

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

<p>5. Select the checkboxes as given in the below screen shot and click on the <em>Next</em> button.</p>

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


<p>6. Provide the following values in textboxes and click on the <em>Finish</em> button.</p>

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

<p>7. Right click on the <em>BeanManagedJPA-EJB</em> project and navigate to <em>New =&gt; Class</em> option. Provide the <br/>
   following values in the <em>New Java Class</em> wizard and click on <em>Finish</em> button.</p>

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


<p>8. Copy the following contents into <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;

<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.PostLoad;
<span class="code-keyword">import</span> javax.persistence.PostUpdate;
<span class="code-keyword">import</span> javax.persistence.PrePersist;
<span class="code-keyword">import</span> javax.persistence.PreUpdate;
<span class="code-keyword">import</span> javax.persistence.Table;


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

 @Id
 <span class="code-keyword">public</span> <span class="code-object">int</span> accountNumber;
 <span class="code-keyword">public</span> <span class="code-object">int</span> personId;
 <span class="code-keyword">public</span> <span class="code-object">double</span> balance;

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

 <span class="code-keyword">public</span> <span class="code-object">int</span> getAccountNumber() {
  <span class="code-keyword">return</span> accountNumber;
 }

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

 <span class="code-keyword">public</span> <span class="code-object">int</span> getPersonId() {
  <span class="code-keyword">return</span> personId;
 }

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

 <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>9. Similarly, as given in the previous step, create <tt>Person.java</tt> and add the following contents to it.</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>Person.java</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> sample.jpa;

<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">"PERSONBME"</span>)
<span class="code-keyword">public</span> class Person <span class="code-keyword">implements</span> Serializable {

 @Id
 <span class="code-keyword">public</span> <span class="code-object">int</span> personId;
 <span class="code-keyword">public</span> <span class="code-object">String</span> personName;
 <span class="code-keyword">public</span> <span class="code-object">String</span> address;

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

 <span class="code-keyword">public</span> <span class="code-object">int</span> getPersonId() {
  <span class="code-keyword">return</span> personId;
 }

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

 <span class="code-keyword">public</span> <span class="code-object">String</span> getPersonName() {
  <span class="code-keyword">return</span> personName;
 }

 <span class="code-keyword">public</span> void setPersonName(<span class="code-object">String</span> personName) {
  <span class="code-keyword">this</span>.personName = personName;
 }

 <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-object">System</span>.out.println(<span class="code-quote">"Address="</span>+address);
  <span class="code-keyword">this</span>.address = address;
 }

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

<p>9. Similarly, create <tt>AccountInterface.java</tt> and copy the following contents.</p>

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

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

<span class="code-keyword">public</span> <span class="code-keyword">interface</span> AccountInterface {
 <span class="code-keyword">public</span> void initialize(<span class="code-object">int</span> accountNumber);
 <span class="code-keyword">public</span> <span class="code-object">String</span> getPersonName();
 <span class="code-keyword">public</span> void setPersonName(<span class="code-object">String</span> personName);
 <span class="code-keyword">public</span> <span class="code-object">String</span> getAddress();
 <span class="code-keyword">public</span> void setAddress(<span class="code-object">String</span> address);
 <span class="code-keyword">public</span> <span class="code-object">double</span> getBalance();
 <span class="code-keyword">public</span> void setBalance(<span class="code-object">double</span> balance);
 <span class="code-keyword">public</span> void updateAllValues(<span class="code-object">String</span> address, 
                             <span class="code-object">String</span> personName, 
                             <span class="code-object">double</span> balance);
 <span class="code-keyword">public</span> void withdraw(<span class="code-object">double</span> amount);
 <span class="code-keyword">public</span> void deposit(<span class="code-object">double</span> amount);
}</pre>
</div></div>

<p>10. Similarly, create <tt>AccountBean.java.java</tt> and copy the following contents.</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>AccountBean.java</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> sample.jpa;

<span class="code-keyword">import</span> javax.annotation.PostConstruct;
<span class="code-keyword">import</span> javax.ejb.Local;
<span class="code-keyword">import</span> javax.ejb.Remove;
<span class="code-keyword">import</span> javax.ejb.Stateful;
<span class="code-keyword">import</span> javax.ejb.TransactionManagement;
<span class="code-keyword">import</span> javax.ejb.TransactionManagementType;
<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.PersistenceUnit;


@Stateful
@TransactionManagement(TransactionManagementType.CONTAINER)
@Local(AccountInterface.class)
<span class="code-keyword">public</span> class AccountBean <span class="code-keyword">implements</span> AccountInterface{

 @PersistenceUnit(unitName=<span class="code-quote">"AccountUnit"</span>)
 <span class="code-keyword">private</span> EntityManagerFactory emf;

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

 Account account;
 Person person;

 @PostConstruct
 <span class="code-keyword">public</span> void init(){
  em = emf.createEntityManager();
 }

 <span class="code-keyword">public</span> void initialize(<span class="code-object">int</span> accountNumber){

  account = em.find(Account.class, accountNumber);

  <span class="code-keyword">if</span>(account == <span class="code-keyword">null</span>)<span class="code-keyword">throw</span> <span class="code-keyword">new</span> IllegalStateException
   (<span class="code-quote">"Account number ("</span>+accountNumber+<span class="code-quote">") not found"</span>);

  person = em.find(Person.class, account.getPersonId());

  <span class="code-keyword">if</span>(person == <span class="code-keyword">null</span>)<span class="code-keyword">throw</span> <span class="code-keyword">new</span> 
   IllegalStateException(<span class="code-quote">"Person Id("</span>+account.getPersonId()+") not found. 
   There is a descripancy in the database <span class="code-keyword">for</span> 
   account number (<span class="code-quote">"+accountNumber+"</span>)");
 }

 <span class="code-keyword">public</span> <span class="code-object">String</span> getPersonName(){
  <span class="code-keyword">return</span> person.getPersonName();
 }

 <span class="code-keyword">public</span> void setPersonName(<span class="code-object">String</span> personName){
  person.setPersonName(personName);
 }

 <span class="code-keyword">public</span> <span class="code-object">String</span> getAddress(){
  <span class="code-keyword">return</span> person.getAddress();
 }

 <span class="code-keyword">public</span> void setAddress(<span class="code-object">String</span> address){
  person.setAddress(address);
 }

 <span class="code-keyword">public</span> void updateAllValues(<span class="code-object">String</span> address, 
                             <span class="code-object">String</span> personName, 
                             <span class="code-object">double</span> balance){
  em.joinTransaction();
  setAddress(address);
  setPersonName(personName);
  setBalance(balance);
 }

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

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

 <span class="code-keyword">public</span> void withdraw(<span class="code-object">double</span> amount){

  <span class="code-keyword">if</span>(amount &gt; getBalance())<span class="code-keyword">throw</span> <span class="code-keyword">new</span> IllegalStateException
    (<span class="code-quote">"The amount("</span>+amount+") to be withdrawn is more than   
    the available balance(<span class="code-quote">"+getBalance()+"</span>)");

  em.joinTransaction();
  setBalance(getBalance() - amount);

 }

 <span class="code-keyword">public</span> void deposit(<span class="code-object">double</span> amount){
  em.joinTransaction();
  setBalance(getBalance() + amount);
 }

 @Remove
 <span class="code-keyword">public</span> void destroy(){
  em.close();
 }
}</pre>
</div></div>

<p>11. As outlined above, right click on the <tt>META_INF</tt> directory of <tt>BeanManagedJPA-EJB</tt> project and  <br/>
    create <tt>persistence.xml</tt>. Copy the following contents into <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> version=<span class="code-quote">"1.0"</span>
 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence   
 http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"&gt;

 <span class="code-tag">&lt;persistence-unit name=<span class="code-quote">"AccountUnit"</span> transaction-type=<span class="code-quote">"JTA"</span>&gt;</span>
  <span class="code-tag">&lt;description&gt;</span>ContainerManagedJPA<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;jta-data-source&gt;</span>AccountDS<span class="code-tag">&lt;/jta-data-source&gt;</span>
  <span class="code-tag">&lt;class&gt;</span>sample.jpa.Account<span class="code-tag">&lt;/class&gt;</span>
  <span class="code-tag">&lt;class&gt;</span>sample.jpa.Person<span class="code-tag">&lt;/class&gt;</span>
 <span class="code-tag">&lt;/persistence-unit&gt;</span>
<span class="code-tag">&lt;/persistence&gt;</span></pre>
</div></div>

<p>12. Since we are going to use EJB annotations, the <tt>META-INF/ejb-jar.xml</tt> will not have any declarations. The contents of the <tt>META-INF/openejb-jar.xml</tt> file should be as below. Otherwise, modify it accordingly.</p>

<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>openejb-jar.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;openejb-jar xmlns=<span class="code-quote">"http://openejb.apache.org/xml/ns/openejb-jar-2.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:sec</span>=<span class="code-quote">"http://geronimo.apache.org/xml/ns/security-2.0"</span> 
 <span class="code-keyword">xmlns:sys</span>=<span class="code-quote">"http://geronimo.apache.org/xml/ns/deployment-1.2"</span>&gt;

<span class="code-tag">&lt;sys:environment&gt;</span>
 <span class="code-tag">&lt;sys:moduleId&gt;</span>
  <span class="code-tag">&lt;sys:groupId&gt;</span>BeanManagedJPA<span class="code-tag">&lt;/sys:groupId&gt;</span>
  <span class="code-tag">&lt;sys:artifactId&gt;</span>EJB<span class="code-tag">&lt;/sys:artifactId&gt;</span>
  <span class="code-tag">&lt;sys:version&gt;</span>1.0<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:moduleId&gt;</span>

 <span class="code-tag">&lt;dependencies&gt;</span>
  <span class="code-tag">&lt;dependency&gt;</span>
   <span class="code-tag">&lt;groupId&gt;</span>console.dbpool<span class="code-tag">&lt;/groupId&gt;</span>
   <span class="code-tag">&lt;artifactId&gt;</span>AccountDS<span class="code-tag">&lt;/artifactId&gt;</span>
  <span class="code-tag">&lt;/dependency&gt;</span>
 <span class="code-tag">&lt;/dependencies&gt;</span>
<span class="code-tag">&lt;/sys:environment&gt;</span>
<span class="code-tag">&lt;enterprise-beans/&gt;</span>
<span class="code-tag">&lt;/openejb-jar&gt;</span></pre>
</div></div>

<p>13. Finally the project <tt>BeanManagedJPA-EJB</tt> should like as below.</p>

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

<h2><a name="BeanManagedPersistencewithJPA-Creatingwebapplication"></a>Creating web application </h2>

<p>1. Right click on the <em>Project Explorer</em> and select <em>New =&gt; Project</em>. This will popup <em>New Project</em> wizard.  <br/>
   Select <em>Dynamic Web Project</em> under option <em>Web</em>. Click on the <em>Next</em> button.</p>

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

<p>2. Provide the values as given in the screen shot below on the <em>New Dynamic Web Project</em> wizard. Please note that <em>Add project to an EAR</em> checkbox is check to add this web project to <em>BeanManagedJPA-EAR</em> created during the creation of <em>BeanManagedJPA-EJB</em> project.</p>

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

<p>3. In the next screen, select the <em>Version</em> values as given in the below figure and click on the <em>Next</em> button. </p>

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

<p>4. Check on the <em>Generate Deployment Descriptor</em> checkbox and click on the <em>Next</em> button. On the next screen, configure the deployment plan as follows. After this, click on the <em>Finish</em> button to complete creating web project</p>

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


<p>5. Right click on the <em>WebContent</em> folder of the web project and navigate to <em>New =&gt; HTML</em> to create the index.html file as given in the screen shot. Click on the <em>Next</em> button and on the next screen click on the <em>Finish</em> button. The contents of the index.html is provided below the screen shot.</p>

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

<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>index.html</b></div><div class="codeContent">
<pre class="code-actionscript">&lt;!DOCTYPE html PUBLIC 
 "-//W3C//DTD HTML 4.01 Transitional//EN" 
 "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
 &lt;head&gt;
  &lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;
  &lt;title&gt;Bean Managed JPA&lt;/title&gt;
 &lt;/head&gt;

&lt;body&gt;

 &lt;font size=4&gt;
   &lt;a href="/BeanManagedJPA-WEB/ViewAccount.html"&gt;
    View Account Details
   &lt;/a&gt;
 &lt;/font&gt;&lt;br/&gt;

 &lt;font size=4&gt;
  &lt;a href="/BeanManagedJPA-WEB/TransferAmount.jsp"&gt;
    Transfer Amount
  &lt;/a&gt;
 &lt;/font&gt;

&lt;/body&gt;

&lt;/html&gt;</pre>
</div></div>

<p>6. Right click on the <em>WebContent</em> folder of the web project and navigate to <em>New =&gt; HTML</em> to create the ViewAccount.html file as given in the screen shot. Click on the <em>Next</em> button and on the next screen click on the <em>Finish</em> button. The content of the ViewAccount.html is provided below the screen shot.</p>

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

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

<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>ViewAccount.html</b></div><div class="codeContent">
<pre class="code-actionscript">&lt;!DOCTYPE html PUBLIC 
 "-//W3C//DTD HTML 4.01 Transitional//EN" 
 "http://www.w3.org/TR/html4/loose.dtd"&gt;

&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;
&lt;title&gt;Bean Managed JPA&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;form name="input" 
 action="/BeanManagedJPA-WEB/RetrieveAccount.jsp"method="get"&gt;

&lt;table border="0"&gt;
&lt;tr&gt;
&lt;td align="right"&gt;&lt;font color="black" size="4"&gt;Account <span class="code-object">Number</span>&lt;/font&gt;&lt;/td&gt;
&lt;td align="left"&gt;&lt;input type="text" name="accountNumber"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;&lt;input type="submit" value="Submit"&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</div></div>

<p>9. Similarly, as illustrated in the previous steps, create <tt>RetrieveAccount.jsp</tt>. The contents of the of the jsp is as follows.</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>RetrieveAccount.jsp</b></div><div class="codeContent">
<pre class="code-actionscript">&lt;%@ page language="java" contentType="text/html; 
    charset=ISO-8859-1" pageEncoding="ISO-8859-1"%&gt;
&lt;%@ page import="sample.jpa.AccountInterface"%&gt; 
&lt;%@ page import="javax.naming.Context"%&gt;  
&lt;%@ page import="javax.naming.InitialContext"%&gt; 


&lt;!DOCTYPE html PUBLIC 
 "-//W3C//DTD HTML 4.01 Transitional//EN" 
 "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" 
 content="text/html; 
 charset=ISO-8859-1"&gt;
&lt;title&gt;Retrieve and Update Account&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;%

<span class="code-object">String</span> update = request.getParameter("Update");
<span class="code-object">String</span> cancel = request.getParameter("Cancel");

System.out.println("update value="+update);
System.out.println("cancel value="+cancel);

<span class="code-object">String</span> submitValue = <span class="code-keyword">null</span>;
<span class="code-keyword">if</span>(update != <span class="code-keyword">null</span>) submitValue=update;
<span class="code-keyword">if</span>(cancel != <span class="code-keyword">null</span>) submitValue=cancel;

System.out.println("1 Submit value="+submitValue);

<span class="code-keyword">if</span>(submitValue != <span class="code-keyword">null</span>) {

 System.out.println("2 Submit value="+submitValue);
 <span class="code-keyword">if</span>(submitValue.equals("Cancel")){
  System.out.println("3 Submit value="+submitValue);
  response.sendRedirect("/BeanManagedJPA-WEB/");
 }

<span class="code-keyword">else</span> <span class="code-keyword">if</span>(submitValue.equals("Update")){

 System.out.println("4 Submit value="+submitValue);
 System.out.println("Updating the Account Entity Started");

 Context ctx  = <span class="code-keyword">new</span> InitialContext();

 System.out.println("Instantiating beans...");

 AccountInterface accountBean = (AccountInterface)
  ctx.lookup("java:comp/env/ejb/AccountInterface");

 <span class="code-keyword">int</span> accountNumber = Integer.<span class="code-keyword">parseInt</span>
  (request.getParameter("accountNumber"));

 accountBean.initialize(accountNumber);
 
 accountBean.updateAllValues(request.getParameter("address"), 
                             request.getParameter("personName"),
                             Double.parseDouble
                              (request.getParameter("balance")));

 System.out.println("Updating the Account Entity Ended");
 response.sendRedirect("/BeanManagedJPA-WEB/RetrieveAccount.jsp?
  accountNumber="+accountNumber);
}

} <span class="code-keyword">else</span>{

 Context ctx  = <span class="code-keyword">new</span> InitialContext();
 System.out.println("Instantiating beans...");
 AccountInterface accountBean = (AccountInterface)ctx.lookup("java:comp/env/ejb/AccountInterface");
 <span class="code-keyword">int</span> accountNumber = Integer.<span class="code-keyword">parseInt</span>(request.getParameter("accountNumber"));
 accountBean.initialize(accountNumber);
%&gt;

&lt;form name="input" action="/BeanManagedJPA-WEB/RetrieveAccount.jsp"&gt;
&lt;table border="0"&gt; 
&lt;tr&gt;
&lt;td align="right"&gt;&lt;font color="black" size="4"&gt; Account <span class="code-object">Number</span> :&lt;/font&gt;&lt;/td&gt;
&lt;td align="left"&gt;&lt;font color="red" size="4"&gt;&lt;%=accountNumber%&gt;&lt;/font&gt;
&lt;input type="hidden" name="accountNumber" value="&lt;%=accountNumber%&gt;"&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;&lt;font color="black" size="4"&gt; Person Name :
 &lt;/font&gt;&lt;/td&gt;
&lt;td align="left"&gt;&lt;font color="red" size="4"&gt;
 &lt;%=accountBean.getPersonName()%&gt; 
 &lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;&lt;font color="black" size="4"&gt; Update Person Name :
 &lt;/font&gt;&lt;/td&gt;
&lt;td align="left"&gt;&lt;input type="text" name="personName"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;&lt;font color="black" size="4"&gt; Address :
 &lt;/font&gt;&lt;/td&gt;
&lt;td align="left"&gt;&lt;font color="red" size="4"&gt;&lt;%=accountBean.getAddress()%&gt; 
 &lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;&lt;font color="black" size="4"&gt; Update Address :
 &lt;/font&gt;&lt;/td&gt;
&lt;td align="left"&gt;&lt;input type="text" name="address"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;&lt;font color="black" size="4"&gt; Balance :
 &lt;/font&gt;&lt;/td&gt;
&lt;td align="left"&gt;&lt;font color="red" size="4"&gt;&lt;%=accountBean.getBalance()%&gt;
 &lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;&lt;font color="black" size="4"&gt; Update Balance :
 &lt;/font&gt;&lt;/td&gt;
&lt;td align="left"&gt;&lt;input type="text" name="balance"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;&lt;input type="submit" name="Update" 
 value="Update"&gt;&lt;/td&gt;
&lt;td align="left"&gt;&lt;input type="submit" name="Cancel" 
 value="Cancel"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/form&gt;
&lt;%} %&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</div></div>


<p>10. Similarly, as illustrated in the previous steps, create <tt>TransferAmount.jsp</tt>. The contents of the jsp is as follows.</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>TransferAmount.jsp</b></div><div class="codeContent">
<pre class="code-actionscript">&lt;%@ page language="java" contentType="text/html; 
 charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%&gt;
&lt;%@ page import="sample.jpa.AccountInterface"%&gt; 
&lt;%@ page import="javax.naming.Context"%&gt;  
&lt;%@ page import="javax.naming.InitialContext"%&gt;
&lt;%@ page import="javax.transaction.UserTransaction"%&gt;
&lt;!DOCTYPE html PUBLIC 
 "-//W3C//DTD HTML 4.01 Transitional//EN" 
 "http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" 
 content="text/html; charset=ISO-8859-1"&gt;
&lt;title&gt;Transfer Amount&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;%
<span class="code-object">String</span> submitValue = request.getParameter("Transfer");

<span class="code-keyword">if</span>(submitValue!=<span class="code-keyword">null</span>){

 <span class="code-keyword">int</span> debitAccount = Integer.<span class="code-keyword">parseInt</span>
 (request.getParameter("accountNumber1"));

 <span class="code-keyword">int</span> creditAccount = Integer.<span class="code-keyword">parseInt</span>
 (request.getParameter("accountNumber2"));

 double amount = Double.parseDouble
 (request.getParameter("amount"));

 Context ctx = <span class="code-keyword">new</span> InitialContext();

 AccountInterface debitAccountBean = 
 (AccountInterface)ctx.lookup("java:comp/env/ejb/AccountInterface");

 debitAccountBean.initialize(debitAccount);

 AccountInterface creditAccountBean = 
 (AccountInterface)ctx.lookup("java:comp/env/ejb/AccountInterface");

 creditAccountBean.initialize(creditAccount);

 UserTransaction ut = 
 (UserTransaction)ctx.lookup("java:comp/UserTransaction");
 
 ut.begin();
 debitAccountBean.withdraw(amount);
 creditAccountBean.deposit(amount);
 ut.commit();

 response.sendRedirect("/BeanManagedJPA-WEB/");

}

<span class="code-keyword">else</span>{

%&gt;
&lt;form name="input" action="/BeanManagedJPA-WEB/TransferAmount.jsp"
 method="get"&gt;
&lt;table border="0"&gt;
&lt;tr&gt;
&lt;td align="right"&gt;&lt;font color="black" size="4"&gt;
  Debit Account <span class="code-object">Number</span> :&lt;/font&gt;&lt;/td&gt;
&lt;td align="left"&gt;&lt;input type="text" name="accountNumber1"&gt;
 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;&lt;font color="black" size="4"&gt; 
 Credit Account <span class="code-object">Number</span>:&lt;/font&gt;&lt;/td&gt;
&lt;td align="left"&gt;&lt;input type="text" 
 name="accountNumber2"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;&lt;font color="black" size="4"&gt; 
 Amount to be Transfered :&lt;/font&gt;&lt;/td&gt;
&lt;td align="left"&gt;&lt;input type="text" name="amount"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;&lt;input type="submit" name="Transfer" 
 value="Transfer"&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/form&gt;
&lt;%} %&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</div></div>

<p>11. Right click on the <tt>BeanManagedJPA-WEB</tt> project and click on <em>Properties</em> to open <em>Properties for BeanManagedJPA-WEB</em> wizard. Click on the <em>Java Build Path</em> and <em>Projects</em> tab. Click on the <em>Add</em> button and add <tt>BeanManagedJPA-EJB</tt> project. Finally, click on the <em>OK</em> button on <em>Properties for BeanManagedJPA-WEB</em> wizard. This is required because, <tt>BeanManagedJPA-WEB</tt> projects looks up <tt>AccountInterface</tt> ejb in the <tt>BeanManagedJPA-EJB</tt> project. To resolve the dependency during compilation, the EJB project has to be added to the build path of the WEB project.</p>

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


<h2><a name="BeanManagedPersistencewithJPA-SettingupthedatabasetablesandtheDatasource"></a>Setting up the database tables and the Datasource</h2>

<p>1. Start the geronimo server and open the admin console on a browser window with the url  <br/>
   <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>.</p>

<p>2. Click on the <em>Embedded DB =&gt; DB Manager</em> on the <em>Console Navigation</em> portlet. </p>

<p>3. On the <em>Run SQL</em> portlet on the right side, enter <em>AccountDB</em> in the <em>Create DB</em> textbox and click on the <br/>
  <em>Create</em> button.</p>

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

<p>4. The above step will create <tt>AccountDB</tt> database. On the same screen, enter the below SQL command on the <em>SQL Command/s</em> textarea and select <em>AccountDB</em> in the <em>Use DB</em> combo box and click on the <em>Run SQL</em> button. This will create <em>ACCOUNTCME</em> table in the <em>AccountDB</em> database.</p>

<div class="code" style="border-style: solid; "><div class="codeContent">
<pre class="code-sql">create table ACCOUNTBME (ACCOUNTNUMBER integer, PERSONID integer, balance decimal(15,2));</pre>
</div></div>

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

<p>5. Similarly, enter the below SQL command on the <em>SQL Command/s</em> textarea and select <em>AccountDB</em> in the <em>Use DB</em> combo box and click on the <em>Run SQL</em> button. This will create <em>PERSONBME</em> table in the <em>AccountDB</em> database.</p>

<div class="code" style="border-style: solid; "><div class="codeContent">
<pre class="code-sql">create table PERSONBME (PERSONID integer, PERSONNAME varchar(255), ADDRESS varchar(255));</pre>
</div></div>

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


<p>6. Insert the two rows using the below SQL command. </p>

<div class="code" style="border-style: solid; "><div class="codeContent">
<pre class="code-sql">insert into PERSONBME values (1, 'Shane Gibson', '#120, Manhattan, NewYork, USA');
insert into PERSONBME values (2, 'Rameez Raza', '#130, Times Square, NewYork, USA');
insert into ACCOUNTBME values (10,1,6500);
insert into PERSONBME values (11,2,9000);</pre>
</div></div>
<p>After inserting the rows, table will look like the below screen shot.</p>

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


<p>7. We need to deploy datasource over AccountDB database for JPA. This datasource will be used by JPA to connect to database and perform DML operations. Admin console can be used to deploy a datasource over AccountDB. Click on the <em>services =&gt; Database Pools</em> in the <em>Console =&gt; Navigation</em> portlet. This will display the list of database pools currently running in the server.</p>

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


<p>8. Click on the <em>Using the Geronimo database pool wizard</em> link. This will open up the <em>Database pools</em> portlet as follows. Provide the value for <em>Name of the Database pool</em> as <em>AccountDS</em> and select <em>Derby embedded</em> as below and click on the <em>Next</em> button.</p>

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


<p>9. On the next screen, select the JAR file listed in the <em>Driver JAR</em> select box and provide <em>AccountDB</em> as the value for Database Name and click on the <em>Deploy</em> button at the bottom. This will deploy the data source and display the list of datasources currently deployed on the server.</p>

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

<p>10. In the eclipse, open the <tt>openejb-jar.xml</tt> and provide the dependency to the <tt>AccountDS</tt>. Finally, the <tt>openejb-jar.xml</tt> should be as below. This configuration is already done in the step 12 of <em>Creating ejb application with entities</em> above.</p>

<h2><a name="BeanManagedPersistencewithJPA-Deployingthe%28ear%29application"></a>Deploying the (ear) application</h2>

<p>1. Deploy the EAR file as follows<br/>
<font color="white"><br/>
<div class="preformatted" style="border-style: solid; "><div class="preformattedContent" style="background-color: #000000; ">
<pre>C:\Geronimo-2.1\bin&gt;deploy.bat --user system --password manager deploy c:\temp\BeanManagedJPA-EAR.ear
Using GERONIMO_BASE:   C:\Geronimo-2.1
Using GERONIMO_HOME:   C:\Geronimo-2.1
Using GERONIMO_TMPDIR: var\temp
Using JRE_HOME:        C:\SDK-May-31-2007\jre
    Deployed default/BeanManagedJPA-EAR/1.0/car
      `-&gt; BeanManagedJPA-WEB.war @ /BeanManagedJPA-WEB
      `-&gt; BeanManagedJPA-EJB.jar</pre>
</div></div></font></p>


<h2><a name="BeanManagedPersistencewithJPA-Runningtheapplication"></a>Running the application</h2>

<p>1. Open a browser window and hit the URL as <span class="nobr"><a href="http://localhost:8080/BeanManagedJPA-WEB/" title="Visit page outside Confluence" rel="nofollow">http://localhost:8080/BeanManagedJPA-WEB/<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>. This brings upthe screen shot below. Click on the <em>View Account Details</em> link.</p>

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

<p>2. On this page, enter <em>10</em> in the <em>Account Number</em> text box as below and click on the button</p>

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

<p>3. This will bring up the screen shot below. You can update the <em>Person Name</em>, <em>Address</em> and <em>Balance</em> values.</p>

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

<p>4. Enter the values given in the screen shot below and click on the <em>Update</em> button.</p>

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

<p>5. Once the <em>Update</em> button is pressed, the below screen shot is displayed with the updated values. Click on the <em>Cancel</em> button to go back to the main page.</p>

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

<p>6. Click on the <em>Transfer Amount</em> link on the main page. This will bring up the page as given in the screen shot below. Enter the values for <em>Debit Account Number</em>, <em>Credit Account Number</em> and  <em>Amount to be Transferred</em> as given in the screen shot and click on the <em>Transfer</em> button. This will transfer the specified amount from debit account to the credit account. You can verify this either in the database or use the <em>View Account Details</em> link shown earlier.</p>

<p><img src="/confluence/download/attachments/88453/29.jpg" align="absmiddle" border="0" /></p></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