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: Working with JSF and JPA (page edited)
Date Tue, 03 Jun 2008 06:29: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/Working+with+JSF+and+JPA">Working with JSF and JPA</a>
        </span>
    </div>

     <p>
        <a href="http://cwiki.apache.org/confluence/display/GMOxDOC21/Working+with+JSF+and+JPA">Working with JSF and JPA</a>
        has been edited by             <a href="http://cwiki.apache.org/confluence/display/~phanibalaji">Phani Balaji Madgula</a>
            <span class="smallfont">(Jun 02, 2008)</span>.
     </p>
    
     <p>
                 <a href="http://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=87251&originalVersion=3&revisedVersion=4">(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 databases 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 explains developing a JSF (JavaServerFaces) application using JPA for persistence. The application has an ejb application and a web application. The ejb application uses JPA to manipulate entities in the database. The web application uses JSF to look up ejbs that trigger operations on the entities. The database being used is the embedded derby database shipped with geronimo. The web application displays a list of currencies of various countries along with the corresponding USD conversion rate. The web interface allows user to add a new currency, edit the existing currency and delete a currency etc. </p>

<p>The application can be downloaded from this <span class="nobr"><a href="/confluence/download/attachments/87251/JPA-JSFApp.ear?version=1" title="JPA-JSFApp.ear attached to Working with JSF and 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>

<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>
	<li>Apache Geronimo 2.1</li>
</ul>


<p>The tutorial covers following topics.</p>

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


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

<p>1. Download the geronimo v2.1 and install it in your system. Look into the geronimo documentation for <br/>
   instructions to install the server.</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 geronimo v2.1 in the eclipse. Look into the geronimo eclipse plugin <br/>
   documentation for instructions to install a runtime environment for geronimo.</p>

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

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

<p><img src="/confluence/download/attachments/87251/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/87251/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 shown in the below screen shot.</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>Click on the <em>Next</em> button.</p>

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

<p>4. 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/87251/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/87251/5.jpg" align="absmiddle" border="0" /></p>

<p>6. Provide the following values in the textboxes as shown in the below screen shot and click on the <em>Finish</em> button.</p>

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

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

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

<p>8. Copy the following contents into <tt>Currency.java</tt>. The <tt>Currency.java</tt> uses various JPA annotations to mark the class as an entity and designates database table to persist the attribute values.</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>Currency.java</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> sample.jpa.currency;

<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">"CurrencyRateTable"</span>)
<span class="code-keyword">public</span> class Currency <span class="code-keyword">implements</span> Serializable {
	
 @Id
  <span class="code-keyword">public</span> <span class="code-object">String</span> currencyName;
  <span class="code-keyword">public</span> <span class="code-object">String</span> countryName;
  <span class="code-keyword">public</span> <span class="code-object">double</span> rateAgstUSD;

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

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

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

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

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

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

  <span class="code-keyword">public</span> void setRateAgstUSD(<span class="code-object">double</span> rateAgstUSD) {
   <span class="code-keyword">this</span>.rateAgstUSD = rateAgstUSD;
  }
}</pre>
</div></div>

<p>9. Similarly, create the interface <tt>CurrencyInterface.java</tt> and copy the following contents. This is the  <br/>
   stateless session bean interface.</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>CurrencyInterface.java</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> sample.jpa.currency;
<span class="code-keyword">import</span> java.util.List;
<span class="code-keyword">public</span> <span class="code-keyword">interface</span> CurrencyInterface {
 <span class="code-keyword">public</span> Currency createCurrency(<span class="code-object">String</span> currencyName, 
                                <span class="code-object">String</span> countryName, 
                                <span class="code-object">double</span> rateAgstUSD);
	
 <span class="code-keyword">public</span> List listCurrencies();
	
 <span class="code-keyword">public</span> Currency updateCurrency(<span class="code-object">String</span> currencyName, 
                                <span class="code-object">double</span> rateAgstUSD);
	
 <span class="code-keyword">public</span> void deleteCurrency(<span class="code-object">String</span> currencyName);
	
 <span class="code-keyword">public</span> Currency retrieveCurrency(<span class="code-object">String</span> currencyName);
	
}</pre>
</div></div>

<p>10. Similarly, create <tt>CurrencyBean.java</tt> and copy the following contents. This class is the bean class that implements <tt>CurrencyInterface.java</tt> interface.</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>CurrencyBean.java</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> sample.jpa.currency;

<span class="code-keyword">import</span> java.util.List;
<span class="code-keyword">import</span> javax.ejb.Local;
<span class="code-keyword">import</span> javax.ejb.Remote;
<span class="code-keyword">import</span> javax.ejb.Stateless;
<span class="code-keyword">import</span> javax.persistence.EntityManager;
<span class="code-keyword">import</span> javax.persistence.PersistenceContext;
<span class="code-keyword">import</span> javax.persistence.Query;

@Stateless
@Local
<span class="code-keyword">public</span> class CurrencyBean <span class="code-keyword">implements</span> CurrencyInterface{

 @PersistenceContext(unitName=<span class="code-quote">"CurrencyRateUnit"</span>)
 <span class="code-keyword">private</span> EntityManager em;
	
 <span class="code-keyword">public</span> Currency createCurrency(<span class="code-object">String</span> currencyName, 
                                <span class="code-object">String</span> countryName, 
			        <span class="code-object">double</span> rateAgstUSD){
		
  Currency crt1 = em.find(Currency.class, currencyName);

  <span class="code-keyword">if</span>(crt1 != <span class="code-keyword">null</span>) 
   <span class="code-keyword">throw</span> <span class="code-keyword">new</span> IllegalArgumentException
   (<span class="code-quote">"Currency already exists: Currency Name ("</span>+currencyName+<span class="code-quote">")"</span>);

  Currency crt = <span class="code-keyword">new</span> Currency();
		
  crt.setCountryName(countryName);
  crt.setCurrencyName(currencyName);
  crt.setRateAgstUSD(rateAgstUSD);
		

  <span class="code-object">System</span>.out.println("Persisting Currency Rate entity: 
   (Currency = <span class="code-quote">"+currencyName+"</span>)");

  em.persist(crt);

  <span class="code-object">System</span>.out.println("Persisted successfully Currency entity: 
   (Currency = <span class="code-quote">"+currencyName+"</span>)");
  <span class="code-keyword">return</span> crt;
	
 }
	
 <span class="code-keyword">public</span> List listCurrencies(){
  <span class="code-keyword">if</span>(em == <span class="code-keyword">null</span>) <span class="code-object">System</span>.out.println(<span class="code-quote">"em is <span class="code-keyword">null</span>!!!"</span>);

  Query q = em.createQuery(<span class="code-quote">"SELECT crt FROM Currency crt"</span>);

  List currList = q.getResultList();

  <span class="code-keyword">return</span> currList;
 }
	
 <span class="code-keyword">public</span> Currency updateCurrency(<span class="code-object">String</span> currencyName, 
                                <span class="code-object">double</span> rateAgstUSD){
  <span class="code-keyword">if</span>(em == <span class="code-keyword">null</span>) <span class="code-object">System</span>.out.println(<span class="code-quote">"em is <span class="code-keyword">null</span>!!!"</span>);
		
  Currency crt1 = em.find(Currency.class, currencyName);

  <span class="code-keyword">if</span>(crt1 == <span class="code-keyword">null</span>) <span class="code-keyword">throw</span> <span class="code-keyword">new</span> IllegalArgumentException
   (<span class="code-quote">"Currency not found: Currency Name ("</span>+currencyName+<span class="code-quote">")"</span>);

  crt1.setRateAgstUSD(rateAgstUSD);

  <span class="code-keyword">return</span> crt1;
		 
 }
	
 <span class="code-keyword">public</span> void deleteCurrency(<span class="code-object">String</span> currencyName){
  <span class="code-keyword">if</span>(em == <span class="code-keyword">null</span>) <span class="code-object">System</span>.out.println(<span class="code-quote">"em is <span class="code-keyword">null</span>!!!"</span>);

  Currency crt1 = em.find(Currency.class, currencyName);

  <span class="code-keyword">if</span>(crt1 == <span class="code-keyword">null</span>) <span class="code-keyword">throw</span> <span class="code-keyword">new</span> 
   IllegalArgumentException
   (<span class="code-quote">"Currency not found: Currency Name ("</span>+currencyName+<span class="code-quote">")"</span>);

  em.remove(crt1);
 }

 <span class="code-keyword">public</span> Currency retrieveCurrency(<span class="code-object">String</span> currencyName){
  Currency crt1 = em.find(Currency.class, currencyName);
  <span class="code-keyword">return</span> crt1;
 }
	
}</pre>
</div></div>

<p>11. As outlined above, right click on the <tt>META-INF</tt> directory of <em>CurrencyEJB</em> project and 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">"CurrencyRateUnit"</span>&gt;</span>
 <span class="code-tag">&lt;description&gt;</span>JPA JSF Sample<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.currency.Currency
 <span class="code-tag">&lt;/class&gt;</span>

 <span class="code-tag">&lt;properties&gt;</span>
  &lt;property name=<span class="code-quote">"openjpa.ConnectionURL"</span> 
   value=<span class="code-quote">"jdbc:derby:CurrencyDB"</span> /&gt;
  &lt;property name=<span class="code-quote">"openjpa.ConnectionDriverName"</span> 
   value=<span class="code-quote">"org.apache.derby.jdbc.EmbeddedDriver"</span> /&gt;
  <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>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>Currency<span class="code-tag">&lt;/sys:groupId&gt;</span>
      <span class="code-tag">&lt;sys:artifactId&gt;</span>JPA-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;/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 <em>CurrencyEJB</em> should like as below.</p>

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

<h2><a name="WorkingwithJSFandJPA-CreatingwebapplicationwithJSFconfiguration"></a>Creating web application with JSF configuration</h2>

<p>1. Right click on the <em>Project Explorer</em> and select <em>New =&gt; Project</em>. This will open <em>New Project</em> wizard as below. 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/87251/9.jpg" align="absmiddle" border="0" /></p>

<p>2. Provide the values as given in the below screen shot 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>CurrencyEAR</em> created earlier.</p>

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


<p>3. In the next screen, select the <em>Version</em> values as given in the below screen shot and click on the <em>Next</em> button. Please note that the <em>Java Server Faces</em> check box is checked and the version values should be 1.2.</p>

<p><img src="/confluence/download/attachments/87251/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>Next</em> button.</p>

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


<p>5. On the <em>JSF Capabilities</em> window, select the second radio button and click on the <em>new</em> button.</p>

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


<p>6. The next wizard <em>Create JSF Implementation Library</em> suggests to create JSF Implementation library. Give the library name as <em>JSFCustomLibrary</em> and add the following jars. Click on the <em>Finish</em> button once done. See the screen shot below.</p>

<ul>
	<li>&lt;geronimo_home&gt;\repository\commons-beanutils\commons-beanutils\1.6.1\commons-beanutils-1.6.1.jar</li>
	<li>&lt;geronimo_home&gt;\repository\commons-collections\commons-collections\3.1\commons-collections-3.1.jar</li>
	<li>&lt;geronimo_home&gt;\repository\commons-digester\commons-digester\1.8\commons-digester-1.8.jar</li>
	<li>&lt;geronimo_home&gt;\repository\commons-logging\commons-logging\1.0.4\commons-logging-1.0.4.jar</li>
	<li>&lt;geronimo_home&gt;\repository\org\apache\myfaces\core\myfaces-api\1.2.2\myfaces-api-1.2.2.jar</li>
	<li>&lt;geronimo_home&gt;\repository\org\apache\myfaces\core\myfaces-impl\1.2.2\myfaces-impl-1.2.2.jar</li>
</ul>


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


<p>7. On the <em>JSF Capabilities</em> window change the value of <em>URL Mapping Patterns</em> to <em>*.jsf</em> and click on the <em>Finish</em> button.</p>

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

<p> Right click on the <em>WEB-INF</em> folder and create a <em>tld</em> folder and copy the following files into it.</p>

<ul>
	<li>&lt;geronimo_home&gt;\repository\org\apache\myfaces\core\myfaces-impl\1.2.2\myfaces-impl-1.2.2.jar\META-INF\<br/>
   myfaces-html.tld </li>
	<li>&lt;geronimo_home&gt;\repository\org\apache\myfaces\core\myfaces-impl\1.2.2\myfaces-impl-1.2.2.jar\META-INF\<br/>
   myfaces_core.tld</li>
</ul>



<p>8. The above steps create a new web project with JSF capabilities. Now we can create the required JSPs, JSF managed beans and configure the navigation rules in the <tt>WEB_INF/faces-config.xml</tt>. Right click on the _CurrencyWEB  =&gt; WebContent_and create the following JSPs as given in the below screen shot. The contents of the JSPs are also provided below.</p>

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

<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>index.jsp</b></div><div class="codeContent">
<pre class="code-actionscript">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;
&lt;html&gt;
  &lt;body&gt;
    &lt;jsp:forward page="/listCurrencies.jsf" /&gt;
  &lt;/body&gt;
&lt;/html&gt;</pre>
</div></div> 
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>listCurrencies.jsp</b></div><div class="codeContent">
<pre class="code-actionscript">&lt;%@ page language="java" %&gt;

&lt;%@ taglib uri="/WEB-INF/tld/myfaces-html.tld" prefix="h" %&gt;
&lt;%@ taglib uri="/WEB-INF/tld/myfaces_core.tld" prefix="f" %&gt;  

&lt;%
<span class="code-object">String</span> path = request.getContextPath();
<span class="code-object">String</span> basePath = request.getScheme()+
 "://"+request.getServerName()+
 ":"+request.getServerPort()+path+"/";
%&gt;

&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;
&lt;html&gt;
&lt;head&gt;
 &lt;base href="&lt;%=basePath%&gt;"&gt;
  &lt;title&gt;List of currencies&lt;/title&gt;
&lt;/head&gt;
  
&lt;body&gt;
 &lt;f:view&gt;
  &lt;h:form id="currencyList"&gt;
  &lt;h:dataTable id="currencies" 
   value="#{CurrencyListJSFBean.currencies}" 
   <span class="code-keyword">var</span>="currency" 
   border="1"&gt;   
   &lt;h:column&gt;
    &lt;f:facet name="header"&gt;
     &lt;h:outputText  value="Currency Name"/&gt;
    &lt;/f:facet&gt;
    &lt;h:outputText value="#{currency.currencyName}" /&gt;
   &lt;/h:column&gt;
   &lt;h:column&gt;
    &lt;f:facet name="header"&gt;
     &lt;h:outputText  value="Country Name"/&gt;
    &lt;/f:facet&gt;
    &lt;h:outputText value="#{currency.countryName}" /&gt;
   &lt;/h:column&gt;
   &lt;h:column&gt;
    &lt;f:facet name="header"&gt;
     &lt;h:outputText  value="Rate Against USD"/&gt;
    &lt;/f:facet&gt;
    &lt;h:outputText value="#{currency.rateAgstUSD}" /&gt;
   &lt;/h:column&gt;
   &lt;h:column&gt;
    &lt;f:facet name="header"&gt;
     &lt;h:outputText  value="Edit"/&gt;
    &lt;/f:facet&gt;
    &lt;h:commandLink id="Edit" 
     action="editCurrency" 
     actionListener="#{CurrencyJSFBean.selectCurrency}"&gt;
      &lt;h:outputText value="Edit" /&gt;
      &lt;f:param id="editCurrency" 
       name="currencyName" 
       value="#{currency.currencyName}" /&gt;
    &lt;/h:commandLink&gt;
   &lt;/h:column&gt;
   &lt;h:column&gt;
    &lt;f:facet name="header"&gt;
     &lt;h:outputText  value="Delete"/&gt;
    &lt;/f:facet&gt;
    &lt;h:commandLink id="Delete" 
     action="deleteCurrency" 
     actionListener="#{CurrencyListJSFBean.deleteCurrency}"&gt;
     &lt;h:outputText value="Delete" /&gt;
     &lt;f:param id="deleteCurrency" 
      name="currencyName" 
      value="#{currency.currencyName}" /&gt;
    &lt;/h:commandLink&gt;
   &lt;/h:column&gt;
  &lt;/h:dataTable&gt; 
  &lt;h:commandLink id="Add" 
   action="insertCurrency" 
   actionListener="#{CurrencyJSFBean.initCurrency}"&gt;
   &lt;h:outputText value="Add a Currency" /&gt;
   &lt;/h:commandLink&gt;
  &lt;/h:form&gt;
  &lt;/f:view&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</div></div> 
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>insertCurrencyjsp</b></div><div class="codeContent">
<pre class="code-actionscript">&lt;%@ page language="java" %&gt;
&lt;%@ taglib uri="/WEB-INF/tld/myfaces-html.tld" prefix="h" %&gt;
&lt;%@ taglib uri="/WEB-INF/tld/myfaces_core.tld" prefix="f" %&gt; 
&lt;%
<span class="code-object">String</span> path = request.getContextPath();
<span class="code-object">String</span> basePath = request.getScheme()+
 "://"+request.getServerName()+
 ":"+request.getServerPort()+path+"/";
%&gt;

&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;
&lt;html&gt;
&lt;head&gt;
 &lt;base href="&lt;%=basePath%&gt;"&gt;
 &lt;title&gt;Add Currency&lt;/title&gt;
&lt;/head&gt;
  
&lt;body&gt;
 &lt;f:view&gt;
  &lt;h:form&gt;
   &lt;h:inputHidden id="id" value="#{CurrencyJSFBean.currencyName}"/&gt;
    &lt;h:panelGrid columns="2" border="1"&gt;
     &lt;h:outputText value="Currency Name :" /&gt;
     &lt;h:inputText id="currencyName" 
      value="#{CurrencyJSFBean.currencyName}"&gt;
     &lt;/h:inputText&gt;
     &lt;h:outputText value="Country Name :" /&gt;
     &lt;h:inputText id="countryName" 
      value="#{CurrencyJSFBean.countryName}"&gt;
     &lt;/h:inputText&gt;
     &lt;h:outputText value="Rate Against USD :" /&gt;
     &lt;h:inputText id="rateAgstUSD" 
      value="#{CurrencyJSFBean.rateAgstUSD}"&gt;
     &lt;/h:inputText&gt;
    &lt;/h:panelGrid&gt;
		
  &lt;h:messages id="errors" 
   style="color:red;font-weight:bold" 
   layout="table" /&gt;
   &lt;h:commandButton value="Save" 
    action="listCurrencies" 
    actionListener="#{CurrencyJSFBean.insertCurrency}" /&gt;

  &lt;/h:form&gt;
 &lt;/f:view&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</div></div> 
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>editCurrency.jsp</b></div><div class="codeContent">
<pre class="code-actionscript">&lt;%@ page language="java" %&gt;
&lt;%@ taglib uri="/WEB-INF/tld/myfaces-html.tld" prefix="h" %&gt;
&lt;%@ taglib uri="/WEB-INF/tld/myfaces_core.tld" prefix="f" %&gt; 
&lt;%
<span class="code-object">String</span> path = request.getContextPath();
<span class="code-object">String</span> basePath = request.getScheme()+
 "://"+request.getServerName()+
 ":"+request.getServerPort()+path+"/";
%&gt;

&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;
&lt;html&gt;
&lt;head&gt;
 &lt;base href="&lt;%=basePath%&gt;"&gt;
 &lt;title&gt;Edit Currency&lt;/title&gt;
&lt;/head&gt;
  
&lt;body&gt;
 &lt;f:view&gt;
  &lt;h:form&gt;
   &lt;h:inputHidden id="id" value="#{CurrencyJSFBean.currencyName}"/&gt;
   &lt;h:panelGrid columns="2" border="1"&gt;
    &lt;h:outputText value="Currency Name :" /&gt;
    &lt;h:outputText value="#{CurrencyJSFBean.currencyName}" /&gt;
    &lt;h:outputText value="Country Name :" /&gt;
    &lt;h:outputText value="#{CurrencyJSFBean.countryName}" /&gt;
    &lt;h:outputText value="Rate Against USD :" /&gt;
    &lt;h:inputText id="rateAgstUSD" 
     value="#{CurrencyJSFBean.rateAgstUSD}"&gt;
    &lt;/h:inputText&gt;
   &lt;/h:panelGrid&gt;
		
   &lt;h:messages id="errors" 
    style="color:red;font-weight:bold" 
    layout="table" /&gt;
   
   &lt;h:commandButton value="Save" 
    action="listCurrencies" 
    actionListener="#{CurrencyJSFBean.saveCurrency}" /&gt;

   &lt;/h:form&gt;
  &lt;/f:view&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</div></div> 


<p>9. Create two JSF managed beans <tt>CurrencyJSFBean.java</tt> and <tt>CurrencyListJSFBean.java</tt> as follows. Right click on the <em>CurrencyWEB</em> and select  <em>CurrencyWEB =&gt; New =&gt; Class</em>. See the below screen shot.</p>

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

<p>In the <em>New Java Class</em> wizard, provide the values as given in the screen shot and click on the <em>Finish</em> button.</p>

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

<p>Copy the below contents into <tt>CurrencyListJSFBean.java</tt></p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>CurrencyListJSFBean.java</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> sample.jsf;

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

<span class="code-keyword">import</span> javax.ejb.EJB;
<span class="code-keyword">import</span> javax.faces.component.UIParameter;
<span class="code-keyword">import</span> javax.faces.event.ActionEvent;
<span class="code-keyword">import</span> javax.naming.Context;
<span class="code-keyword">import</span> javax.naming.InitialContext;
<span class="code-keyword">import</span> javax.naming.LinkRef;

<span class="code-keyword">import</span> sample.jpa.currency.Currency;
<span class="code-keyword">import</span> sample.jpa.currency.CurrencyInterface;



<span class="code-keyword">public</span> class CurrencyListJSFBean {
 <span class="code-keyword">private</span> CurrencyInterface ci;
 <span class="code-keyword">private</span> Collection currencies;

 <span class="code-keyword">public</span> CurrencyListJSFBean() <span class="code-keyword">throws</span> Exception{
  Context ctx  = <span class="code-keyword">new</span> InitialContext();
  <span class="code-object">System</span>.out.println(<span class="code-quote">"Instantiating bean..."</span>);
  <span class="code-object">Object</span> obj = ctx.lookup(<span class="code-quote">"java:comp/env/ejb/CurrencyInterface"</span>);
  <span class="code-object">System</span>.out.println((obj <span class="code-keyword">instanceof</span> LinkRef));
  ci = (CurrencyInterface)obj;
  <span class="code-object">System</span>.out.println(<span class="code-quote">"Got the  bean..."</span>);
  init();
 }

 <span class="code-keyword">public</span> Collection getCurrencies() {
  <span class="code-keyword">return</span> currencies;
 }

 <span class="code-keyword">public</span> void setCurrencies(Collection currencies) {
  <span class="code-keyword">this</span>.currencies = currencies;
 }
	
 <span class="code-keyword">public</span> void loadCurrencies()<span class="code-keyword">throws</span> Exception{
  init();
 }
	
 <span class="code-keyword">private</span> void init()<span class="code-keyword">throws</span> Exception{
  List list  = ci.listCurrencies();
  Iterator it  = list.iterator();
  <span class="code-keyword">this</span>.currencies = <span class="code-keyword">new</span> ArrayList();
  <span class="code-keyword">while</span> (it.hasNext()){
   Currency currency = (Currency)it.next();
   CurrencyJSFBean cjb = <span class="code-keyword">new</span> CurrencyJSFBean();
   cjb.setCountryName(currency.getCountryName());
   cjb.setCurrencyName(currency.getCurrencyName());
   cjb.setRateAgstUSD(currency.getRateAgstUSD());

   <span class="code-object">System</span>.out.println(currency.getCountryName()+ 
    <span class="code-quote">" : "</span> +currency.getCurrencyName()+ <span class="code-quote">" : "</span>+ 
    currency.getRateAgstUSD());;
			
   currencies.add(cjb);
  }
 }
	
 <span class="code-keyword">public</span> void deleteCurrency (ActionEvent event){
  UIParameter component = (UIParameter) event.getComponent().findComponent(<span class="code-quote">"deleteCurrency"</span>);
  <span class="code-object">String</span> curencyNameDel = (<span class="code-object">String</span>) component.getValue();
  <span class="code-object">System</span>.out.println(<span class="code-quote">"Currency Name to be deleted = "</span>+curencyNameDel);
  ci.deleteCurrency(curencyNameDel);
		
  Iterator it = <span class="code-keyword">this</span>.getCurrencies().iterator();
  <span class="code-keyword">while</span> (it.hasNext()){
   CurrencyJSFBean cjb = (CurrencyJSFBean)it.next();
   <span class="code-keyword">if</span>(cjb.getCurrencyName().equals(curencyNameDel)){
    it.remove();
   }
  }
 }
}</pre>
</div></div>

<p>Similarly, create <tt>CurrencyJSFBean.java</tt> in the same package and copy the following contents into it.</p>

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

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

<span class="code-keyword">import</span> javax.faces.component.UIParameter;
<span class="code-keyword">import</span> javax.faces.context.FacesContext;
<span class="code-keyword">import</span> javax.faces.event.ActionEvent;
<span class="code-keyword">import</span> javax.naming.Context;
<span class="code-keyword">import</span> javax.naming.InitialContext;
<span class="code-keyword">import</span> javax.naming.LinkRef;

<span class="code-keyword">import</span> sample.jpa.currency.Currency;
<span class="code-keyword">import</span> sample.jpa.currency.CurrencyInterface;


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

 <span class="code-keyword">private</span> CurrencyInterface ci;

 <span class="code-keyword">private</span> <span class="code-object">String</span> currencyName;
 <span class="code-keyword">private</span> <span class="code-object">String</span> countryName;
 <span class="code-keyword">private</span> <span class="code-object">double</span> rateAgstUSD;

 <span class="code-keyword">public</span> CurrencyJSFBean()<span class="code-keyword">throws</span> Exception{
  Context ctx  = <span class="code-keyword">new</span> InitialContext();
  <span class="code-object">System</span>.out.println(<span class="code-quote">"Instantiating bean..."</span>);
  <span class="code-object">Object</span> obj = ctx.lookup(<span class="code-quote">"java:comp/env/ejb/CurrencyInterface"</span>);
  <span class="code-object">System</span>.out.println((obj <span class="code-keyword">instanceof</span> LinkRef));
  ci = (CurrencyInterface)obj;
  <span class="code-object">System</span>.out.println(<span class="code-quote">"Got the  bean..."</span>);
 }


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

 <span class="code-keyword">public</span> void setCurrencyName(<span class="code-object">String</span> currencyName) {
  <span class="code-object">System</span>.out.println(<span class="code-quote">"Set currencyName="</span>+currencyName);
  <span class="code-keyword">this</span>.currencyName = currencyName;
 }

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

 <span class="code-keyword">public</span> void setCountryName(<span class="code-object">String</span> countryName) {
  <span class="code-object">System</span>.out.println(<span class="code-quote">"Set countryName="</span>+countryName);
  <span class="code-keyword">this</span>.countryName = countryName;
 }

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

 <span class="code-keyword">public</span> void setRateAgstUSD(<span class="code-object">double</span> rateAgstUSD) {
  <span class="code-object">System</span>.out.println(<span class="code-quote">"Set rateAgstUSD="</span>+rateAgstUSD);
  <span class="code-keyword">this</span>.rateAgstUSD = rateAgstUSD;
 }

 <span class="code-keyword">public</span> void selectCurrency(ActionEvent event){

  UIParameter component = (UIParameter) 
              event.getComponent().findComponent(<span class="code-quote">"editCurrency"</span>);
  <span class="code-object">String</span> curencyName = (<span class="code-object">String</span>) component.getValue();

  Currency c = ci.retrieveCurrency(curencyName);

  <span class="code-keyword">this</span>.setCountryName(c.getCountryName());
  <span class="code-keyword">this</span>.setCurrencyName(c.getCurrencyName());
  <span class="code-keyword">this</span>.setRateAgstUSD(c.getRateAgstUSD());
 }

 <span class="code-keyword">public</span> void saveCurrency(ActionEvent event){
  ci.updateCurrency(<span class="code-keyword">this</span>.getCurrencyName(), <span class="code-keyword">this</span>.getRateAgstUSD());

 }

 <span class="code-keyword">public</span> void initCurrency(ActionEvent event){
  <span class="code-keyword">this</span>.setCountryName("");
  <span class="code-keyword">this</span>.setCurrencyName("");
  <span class="code-keyword">this</span>.setRateAgstUSD(0.0);
 }

 <span class="code-keyword">public</span> void insertCurrency(ActionEvent event){
  ci.createCurrency(<span class="code-keyword">this</span>.currencyName, countryName, rateAgstUSD);
 }

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

<p>10. Open the <tt>WEB-INF/faces-config.xml</tt> and copy the below contents to it.</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>The <tt>faces-config.xml</tt> can also be configured using JSF wizards. In this case, we have copied the already prepared JSF configuration in to the <tt>faces-config.xml</tt> file. </p></td></tr></table>

<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>faces-config.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;faces-config
 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="http://java.sun.com/xml/ns/javaee  
 http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
 version=<span class="code-quote">"1.2"</span>&gt;

 <span class="code-tag">&lt;navigation-rule&gt;</span>
  <span class="code-tag">&lt;description&gt;</span>List Currencies<span class="code-tag">&lt;/description&gt;</span>
  <span class="code-tag">&lt;from-view-id&gt;</span>/listCurrencies.jsp<span class="code-tag">&lt;/from-view-id&gt;</span>
  <span class="code-tag">&lt;navigation-case&gt;</span>
   <span class="code-tag">&lt;from-outcome&gt;</span>editCurrency<span class="code-tag">&lt;/from-outcome&gt;</span>
   <span class="code-tag">&lt;to-view-id&gt;</span>/editCurrency.jsp<span class="code-tag">&lt;/to-view-id&gt;</span>
  <span class="code-tag">&lt;/navigation-case&gt;</span>
 <span class="code-tag">&lt;/navigation-rule&gt;</span>

 <span class="code-tag">&lt;navigation-rule&gt;</span>
  <span class="code-tag">&lt;description&gt;</span>Edit Currency<span class="code-tag">&lt;/description&gt;</span>
  <span class="code-tag">&lt;from-view-id&gt;</span>/editCurrency.jsp<span class="code-tag">&lt;/from-view-id&gt;</span>
  <span class="code-tag">&lt;navigation-case&gt;</span>
   <span class="code-tag">&lt;from-outcome&gt;</span>listCurrencies<span class="code-tag">&lt;/from-outcome&gt;</span>
   <span class="code-tag">&lt;to-view-id&gt;</span>/listCurrencies.jsp<span class="code-tag">&lt;/to-view-id&gt;</span>
  <span class="code-tag">&lt;/navigation-case&gt;</span>
 <span class="code-tag">&lt;/navigation-rule&gt;</span>

 <span class="code-tag">&lt;navigation-rule&gt;</span>
  <span class="code-tag">&lt;description&gt;</span>List Currencies<span class="code-tag">&lt;/description&gt;</span>
  <span class="code-tag">&lt;from-view-id&gt;</span>/listCurrencies.jsp<span class="code-tag">&lt;/from-view-id&gt;</span>
  <span class="code-tag">&lt;navigation-case&gt;</span>
   <span class="code-tag">&lt;from-outcome&gt;</span>insertCurrency<span class="code-tag">&lt;/from-outcome&gt;</span>
   <span class="code-tag">&lt;to-view-id&gt;</span>/insertCurrency.jsp<span class="code-tag">&lt;/to-view-id&gt;</span>
  <span class="code-tag">&lt;/navigation-case&gt;</span>
 <span class="code-tag">&lt;/navigation-rule&gt;</span>

 <span class="code-tag">&lt;navigation-rule&gt;</span>
  <span class="code-tag">&lt;description&gt;</span>Insert Currencies<span class="code-tag">&lt;/description&gt;</span>
  <span class="code-tag">&lt;from-view-id&gt;</span>/insertCurrency.jsp<span class="code-tag">&lt;/from-view-id&gt;</span>
  <span class="code-tag">&lt;navigation-case&gt;</span>
   <span class="code-tag">&lt;from-outcome&gt;</span>listCurrencies<span class="code-tag">&lt;/from-outcome&gt;</span>
   <span class="code-tag">&lt;to-view-id&gt;</span>/listCurrencies.jsp<span class="code-tag">&lt;/to-view-id&gt;</span>
  <span class="code-tag">&lt;/navigation-case&gt;</span>
 <span class="code-tag">&lt;/navigation-rule&gt;</span>

 <span class="code-tag">&lt;navigation-rule&gt;</span>
  <span class="code-tag">&lt;description&gt;</span>List Currencies<span class="code-tag">&lt;/description&gt;</span>
  <span class="code-tag">&lt;from-view-id&gt;</span>/listCurrencies.jsp<span class="code-tag">&lt;/from-view-id&gt;</span>
  <span class="code-tag">&lt;navigation-case&gt;</span>
   <span class="code-tag">&lt;from-outcome&gt;</span>deleteCurrency<span class="code-tag">&lt;/from-outcome&gt;</span>
  <span class="code-tag">&lt;to-view-id&gt;</span>/listCurrencies.jsp<span class="code-tag">&lt;/to-view-id&gt;</span>
  <span class="code-tag">&lt;/navigation-case&gt;</span>
 <span class="code-tag">&lt;/navigation-rule&gt;</span>


 <span class="code-tag">&lt;managed-bean&gt;</span>
  <span class="code-tag">&lt;description&gt;</span>
   Currency List Bean
  <span class="code-tag">&lt;/description&gt;</span>
  <span class="code-tag">&lt;managed-bean-name&gt;</span>
   CurrencyListJSFBean
  <span class="code-tag">&lt;/managed-bean-name&gt;</span>
  <span class="code-tag">&lt;managed-bean-class&gt;</span>
   sample.jsf.CurrencyListJSFBean
  <span class="code-tag">&lt;/managed-bean-class&gt;</span>
  <span class="code-tag">&lt;managed-bean-scope&gt;</span>request<span class="code-tag">&lt;/managed-bean-scope&gt;</span> 
 <span class="code-tag">&lt;/managed-bean&gt;</span>

 <span class="code-tag">&lt;managed-bean&gt;</span>
  <span class="code-tag">&lt;description&gt;</span>
   Currency Bean
  <span class="code-tag">&lt;/description&gt;</span>
  <span class="code-tag">&lt;managed-bean-name&gt;</span>CurrencyJSFBean<span class="code-tag">&lt;/managed-bean-name&gt;</span>
  <span class="code-tag">&lt;managed-bean-class&gt;</span>
   sample.jsf.CurrencyJSFBean
  <span class="code-tag">&lt;/managed-bean-class&gt;</span>
  <span class="code-tag">&lt;managed-bean-scope&gt;</span>request<span class="code-tag">&lt;/managed-bean-scope&gt;</span> 
 <span class="code-tag">&lt;/managed-bean&gt;</span>

<span class="code-tag">&lt;/faces-config&gt;</span></pre>
</div></div>

<p>11. The <tt>web.xml</tt> and the <tt>geronimo-web.xml</tt> files are as follows. In the <tt>web.xml</tt> the ejb reference <tt>ejb/CurrencyInterface</tt> is mapped to the <tt>CurrencyBean</tt>.</p>

<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>web.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;web-app <span class="code-keyword">xmlns:xsi</span>=<span class="code-quote">"http://www.w3.org/2001/XMLSchema-instance"</span> 
 xmlns=<span class="code-quote">"http://java.sun.com/xml/ns/javaee"</span> 
 <span class="code-keyword">xmlns:web</span>=<span class="code-quote">"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</span>
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
 id=<span class="code-quote">"WebApp_ID"</span> version=<span class="code-quote">"2.5"</span>&gt;

 <span class="code-tag">&lt;display-name&gt;</span>CurrencyWEB<span class="code-tag">&lt;/display-name&gt;</span>
 <span class="code-tag">&lt;welcome-file-list&gt;</span>
  <span class="code-tag">&lt;welcome-file&gt;</span>index.html<span class="code-tag">&lt;/welcome-file&gt;</span>
  <span class="code-tag">&lt;welcome-file&gt;</span>index.htm<span class="code-tag">&lt;/welcome-file&gt;</span>
  <span class="code-tag">&lt;welcome-file&gt;</span>index.jsp<span class="code-tag">&lt;/welcome-file&gt;</span>
  <span class="code-tag">&lt;welcome-file&gt;</span>default.html<span class="code-tag">&lt;/welcome-file&gt;</span>
  <span class="code-tag">&lt;welcome-file&gt;</span>default.htm<span class="code-tag">&lt;/welcome-file&gt;</span>
  <span class="code-tag">&lt;welcome-file&gt;</span>default.jsp<span class="code-tag">&lt;/welcome-file&gt;</span>
 <span class="code-tag">&lt;/welcome-file-list&gt;</span>

 <span class="code-tag">&lt;servlet&gt;</span>
  <span class="code-tag">&lt;servlet-name&gt;</span>Faces Servlet<span class="code-tag">&lt;/servlet-name&gt;</span>
  <span class="code-tag">&lt;servlet-class&gt;</span>
   javax.faces.webapp.FacesServlet
  <span class="code-tag">&lt;/servlet-class&gt;</span>
  <span class="code-tag">&lt;load-on-startup&gt;</span>1<span class="code-tag">&lt;/load-on-startup&gt;</span>
 <span class="code-tag">&lt;/servlet&gt;</span>

 <span class="code-tag">&lt;ejb-local-ref&gt;</span>
  <span class="code-tag">&lt;ejb-ref-name&gt;</span>ejb/CurrencyInterface<span class="code-tag">&lt;/ejb-ref-name&gt;</span>
  <span class="code-tag">&lt;ejb-ref-type&gt;</span>Session<span class="code-tag">&lt;/ejb-ref-type&gt;</span>
  <span class="code-tag">&lt;local&gt;</span>
   sample.jpa.currency.CurrencyInterface
  <span class="code-tag">&lt;/local&gt;</span>
  <span class="code-tag">&lt;ejb-link&gt;</span>CurrencyBean<span class="code-tag">&lt;/ejb-link&gt;</span>
 <span class="code-tag">&lt;/ejb-local-ref&gt;</span>

 <span class="code-tag">&lt;servlet-mapping&gt;</span>
  <span class="code-tag">&lt;servlet-name&gt;</span>Faces Servlet<span class="code-tag">&lt;/servlet-name&gt;</span>
  <span class="code-tag">&lt;url-pattern&gt;</span>*.jsf<span class="code-tag">&lt;/url-pattern&gt;</span>
 <span class="code-tag">&lt;/servlet-mapping&gt;</span>
<span class="code-tag">&lt;/web-app&gt;</span></pre>
</div></div>

<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>geronimo-web.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;web-app xmlns=<span class="code-quote">"http://geronimo.apache.org/xml/ns/j2ee/web-2.0.1"</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>Currency<span class="code-tag">&lt;/sys:groupId&gt;</span>
   <span class="code-tag">&lt;sys:artifactId&gt;</span>JPA-WEB<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;/sys:environment&gt;</span>

 <span class="code-tag">&lt;context-root&gt;</span>/CurrencyWEB<span class="code-tag">&lt;/context-root&gt;</span>
<span class="code-tag">&lt;/web-app&gt;</span></pre>
</div></div>


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

<p>12. Finally export the <em>CurrencyEAR</em> file. </p>

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

<p>1. Start the geronimo server and open a command window. 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\CurrencyEAR.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/CurrencyEAR/1.0/car
      `-&gt; CurrencyWEB.war @ /CurrencyWEB
      `-&gt; CurrencyEJB.jar </pre>
</div></div></font></p>

<h2><a name="WorkingwithJSFandJPA-Settingupthedatabasetables"></a>Setting up the database tables</h2>

<p>1. Open a browser window and hit the URL <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> to open admin console. Click on <em>Console Navigation =&gt; DB Manager</em>. This will open up <em>DB Viewer</em> and <em>Run SQL</em> portlets on the right side. Enter <em>CurrencyDB</em> in the <em>Create DB</em> textbox and click on the <em>Create</em> button. This will create a database by name <em>CurrencyDB</em>.</p>

<p><span class="error">Unable to render embedded object: File (21.jpg) not found.</span></p>

<p>2. On the <em>Run SQL</em> portlet, enter the below SQL command in the <em>SQL Command/s</em> textarea to create <tt>CURRENCYRATETABLE</tt> table. Select <em>CurrencyDB</em> in the <em>Use DB</em> combo box and click on the <em>Run SQL</em> button. Please see the screen shot below.  </p>

<div class="code" style="border-style: solid; "><div class="codeContent">
<pre class="code-sql">create table CURRENCYRATETABLE (CURRENCYNAME varchar(50), COUNTRYNAME varchar(100), RATEAGSTUSD decimal (15,2));</pre>
</div></div>

<p><span class="error">Unable to render embedded object: File (22.jpg) not found.</span></p>

<p>Enter some sample rows in the table to list the currencies later while running the application.</p>

<h2><a name="WorkingwithJSFandJPA-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/CurrencyWEB/" title="Visit page outside Confluence" rel="nofollow">http://localhost:8080/CurrencyWEB/<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></p>

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

<p>This page displays the list of currencies currently in the database. For each currency, the page displays <em>Currency Name</em>, <em>Country Name</em> and <em>Rate Against USD</em> values. It also provides link to <em>Edit</em> and <em>Delete</em> a particular currency. </p>

<p>2. Click on the <em>Add a Currency</em> link at the bottom of the table. It will open up the following screen. Enter the values and click on the <em>Save</em> button. This will take back to the list of currencies with the new entry in the list.</p>

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

<p>Similarly, the <em>Edit</em> and <em>Delete</em> operations can also be performed.</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