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: Stateful Session Bean (page edited)
Date Mon, 26 May 2008 12:00: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/Stateful+Session+Bean">Stateful Session Bean</a>
        </span>
    </div>

     <p>
        <a href="http://cwiki.apache.org/confluence/display/GMOxDOC21/Stateful+Session+Bean">Stateful Session Bean</a>
        has been edited by             <a href="http://cwiki.apache.org/confluence/display/~ashjain2@gmail.com">Ashish Jain</a>
            <span class="smallfont">(May 26, 2008)</span>.
     </p>
    
     <p>
                 <a href="http://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=86032&originalVersion=17&revisedVersion=18">(View changes)</a>
     </p>

    <span class="label">Content:</span><br/>
    <div class="greybox wiki-content"><style type='text/css'>/*<![CDATA[*/
table.ScrollbarTable  {border: none;padding: 3px;width: 100%;padding: 3px;margin: 0px;background-color: #f0f0f0}
table.ScrollbarTable td.ScrollbarPrevIcon {text-align: center;width: 16px;border: none;}
table.ScrollbarTable td.ScrollbarPrevName {text-align: left;border: none;}
table.ScrollbarTable td.ScrollbarParent {text-align: center;border: none;}
table.ScrollbarTable td.ScrollbarNextName {text-align: right;border: none;}
table.ScrollbarTable td.ScrollbarNextIcon {text-align: center;width: 16px;border: none;}

/*]]>*/</style><div class="Scrollbar"><table class='ScrollbarTable'><tr><td class='ScrollbarPrevIcon'><a href="/confluence/display/GMOxDOC21/5-minute+Tutorial+on+Enterprise+Application+Development+with+Eclipse+and+Geronimo"><img border='0' align='middle' src='/confluence/images/icons/back_16.gif' width='16' height='16'></a></td><td width='33%' class='ScrollbarPrevName'><a href="/confluence/display/GMOxDOC21/5-minute+Tutorial+on+Enterprise+Application+Development+with+Eclipse+and+Geronimo">5-minute Tutorial on Enterprise Application Development with Eclipse and Geronimo</a>&nbsp;</td><td width='33%' class='ScrollbarParent'><sup><a href="/confluence/display/GMOxDOC21/EJB+applications"><img border='0' align='middle' src='/confluence/images/icons/up_16.gif' width='8' height='8'></a></sup><a href="/confluence/display/GMOxDOC21/EJB+applications">EJB applications</a></td><td width='33%' class='ScrollbarNextName'>&nbsp;<a href="/confluence/display/GMOxDOC21/Stateless+Session+Bean">Stateless Session Bean</a></td><td class='ScrollbarNextIcon'><a href="/confluence/display/GMOxDOC21/Stateless+Session+Bean"><img border='0' align='middle' src='/confluence/images/icons/forwd_16.gif' width='16' height='16'></a></td></tr></table></div>

<p>This application will take you through the basics of Stateful Session Bean. This application will demonstrate how annotations like @Stateful, @Resource, @PostConstruct, @PreDestroy, @PrePassivate, @PostActivate, @Remove are used in an EJB3 application.</p>

<p>Basically a Stateful Session EJB is used whenever there is a requirement to maintain a session. The example is a user registration process wherein the registration process is a two step process. First page prompts to enter your personal credentials and second page prompts to enter your billing and credit card information. The session is maintained till the user has filled up both the jsp pages. Later the complete information is populated on to a database. The application has a Controller servlet which routes the call received from the jsp client to the Bean class, setter methods and jsp pages.</p>

<p>To run this tutorial, as a minimum you will be required to have installed the following prerequisite software.</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>Details on installing eclipse are provided in the <a href="/confluence/display/GMOxDOC21/Development+environment" title="Development environment">Development environment</a> section. <br/>
This tutorial is organized in the following sections:</p>
<div>
<ul>
  <li><a href='#StatefulSessionBean-CreatingaEJBProject'>Creating a EJB Project</a></li>
  <li><a href='#StatefulSessionBean-CreatingadatabaseusingAdministrativeConsole'>Creating a database using Administrative Console</a></li>
  <li><a href='#StatefulSessionBean-CreatingadatasourceusingAdministrativeConsole'>Creating a datasource using Administrative Console</a></li>
  <li><a href='#StatefulSessionBean-Creatingawebbasedapplicationclient'>Creating a web based application client</a></li>
  <li><a href='#StatefulSessionBean-AddingaEnterpriseApplicationProject.'>Adding a Enterprise Application Project.</a></li>
</ul></div>
<h1><a name="StatefulSessionBean-CreatingaEJBProject"></a>Creating a EJB Project</h1>
<ol>
	<li>Right click Under Project Explorer and Select New-&gt;EJB Project.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/ejb1.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Name the project as StatefulBean. Select Next.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/ejb2.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Mark the fields as suggested in the screenshot and Select Next.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/ejb3.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Uncheck <b>Generate Deployment Descriptor</b>. This is beacuse we are using annotations is our applications and so deployment descriptors are redundant entity. Select Next.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/ejb4.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>On next screen select all default values and Select finish.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/ejb5.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" />
This creates a skeleton for the EJB project. Next steps are adding the bean class, bean interface and setter/getter methods.</li>
	<li>Right click on ejbModule in StatefulBean project and select New-&gt;class.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/ejb6.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Name the class as PersonalInfo and package as ejb.stateful. Select Finish.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/ejb7.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Add the following code to PersonalInfo.java.<br/>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>PersonalInfo.java</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> ejb.stateful;

<span class="code-keyword">public</span> class PersonalInfo <span class="code-keyword">implements</span> java.io.Serializable {
<span class="code-keyword">private</span> <span class="code-keyword">static</span> <span class="code-keyword">final</span> <span class="code-object">long</span> serialVersionUID = 1L;

<span class="code-keyword">private</span> <span class="code-object">String</span> FirstName;
<span class="code-keyword">private</span> <span class="code-object">String</span> LastName;
<span class="code-keyword">private</span> <span class="code-object">String</span> UserName;
<span class="code-keyword">private</span> <span class="code-object">String</span> Password;
<span class="code-keyword">private</span> <span class="code-object">String</span> Nationality;

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

<span class="code-keyword">public</span> void setLastName(<span class="code-object">String</span> LastName)
{
	<span class="code-keyword">this</span>.LastName=LastName;
}
<span class="code-keyword">public</span> void setUserName(<span class="code-object">String</span> UserName)
{
	<span class="code-keyword">this</span>.UserName=UserName;
}
<span class="code-keyword">public</span> void setPassword(<span class="code-object">String</span> Password)
{
	<span class="code-keyword">this</span>.Password=Password;
}
<span class="code-keyword">public</span> void setNationality(<span class="code-object">String</span> Nationality)
{
	<span class="code-keyword">this</span>.Nationality=Nationality;
}
<span class="code-keyword">public</span> <span class="code-object">String</span> getFirstName()
{
	<span class="code-keyword">return</span> FirstName;
}

<span class="code-keyword">public</span> <span class="code-object">String</span> getLastName()
{
	<span class="code-keyword">return</span> LastName;
}
<span class="code-keyword">public</span> <span class="code-object">String</span> getUserName()
{
	<span class="code-keyword">return</span> UserName;
}
<span class="code-keyword">public</span> <span class="code-object">String</span> getPassword()
{
	<span class="code-keyword">return</span> Password;
}
<span class="code-keyword">public</span> <span class="code-object">String</span> getNationality()
{
	<span class="code-keyword">return</span> Nationality;
}

}</pre>
</div></div><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Similarly create a class BillingInfo.java and add the following code.<br clear="all" /> <br clear="all" /> <br clear="all" />
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>BillingInfo.java</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> ejb.stateful;

<span class="code-keyword">public</span> class BillingInfo <span class="code-keyword">implements</span> java.io.Serializable
{
	
	<span class="code-keyword">private</span> <span class="code-keyword">static</span> <span class="code-keyword">final</span> <span class="code-object">long</span> serialVersionUID = 1L;
	<span class="code-keyword">private</span> <span class="code-object">String</span> houseNo;
	<span class="code-keyword">private</span> <span class="code-object">String</span> street;
	<span class="code-keyword">private</span> <span class="code-object">String</span> city;
	<span class="code-keyword">private</span> <span class="code-object">String</span> pincode;
	<span class="code-keyword">private</span> <span class="code-object">String</span> country;
	<span class="code-keyword">private</span> <span class="code-object">String</span> bank;
	<span class="code-keyword">private</span> <span class="code-object">String</span> cardno;
	
	<span class="code-keyword">public</span> void setBank(<span class="code-object">String</span> bank)
	{
		<span class="code-keyword">this</span>.bank=bank;
	}

	<span class="code-keyword">public</span> void setCardno(<span class="code-object">String</span> cardno)
	{
		<span class="code-keyword">this</span>.cardno=cardno;
	}
	<span class="code-keyword">public</span> void setHouseNo(<span class="code-object">String</span> houseNo)
	{
		<span class="code-keyword">this</span>.houseNo=houseNo;
	}

	<span class="code-keyword">public</span> void setStreet(<span class="code-object">String</span> street)
	{
		<span class="code-keyword">this</span>.street=street;
	}
	<span class="code-keyword">public</span> void setCity(<span class="code-object">String</span> city)
	{
		<span class="code-keyword">this</span>.city=city;
	}
	<span class="code-keyword">public</span> void setPincode(<span class="code-object">String</span> pincode)
	{
		<span class="code-keyword">this</span>.pincode=pincode;
	}
	<span class="code-keyword">public</span> void setCountry(<span class="code-object">String</span> country)
	{
		<span class="code-keyword">this</span>.country=country;
	}
	<span class="code-keyword">public</span> <span class="code-object">String</span> getBank()
	{
		<span class="code-keyword">return</span> bank;
	}

	<span class="code-keyword">public</span> <span class="code-object">String</span> getCardno()
	{
		<span class="code-keyword">return</span> cardno;
	}
	<span class="code-keyword">public</span> <span class="code-object">String</span> getHouseNo()
	{
		<span class="code-keyword">return</span> houseNo;
	}

	<span class="code-keyword">public</span> <span class="code-object">String</span> getStreet()
	{
		<span class="code-keyword">return</span> street;
	}
	<span class="code-keyword">public</span> <span class="code-object">String</span> getCity()
	{
		<span class="code-keyword">return</span> city;
	}
	<span class="code-keyword">public</span> <span class="code-object">String</span> getPincode()
	{
		<span class="code-keyword">return</span> pincode;
	}
	<span class="code-keyword">public</span> <span class="code-object">String</span> getCountry()
	{
		<span class="code-keyword">return</span> country;
	}

}</pre>
</div></div>
<p>PersonalInfo.java and BillingInfo.java are classes for setting and getting the user information.</p></li>
	<li>Now we will add the Business interface or bean interface. Right click on the package ejb.stateful and Select New-&gt;Interface.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/ejb8.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Name the interface as <b>AccountCreator</b> and Select Finish.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/ejb9.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Add the following code to AccountCreator interface.<br clear="all" /> <br clear="all" /> <br clear="all" />
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>AccountCreator.java</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> ejb.stateful;
<span class="code-keyword">import</span> javax.ejb.Remote;
@Remote
<span class="code-keyword">public</span> <span class="code-keyword">interface</span> AccountCreator {
void addPersonalInfo(PersonalInfo personalinfo);
void addBillingInfo(BillingInfo billinginfo);
void createAccount();
}</pre>
</div></div>
<p><table cellpadding='5' width='85%' cellspacing='8px' class='infoMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b class="strong">Information</b><br />
<p>Once you enter this code you might see errors like @EJB can be resolved. Currently there are some limitations with the geronimo eclipse plugin which will resolved soon. We will soon suggest you how to get rid of those errors.</p></td></tr></table><br clear="all" /> <br clear="all" /> <br clear="all" /></p></li>
	<li>Next step is to add the implementation to the interface. Right click on ejb.stateful interface and select New-&gt;class.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/ejb10.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Name the bean class as <b>AccountCreatorBean</b> and Select <b>Finish</b>.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/ejb11.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Add the following code to <b>AccountCreatorBean</b>.<br clear="all" /> <br clear="all" /> <br clear="all" />
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>AccountCreatorBean.java</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> ejb.stateful;

<span class="code-keyword">import</span> java.sql.Connection;

<span class="code-keyword">import</span> javax.annotation.PostConstruct;
<span class="code-keyword">import</span> javax.annotation.PreDestroy;
<span class="code-keyword">import</span> javax.annotation.Resource;
<span class="code-keyword">import</span> javax.ejb.PostActivate;
<span class="code-keyword">import</span> javax.ejb.PrePassivate;
<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.sql.DataSource;


@Stateful
<span class="code-keyword">public</span> class AccountCreatorBean <span class="code-keyword">implements</span> AccountCreator{
@Resource(name=<span class="code-quote">"jdbc/userds"</span>)
DataSource datasource;
Connection connection;
PersonalInfo personalinfo=<span class="code-keyword">new</span> PersonalInfo();
BillingInfo billinginfo=<span class="code-keyword">new</span> BillingInfo();
	
	<span class="code-keyword">public</span> AccountCreatorBean() {
	<span class="code-keyword">super</span>();
}	


@PostConstruct
@PostActivate
<span class="code-keyword">public</span> void openConnection()
{
	<span class="code-keyword">try</span>{
	connection=datasource.getConnection();
	}
	<span class="code-keyword">catch</span>(Exception e)
	{
		e.printStackTrace();
	}
}

@PreDestroy
@PrePassivate
<span class="code-keyword">public</span> void closeConnection()
{
	connection=<span class="code-keyword">null</span>;
}

<span class="code-keyword">public</span> void addPersonalInfo(PersonalInfo personalinfo)
{
	<span class="code-keyword">this</span>.personalinfo=personalinfo;
}

<span class="code-keyword">public</span> void addBillingInfo(BillingInfo billinginfo)
{
	<span class="code-keyword">this</span>.billinginfo=billinginfo;
}

@Remove
<span class="code-keyword">public</span> void createAccount()
{
	<span class="code-object">System</span>.out.println(<span class="code-quote">"Your request has been successfully processed"</span>);
}

}</pre>
</div></div>
<p>Once you have added the code you will see lot of errors but this can be resolved easily and is shown in next step.</p></li>
	<li>The errors in the code is due to missing classes from our server runtime. This can be resolved as follows.<br/>
Right click on StatefulBean project and select Properties.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/ejb12.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>On the next screen select Java Build Path-&gt;Libraries-&gt;Add External Jars.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/ejb13.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Browse to <b>&lt;GERONIMO_HOME&gt;/repository/org/apache/geronimo/specs/geronimo-ejb_3.0_spec/1.0.1</b> and select <b>geronimo-ejb_3.0_spec-1.0.1.jar</b>. Select Open.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/ejb14.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Similarly browse to <b>&lt;GERONIMO_HOME&gt;/repository/org/apache/geronimo/specs/geronimo-annotation_1.0_spec/1.1.1</b> and add <b>geronimo-annotation_1.0_spec-1.1.1.jar</b>.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/ejb15.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Once done you can see both the jars enlisted. Select Ok.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/ejb16.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Let us walkthrough the EJB bean class code
	<ul>
		<li>@Stateful public class AccountCreatorBean implements AccountCreator- @ Stateful annotation declares the Bean class as Stateful class.</li>
		<li>@Resource(name="jdbc/userds") DataSource datasource;- This is a resource injection into the bean class wherin a datasource is injected using the @Resource annotation. We will shortly see how to create a datasource in geronimo.</li>
		<li>public AccountCreatorBean(} -This is a constructor for the bean class and it will be used to create a bean instance whenever a request is received from new client connection.</li>
		<li>@PostConstruct @PostActivate public void openConnection()- @PostConstruct and @PostActivate are annotations which are basically called lifecycle callback annotation. The lifecycle for these annotation is as follows
		<ul>
			<li>New bean instance is created using the default constructor.</li>
			<li>Resources are injected</li>
			<li>Now the PostConstruct method is called which in our case is to open a database connection.</li>
			<li>PostActivate is called on the bean instances which have been passivated and required to be reactivated. It goes on the same cycle as being followed by PostConstruct.</li>
		</ul>
		</li>
		<li>@PreDestroy @PrePassivate public void closeConnection()- Again @PreDestroy and @PrePassivate are Lifecycle callback annotation. The lifecycle of these annotation is as follows
		<ul>
			<li>Bean instances in the pool are used and business methods are invoked.</li>
			<li>Once the client is idle for a period of time container passivates the bean instance. The closeConnection function is called just before container passivates the bean.</li>
			<li>If the client does not invoke a passivated bean for a period of time it is destroyed.</li>
		</ul>
		</li>
		<li>public void addPersonalInfo(PersonalInfo personalinfo) and public void addBillingInfo(BillingInfo billinginfo)- These two functions are invoked to store client data across various calls.</li>
		<li>@Remove public void createAccount()- There are two ways in which a bean is destroyed and hence this where a client session ends in stateful bean. One is when a bean has been passivated and is not reinvoked by client hence the bean instance is destroyed. Another way is to use @Remove annotation. Once the client confirms and submits all the required information the data is populated into the database and that is where the session ends.</li>
	</ul>
	</li>
</ol>


<h1><a name="StatefulSessionBean-CreatingadatabaseusingAdministrativeConsole"></a>Creating a database using Administrative Console</h1>
<ol>
	<li>Start the server and Launch the Administrative Console using 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>.</li>
	<li>Enter default username and password.</li>
	<li>In the welcome page, Under Embedded DB, Select DB Manager.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/createDB1.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>On the next page create a database <b>userdbs</b> and Select create.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/createDB2.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Once done you can see the userdbs database listed in DB Viewer portlet under Databases. This confirms that the database has been successfully created.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/createDB3.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>As shown in the figure under <b>Use DB</b>, select userdbs from the dropdown box.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/createDB4.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Run the <b>userinfo.sql</b> script. Select <b>Run Sql</b>.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/createDB5.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" />
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>userinfo.sql</b></div><div class="codeContent">
<pre class="code-java">create table userinfo(firstname varchar(20),lastname varchar(20),
username varchar(20), password varchar(20), pincode varchar(20),
cardno varchar(20))</pre>
</div></div><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>To verify the table creation succeeded. Select <b>Application</b> as shown in the figure.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/createDB6.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Next screen suggests the table has been successfully created. To view the contents of the table select <b>VIEW CONTENTS</b>.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/createDB7.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>The table is currently empty as shown in the figure.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/createDB8.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
</ol>


<h1><a name="StatefulSessionBean-CreatingadatasourceusingAdministrativeConsole"></a>Creating a datasource using Administrative Console</h1>
<ol>
	<li>Start the server and Launch the Administrative Console using 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>.</li>
	<li>Enter default username and password.</li>
	<li>Once in the welcome page. In console navigation, Under Services, Select Database Pools.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/createDS.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>On the next screen, Create a new database pool using Geronimo database pool wizard.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/createDS2.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>On the next screen give the name as suggested in the figure. This will initiate the process to create a Derby Embedded XA datasource.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/createDS3.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Select the Driver jar and give the database name as userdbs(Remember this is the database we created in the previous step). Rest all fields can be set to default.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/createDS4.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Select <b>Deploy</b> to deploy the connector plan.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/createDS5.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Once done you can see the Database Pool <b>jdbc/userds</b> listed in the available database pools.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/createDS6.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
</ol>


<h1><a name="StatefulSessionBean-Creatingawebbasedapplicationclient"></a>Creating a web based application client</h1>
<ol>
	<li>Right click under Project Explorer and Select <b>New-&gt;Dynamic Web Project.</b><br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/web1.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Name the project as <b>StatefulClient</b> and Select Next.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/web2.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Keep the default settings as shown in the figure. Select Next.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/web3.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>On the next screen keep default values. Select Next.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/web4.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Default values on this screen too. Select Finish.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/web5.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Right click on the <b>StatefulClient</b> project and Select New-&gt;Servlet.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/web6.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Name the package as <b>ejb.stateful</b> and Servlet as <b>Controller</b>.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/web7.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Keep the default values and Select Next.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/web8.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Keep the default values and Select Finish.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/web9.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Once the servlet is created it shows error. This is due to servlet api missing from the runtime. This can be easily resolved. Right click on <b>StatefulClient</b> project and Select properties.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/web10.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>On the next screen select <b>Java build path</b> and select <b>Libraries</b>.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/web11.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Select <b>Add External jars</b>.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/web12.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Browse to your &lt;GERONIMO_HOME&gt;\repository\org\apache\geronimo\specs\geronimo-servlet_2.5_spec\1.1.2 and select  geronimo-servlet_2.5_spec-1.1.2.jar and Select Open.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/web13.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Select Ok on the next screen this will remove all the errors.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/web14.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Add the following code to <b>Controller.java</b> servlet.<br/>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>Controller.java</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> ejb.stateful;

<span class="code-keyword">import</span> java.io.IOException;
<span class="code-keyword">import</span> javax.ejb.EJB;
<span class="code-keyword">import</span> javax.servlet.RequestDispatcher;
<span class="code-keyword">import</span> javax.servlet.ServletException;
<span class="code-keyword">import</span> javax.servlet.http.HttpServletRequest;
<span class="code-keyword">import</span> javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class <span class="code-keyword">for</span> Servlet: Controller
 *
 */
 <span class="code-keyword">public</span> class Controller <span class="code-keyword">extends</span> javax.servlet.http.HttpServlet <span class="code-keyword">implements</span> javax.servlet.Servlet {
   <span class="code-keyword">static</span> <span class="code-keyword">final</span> <span class="code-object">long</span> serialVersionUID = 1L;
   @EJB
   AccountCreator ac;
    /* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#HttpServlet()
	 */
	<span class="code-keyword">public</span> Controller() {
		<span class="code-keyword">super</span>();
	}   	
	
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	<span class="code-keyword">protected</span> void doProcess(HttpServletRequest request, HttpServletResponse response) <span class="code-keyword">throws</span> ServletException, IOException {
	
	<span class="code-keyword">if</span> ( (request.getRequestURI()).equals(<span class="code-quote">"/StatefulClient/Controller"</span>))
	{
		PersonalInfo personalinfo=<span class="code-keyword">new</span> PersonalInfo();
		personalinfo.setFirstName(request.getParameter(<span class="code-quote">"FirstName"</span>));
		personalinfo.setLastName(request.getParameter(<span class="code-quote">"LastName"</span>));
		personalinfo.setNationality(request.getParameter(<span class="code-quote">"Nationality"</span>));
		personalinfo.setUserName(request.getParameter(<span class="code-quote">"UserName"</span>));
		personalinfo.setPassword(request.getParameter(<span class="code-quote">"Password"</span>));
		ac.addPersonalInfo(personalinfo);
		RequestDispatcher rd=request.getRequestDispatcher(<span class="code-quote">"BillingInfo.jsp"</span>);
		rd.forward(request, response);
		
	}
	<span class="code-keyword">else</span>
	{
		BillingInfo billingInfo=<span class="code-keyword">new</span> BillingInfo();
		billingInfo.setBank(request.getParameter(<span class="code-quote">"Bank"</span>));
		billingInfo.setCardno(request.getParameter(<span class="code-quote">"CardNo"</span>));
		billingInfo.setCity(request.getParameter(<span class="code-quote">"City"</span>));
		billingInfo.setCountry(request.getParameter(<span class="code-quote">"Country"</span>));
		billingInfo.setHouseNo(request.getParameter(<span class="code-quote">"HouseNo"</span>));
		billingInfo.setPincode(request.getParameter(<span class="code-quote">"PinCode"</span>));
		billingInfo.setStreet(request.getParameter(<span class="code-quote">"Street"</span>));
		ac.addBillingInfo(billingInfo);
		ac.createAccount();
	}
		
	}
	<span class="code-keyword">protected</span> void doGet(HttpServletRequest request, HttpServletResponse response) <span class="code-keyword">throws</span> ServletException, IOException {
		<span class="code-comment">// TODO Auto-generated method stub
</span>		doProcess(request, response);
	}  	
	
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	<span class="code-keyword">protected</span> void doPost(HttpServletRequest request, HttpServletResponse response) <span class="code-keyword">throws</span> ServletException, IOException {
		doProcess(request, response);
		<span class="code-comment">// TODO Auto-generated method stub
</span>	}   	  	    
}</pre>
</div></div><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>This code contains EJB specific annotation and so we need to add EJB spec definition to the project. Follow the previous procedure to Add External jars and browse to &lt;GERONIMO_HOME&gt;\repository\org\apache\geronimo\specs\ geronimo-ejb_3.0_spec\1.0.1 and add geronimo-ejb_3.0_spec-1.0.1.jar to java build path. This servlet also contains code referring to bean interface class and PersonalInfo and BilllingInfo class. We need to add these projects to the build path so that the classes can be compiled. Right click on <b>StatefulClient</b> project and Select <b>Properties-&gt;Java Build Path-&gt;Projects.</b> Select Add.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/web15.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Check <b>StatefulBean</b> and Select Ok.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/web16.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Once done the project will be visible in the build path. Select Ok.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/web17.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Next step is to add jsp pages to our client project. Right click on <b>WebContent</b> under <b>StatefulClient</b> project and Select New-&gt;jsp.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/web18.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Name the jsp as PersonalInfo.jsp and Select Next.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/web19.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>On the next screen select Finish.<br clear="all" /> <br clear="all" /> <br clear="all" />
<img src="/confluence/download/attachments/86032/web20.png" align="absmiddle" border="0" /><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Add the following code to <b>PersonalInfo.jsp</b>.<br clear="all" /> <br clear="all" /> <br clear="all" />
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>PersonalInfo.jsp</b></div><div class="codeContent">
<pre class="code-java">&lt;%@ page language=<span class="code-quote">"java"</span> contentType=<span class="code-quote">"text/html; charset=ISO-8859-1"</span>
    pageEncoding=<span class="code-quote">"ISO-8859-1"</span>%&gt;
&lt;!DOCTYPE html PUBLIC <span class="code-quote">"-<span class="code-comment">//W3C//DTD HTML 4.01 Transitional//EN"</span> <span class="code-quote">"http://www.w3.org/TR/html4/loose.dtd"</span>&gt;
</span>&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=<span class="code-quote">"Content-Type"</span> content=<span class="code-quote">"text/html; charset=ISO-8859-1"</span>&gt;
&lt;title&gt;User Personal Information&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;form action=<span class="code-quote">"Controller"</span>&gt;
&lt;h1&gt;Enter your personal information&lt;/h1&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;&lt;h3&gt;Name&lt;/h3&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FirstName&lt;/td&gt;
&lt;td&gt;&lt;input type=<span class="code-quote">"text"</span> name=<span class="code-quote">"FirstName"</span>&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LastName&lt;/td&gt;
&lt;td&gt;&lt;input type=<span class="code-quote">"text"</span> name=<span class="code-quote">"LastName"</span>&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;h3&gt;Nationality&lt;/h3&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nationality&lt;/td&gt;
&lt;td&gt;&lt;input type=<span class="code-quote">"text"</span> name=<span class="code-quote">"Nationality"</span>&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;h3&gt;Login&lt;/h3&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UserName&lt;/td&gt;
&lt;td&gt;&lt;input type=<span class="code-quote">"text"</span> name=<span class="code-quote">"UserName"</span>&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Password&lt;/td&gt;
&lt;td&gt;&lt;input type=<span class="code-quote">"password"</span> name=<span class="code-quote">"Password"</span>&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;input type=<span class="code-quote">"submit"</span> Name=<span class="code-quote">"Next"</span>&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</div></div><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Similarly add another jsp with the name BillingInfo.jsp and add the following code.<br clear="all" /> <br clear="all" /> <br clear="all" />
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>BillingInfo.jsp</b></div><div class="codeContent">
<pre class="code-java">&lt;%@ page language=<span class="code-quote">"java"</span> contentType=<span class="code-quote">"text/html; charset=ISO-8859-1"</span>
    pageEncoding=<span class="code-quote">"ISO-8859-1"</span>%&gt;
&lt;!DOCTYPE html PUBLIC <span class="code-quote">"-<span class="code-comment">//W3C//DTD HTML 4.01 Transitional//EN"</span> <span class="code-quote">"http://www.w3.org/TR/html4/loose.dtd"</span>&gt;
</span>&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=<span class="code-quote">"Content-Type"</span> content=<span class="code-quote">"text/html; charset=ISO-8859-1"</span>&gt;
&lt;title&gt;User Billing Information&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;form action=<span class="code-quote">"Controller1"</span>&gt;
&lt;h1&gt;Enter your Billing information&lt;/h1&gt;
&lt;table&gt;
&lt;tr&gt;
&lt;td&gt;&lt;h3&gt;Address&lt;/h3&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;House No&lt;/td&gt;
&lt;td&gt;&lt;input type=<span class="code-quote">"text"</span> name=<span class="code-quote">"HouseNo"</span>&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Street&lt;/td&gt;
&lt;td&gt;&lt;input type=<span class="code-quote">"text"</span> name=<span class="code-quote">"Street"</span>&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;City&lt;/td&gt;
&lt;td&gt;&lt;input type=<span class="code-quote">"text"</span> name=<span class="code-quote">"City"</span>&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PinCode&lt;/td&gt;
&lt;td&gt;&lt;input type=<span class="code-quote">"text"</span> name=<span class="code-quote">"PinCode"</span>&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Country&lt;/td&gt;
&lt;td&gt;&lt;input type=<span class="code-quote">"text"</span> name=<span class="code-quote">"Country"</span>&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;h3&gt;Credit Card Information&lt;/h3&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bank&lt;/td&gt;
&lt;td&gt;&lt;input type=<span class="code-quote">"text"</span> name=<span class="code-quote">"Bank"</span>&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Card No&lt;/td&gt;
&lt;td&gt;&lt;input type=<span class="code-quote">"text"</span> name=<span class="code-quote">"CardNo"</span>&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;input type=<span class="code-quote">"submit"</span> name=<span class="code-quote">"Submit"</span>&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</div></div></li>
	<li>Let us walkthrough the servlet and jsp code. First through Controller servlet code.
	<ul>
		<li><b>@EJB AccountCreator ac;</b>- @EJB annotation is used to inject an EJB to the client code.</li>
		<li><b>if ( (request.getRequestURI()).equals("/StatefulClient/Controller"))</b>- This code act as a controller on the jsp which is making a request. This is possible only when the jsp's make a call to th servlet with different names. How this can be done will be illustrated in the next section.</li>
		<li><b>RequestDispatcher rd=request.getRequestDispatcher("BillingInfo.jsp")</b>- This code section and the next line forwards the control to next jsp that is <b>BillingInfo.jsp</b>.</li>
		<li>Rest of the servlet deals with calling the setter methods and later sets the object so as to persist the data between different calls.</li>
	</ul>
	</li>
	<li>Next walkthrough the jsp code.
	<ul>
		<li>PersonalInfo.jsp has <b>&lt;form action="Controller"&gt;</b> whereas BillingInfo.jsp has <b>&lt;form action="Controller1"&gt;</b> as the action element but both internally calling the same servlet. This can be easily done by modifying <b>web.xml</b> this will be shown in the next section.</li>
	</ul>
	</li>
</ol>


<h1><a name="StatefulSessionBean-AddingaEnterpriseApplicationProject."></a>Adding a Enterprise Application Project.</h1>
<ol>
	<li>Right click under project explorer and select New-&gt;Enterprise Application Project.<br clear="all" /> <br clear="all" /> <br clear="all" />
<span class="error">Unable to render embedded object: File (ear1.png) not found.</span><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Name the project as <b>StatefulApp</b> and select <b>Next</b>.<br clear="all" /> <br clear="all" /> <br clear="all" />
<span class="error">Unable to render embedded object: File (ear2.png) not found.</span><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Keep the default values and select <b>Next</b>.<br clear="all" /> <br clear="all" /> <br clear="all" />
<span class="error">Unable to render embedded object: File (ear3.png) not found.</span><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>On the next screen check <b>StatefulBean</b> and <b>StatefulClient</b> and check <b>Generate Deployment Descriptor</b>. Select Next.<br clear="all" /> <br clear="all" /> <br clear="all" />
<span class="error">Unable to render embedded object: File (ear4.png) not found.</span><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
	<li>Keep the default values and Select Finish.<br clear="all" /> <br clear="all" /> <br clear="all" />
<span class="error">Unable to render embedded object: File (ear5.png) not found.</span><br clear="all" /> <br clear="all" /> <br clear="all" /></li>
</ol>
</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