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: Simple Database Access Application (page edited)
Date Thu, 20 Mar 2008 21:42: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/Simple+Database+Access+Application">Simple Database Access Application</a>
        </span>
    </div>

     <p>
        <a href="http://cwiki.apache.org/confluence/display/GMOxDOC21/Simple+Database+Access+Application">Simple Database Access Application</a>
        has been edited by             <a href="http://cwiki.apache.org/confluence/display/~hcunico">Hernan Cunico</a>
            <span class="smallfont">(Mar 20, 2008)</span>.
     </p>
    
     <p>
                 <a href="http://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=78678&originalVersion=1&revisedVersion=2">(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/LDAP+Sample+Application"><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/LDAP+Sample+Application">LDAP Sample Application</a>&nbsp;</td><td width='33%' class='ScrollbarParent'><sup><a href="/confluence/display/GMOxDOC21/Sample+applications"><img border='0' align='middle' src='/confluence/images/icons/up_16.gif' width='8' height='8'></a></sup><a href="/confluence/display/GMOxDOC21/Sample+applications">Sample applications</a></td><td width='33%' class='ScrollbarNextName'>&nbsp;<a href="/confluence/display/GMOxDOC21/Simple+Web+Service+with+JAX-WS">Simple Web Service with JAX-WS</a></td><td class='ScrollbarNextIcon'><a href="/confluence/display/GMOxDOC21/Simple+Web+Service+with+JAX-WS"><img border='0' align='middle' src='/confluence/images/icons/forwd_16.gif' width='16' height='16'></a></td></tr></table></div>

<p>This article guides you through the JDBC features in the Apache Geronimo appplication server. To demonstrate the JDBC features, we use a simple Inventory application which has JSP, Servlets to handle web related features and inbuilt Derby as database. </p>

<p>Inventory Application will use the Service Provider Interface (SPI) method to access its database. In this method the application uses a JDBC DataSource interface to establish connections with the database. This is the preferred access method for a JEE application for several reasons:</p>

<ul>
	<li>Program code will be totally database independent. Driver information, database location, and configuration parameters are stored in the JEE Server.</li>
	<li>It allows the use of connection pooling. The JEE Server connection manager effectively manages connections to greatly improve performance and scalability.</li>
	<li>It enables the database to be used by Enterprise JavaBeans (EJB) to implement business logic as part of the JEE Server. Implementing an EJB tier, although not required, lays the foundation for creating a highly scalable, distributed application architecture.</li>
</ul>


<p>After reading this article you should be able get the best out of the JDBC features of Geronimo, such as defining database pools and using DataSources to access databases.</p>

<p>This article is organized in to following sections.</p>
<div>
<ul>
  <li><a href='#SimpleDatabaseAccessApplication-OverviewofJDBCFeatures'>Overview of JDBC Features</a></li>
  <li><a href='#SimpleDatabaseAccessApplication-ApplicationOverview'>Application Overview</a>
<ul>
  <li><a href='#SimpleDatabaseAccessApplication-Applicationcontents'>Application contents</a>
<ul>
  <li><a href='#SimpleDatabaseAccessApplication-SampleDatabase'>Sample Database</a></li>
</ul></li>
  <li><a href='#SimpleDatabaseAccessApplication-Toolsused'>Tools used</a>
<ul>
  <li><a href='#SimpleDatabaseAccessApplication-ApacheDerby'>Apache Derby</a></li>
  <li><a href='#SimpleDatabaseAccessApplication-ApacheMaven2'>Apache Maven 2</a></li>
</ul></li>
</ul></li>
  <li><a href='#SimpleDatabaseAccessApplication-Configuring%2Cbuildinganddeploying'>Configuring, building and deploying</a>
<ul>
  <li><a href='#SimpleDatabaseAccessApplication-Configuring'>Configuring</a>
<ul>
  <li><a href='#SimpleDatabaseAccessApplication-CreatingandPopulatingDatabase'>Creating and Populating Database</a></li>
</ul></li>
  <li><a href='#SimpleDatabaseAccessApplication-Building'>Building</a></li>
  <li><a href='#SimpleDatabaseAccessApplication-Deploying'>Deploying</a></li>
</ul></li>
  <li><a href='#SimpleDatabaseAccessApplication-TestingoftheSampleApplication'>Testing of the Sample Application</a></li>
  <li><a href='#SimpleDatabaseAccessApplication-Summary'>Summary</a></li>
</ul></div>

<h1><a name="SimpleDatabaseAccessApplication-OverviewofJDBCFeatures"></a>Overview of JDBC Features</h1>

<p>JDBC implementation in application servers vary from application server to other. Following table gives a  feature list of JDBC in Apache Geronimo.</p>

<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'>Feature</th>
<th class='confluenceTh'>Description</th>
</tr>
<tr>
<td class='confluenceTd'>JDBC access</td>
<td class='confluenceTd'>Geronimo does not have any direct integration with JDBC but supports access through the generic J2CA framework. The TranQL project has J2CA adapters for various databases.</td>
</tr>
<tr>
<td class='confluenceTd'>JCA implementation</td>
<td class='confluenceTd'>Geronimo supports the JCA 1.5 specification and is backward compatible to the JCA 1.0 specification.</td>
</tr>
<tr>
<td class='confluenceTd'>Data sources supported</td>
<td class='confluenceTd'>TranQL has generic wrappers for each data sources.</td>
</tr>
<tr>
<td class='confluenceTd'>Data source failover</td>
<td class='confluenceTd'>TranQL has specialized drivers for certain databases (including Apache Derby, Oracle and DB2) that provide a tighter integration with the advanced features of the driver.<br/>
It is at this level that features such as load-balancing and failover would be provided. You can also use a C-JDBC wrapper for providing database clustering and failover.</td>
</tr>
<tr>
<td class='confluenceTd'>XA support</td>
<td class='confluenceTd'>Supports XA transactions, Local Transactions, and No transaction.</td>
</tr>
<tr>
<td class='confluenceTd'>Connection Manager Configurability</td>
<td class='confluenceTd'>The J2CA framework is interceptor based which allows different parts of the connection framework to be plugged in.</td>
</tr>
<tr>
<td class='confluenceTd'>JTA implementation</td>
<td class='confluenceTd'>Transaction support is provided through Geronimo Specific Transaction Managing Framework and HOWL.</td>
</tr>
<tr>
<td class='confluenceTd'>Connection pooling and management</td>
<td class='confluenceTd'>Custom Geronimo Code and TranQL used for connection pooling and management.</td>
</tr>
<tr>
<td class='confluenceTd'>Legacy driver support</td>
<td class='confluenceTd'>Geronimo provides this through the TranQL- connector JDBC to JCA wrapper in Geronimo. Supports JDBC 3.0 and 2.1.</td>
</tr>
</tbody></table>

<h1><a name="SimpleDatabaseAccessApplication-ApplicationOverview"></a>Application Overview</h1>

<p>The Inventory application in this article only supports three basic usecases of such applications.</p>
<ol>
	<li>Add Items to the Stock</li>
	<li>Receive Items</li>
	<li>Issue Items<br/>
The application workflow starts with adding item information to the stock. Then it allows enter goods receiving and issuing information. All those updated information are stored in the inbuilt Derby database.</li>
</ol>


<p>The Inventory Web Application has following list of pages</p>
<ul>
	<li>Welcome</li>
	<li>Add Item</li>
	<li>Receive Goods</li>
	<li>Issue Goods</li>
</ul>


<p>The following figure illustrates the application flow.<br/>
<div align="center"><img src="/confluence/download/attachments/78678/inventory_flow.gif" border="0" /></div></p>

<p>Welcome page of the application acting as a notice board which displays current stock of each item. Through the Welcome page users can access Add Item, Receive Goods or Issue Goods Pages. Upon successful completion of each activity, the page will be redirected back to the Welcome page with updated stock information. Add Item helps to define items in the stock, then 0 number of items will be added to the stock. Receive and Issue Goods pages represent Goods Receiving and Issuing activities of the application respectively.</p>

<h2><a name="SimpleDatabaseAccessApplication-Applicationcontents"></a>Application contents</h2>
<p>The Inventory application consist of following list of packages and classes.</p>
<ul>
	<li>org.apache.geronimo.samples.inventory
	<ul>
		<li>Item - represents Item in the Inventory.</li>
	</ul>
	</li>
	<li>org.apache.geronimo.samples.inventory.services
	<ul>
		<li>InventoryManager - represents list of services offered by the inventory.</li>
	</ul>
	</li>
	<li>org.apache.geronimo.samples.inventory.dao
	<ul>
		<li>ItemDAO - contains all database access methods.</li>
	</ul>
	</li>
	<li>org.apache.geronimo.samples.inventory.exception
	<ul>
		<li>DuplicateItemIdException - custom exception to handle duplication item id scenario.</li>
		<li>NotSufficientQuantityException - Custom exception to handle not sufficient quantity situation.</li>
	</ul>
	</li>
	<li>org.apache.geronimo.samples.inventory.util
	<ul>
		<li>DBManager - handle database related activities such as issuing database connections.</li>
	</ul>
	</li>
	<li>org.apache.geronimo.samples.inventory.web
	<ul>
		<li>AddItemServlet - dispatch add item information to service layer.</li>
		<li>IssueingServlet - dispatch issuing items information to service layer.</li>
		<li>RecievingServlet - dispatch receiving items information to service layer.</li>
	</ul>
	</li>
</ul>


<p>The list of web application files in the application is depicted in the following.</p>

<div class="preformatted" style="border-style: solid; border-color: #FFFFFF; "><div class="preformattedContent" style="background-color: #FFFFFF; ">
<pre>|- jsp
    +- add.jsp
    +- error.jsp
    +- issue.jsp
    +- recv.jsp
|- WEB-INF
    +- geronimo-web.xml
    +- web.xml
|- welcome.jsp
</pre>
</div></div>

<p>This application defines a datasource with the help of <b>geronimo-web.xml</b> and <b>web.xml</b> deployment plans. <b>geronimo-web.xml</b> adds a link to the database pool that is packaged with the EAR file.</p>

<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>&gt;
	
	<span class="code-tag">&lt;environment&gt;</span>
		<span class="code-tag">&lt;moduleId&gt;</span>
			<span class="code-tag">&lt;groupId&gt;</span>org.apache.geronimo.samples<span class="code-tag">&lt;/groupId&gt;</span>
			<span class="code-tag">&lt;artifactId&gt;</span>inventory-war<span class="code-tag">&lt;/artifactId&gt;</span>
			<span class="code-tag">&lt;version&gt;</span>2.1<span class="code-tag">&lt;/version&gt;</span>
                        <span class="code-tag">&lt;type&gt;</span>war<span class="code-tag">&lt;/type&gt;</span>
		<span class="code-tag">&lt;/moduleId&gt;</span>
		<span class="code-tag">&lt;dependencies&gt;</span><span class="code-tag">&lt;/dependencies&gt;</span>		
	<span class="code-tag">&lt;/environment&gt;</span>
		
	<span class="code-tag">&lt;context-root&gt;</span>/inventory<span class="code-tag">&lt;/context-root&gt;</span>
	
	<span class="code-tag"><span class="code-comment">&lt;!-- define a reference name to the db pool--&gt;</span></span>
	<span class="code-tag">&lt;resource-ref&gt;</span>
        <span class="code-tag">&lt;ref-name&gt;</span>jdbc/InventoryDS<span class="code-tag">&lt;/ref-name&gt;</span>
        <span class="code-tag">&lt;resource-link&gt;</span>InventoryPool<span class="code-tag">&lt;/resource-link&gt;</span>
    <span class="code-tag">&lt;/resource-ref&gt;</span>    
<span class="code-tag">&lt;/web-app&gt;</span></pre>
</div></div>

<p>Following is the <b>web.xml</b> of the Inventory application. It uses same name as in the <b>geronimo-web.xml</b>, which is used to create the datasource.</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 xmlns=<span class="code-quote">"http://java.sun.com/xml/ns/j2ee"</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/j2ee
	 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
	 version=<span class="code-quote">"2.4"</span>&gt;	
	 
	<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-list&gt;</span>  
  	
  	<span class="code-tag">&lt;servlet&gt;</span>
	    <span class="code-tag">&lt;display-name&gt;</span>AddItemServlet<span class="code-tag">&lt;/display-name&gt;</span>
	    <span class="code-tag">&lt;servlet-name&gt;</span>AddItemServlet<span class="code-tag">&lt;/servlet-name&gt;</span>
	    <span class="code-tag">&lt;servlet-class&gt;</span>org.apache.geronimo.samples.inventory.web.AddItemServlet<span class="code-tag">&lt;/servlet-class&gt;</span>
  	<span class="code-tag">&lt;/servlet&gt;</span>
  	<span class="code-tag">&lt;servlet&gt;</span>
	    <span class="code-tag">&lt;display-name&gt;</span>IssueingServlet<span class="code-tag">&lt;/display-name&gt;</span>
	    <span class="code-tag">&lt;servlet-name&gt;</span>IssueingServlet<span class="code-tag">&lt;/servlet-name&gt;</span>
	    <span class="code-tag">&lt;servlet-class&gt;</span>org.apache.geronimo.samples.inventory.web.IssueingServlet<span class="code-tag">&lt;/servlet-class&gt;</span>
	<span class="code-tag">&lt;/servlet&gt;</span>
	<span class="code-tag">&lt;servlet&gt;</span>
	    <span class="code-tag">&lt;display-name&gt;</span>RecievingServlet<span class="code-tag">&lt;/display-name&gt;</span>
	    <span class="code-tag">&lt;servlet-name&gt;</span>RecievingServlet<span class="code-tag">&lt;/servlet-name&gt;</span>
	    <span class="code-tag">&lt;servlet-class&gt;</span>org.apache.geronimo.samples.inventory.web.RecievingServlet<span class="code-tag">&lt;/servlet-class&gt;</span>
	<span class="code-tag">&lt;/servlet&gt;</span>
  	
  	<span class="code-tag">&lt;servlet-mapping&gt;</span>
	    <span class="code-tag">&lt;servlet-name&gt;</span>AddItemServlet<span class="code-tag">&lt;/servlet-name&gt;</span>
	    <span class="code-tag">&lt;url-pattern&gt;</span>/add_item<span class="code-tag">&lt;/url-pattern&gt;</span>
    <span class="code-tag">&lt;/servlet-mapping&gt;</span>
    <span class="code-tag">&lt;servlet-mapping&gt;</span>
	    <span class="code-tag">&lt;servlet-name&gt;</span>IssueingServlet<span class="code-tag">&lt;/servlet-name&gt;</span>
	    <span class="code-tag">&lt;url-pattern&gt;</span>/issue<span class="code-tag">&lt;/url-pattern&gt;</span>
    <span class="code-tag">&lt;/servlet-mapping&gt;</span>
    <span class="code-tag">&lt;servlet-mapping&gt;</span>
	    <span class="code-tag">&lt;servlet-name&gt;</span>RecievingServlet<span class="code-tag">&lt;/servlet-name&gt;</span>
	    <span class="code-tag">&lt;url-pattern&gt;</span>/recv<span class="code-tag">&lt;/url-pattern&gt;</span>
    <span class="code-tag">&lt;/servlet-mapping&gt;</span>
    
    <span class="code-tag"><span class="code-comment">&lt;!-- reference name exposed as a datasource --&gt;</span></span>
    <span class="code-tag">&lt;resource-ref&gt;</span>
    	<span class="code-tag">&lt;res-ref-name&gt;</span>jdbc/InventoryDS<span class="code-tag">&lt;/res-ref-name&gt;</span>
    	<span class="code-tag">&lt;res-type&gt;</span>javax.sql.DataSource<span class="code-tag">&lt;/res-type&gt;</span>
    	<span class="code-tag">&lt;res-auth&gt;</span>Container<span class="code-tag">&lt;/res-auth&gt;</span>
    	<span class="code-tag">&lt;res-sharing-scope&gt;</span>Shareable<span class="code-tag">&lt;/res-sharing-scope&gt;</span>
  	<span class="code-tag">&lt;/resource-ref&gt;</span>
    
<span class="code-tag">&lt;/web-app&gt;</span></pre>
</div></div>

<p><b>geronimo-application.xml</b> tells the application that there is a database pool that needs to be deployed as well. The db pool is defined in <b>InventoryPool.xml</b> and the driver that is needs in order to be deployed is the <b>tranql-connector-ra-1.3.rar</b> file--these two files will reside on the top level layer of the resultant EAR file.</p>

<div class="code" style="border-style: solid; "><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>
<span class="code-tag">&lt;application xmlns=<span class="code-quote">"http://geronimo.apache.org/xml/ns/j2ee/application-2.0"</span>&gt;</span>

    <span class="code-tag">&lt;dep:environment <span class="code-keyword">xmlns:dep</span>=<span class="code-quote">"http://geronimo.apache.org/xml/ns/deployment-1.2"</span>&gt;</span>
        <span class="code-tag">&lt;dep:moduleId&gt;</span>
            <span class="code-tag">&lt;dep:groupId&gt;</span>org.apache.geronimo.samples<span class="code-tag">&lt;/dep:groupId&gt;</span>
            <span class="code-tag">&lt;dep:artifactId&gt;</span>inventory-ear<span class="code-tag">&lt;/dep:artifactId&gt;</span>
            <span class="code-tag">&lt;dep:version&gt;</span>2.1<span class="code-tag">&lt;/dep:version&gt;</span>
            <span class="code-tag">&lt;dep:type&gt;</span>ear<span class="code-tag">&lt;/dep:type&gt;</span>
        <span class="code-tag">&lt;/dep:moduleId&gt;</span>
    <span class="code-tag">&lt;/dep:environment&gt;</span>
	<span class="code-tag">&lt;module&gt;</span>
		<span class="code-tag">&lt;connector&gt;</span>tranql-connector-ra-1.3.rar<span class="code-tag">&lt;/connector&gt;</span>
		<span class="code-tag">&lt;alt-dd&gt;</span>InventoryPool.xml<span class="code-tag">&lt;/alt-dd&gt;</span>
	<span class="code-tag">&lt;/module&gt;</span>
<span class="code-tag">&lt;/application&gt;</span></pre>
</div></div>

<p>Next important phase of the application is accessing defined datasource from the source code. This part is handled by the <b>DBManager</b> class.</p>

<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>DBManager.java</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> org.apache.geronimo.samples.inventory.util;

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

<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.NamingException;
<span class="code-keyword">import</span> javax.sql.DataSource;


<span class="code-keyword">public</span> class DBManager {
	
	<span class="code-keyword">public</span> <span class="code-keyword">static</span> Connection getConnection(){
		Connection con = <span class="code-keyword">null</span>;

		<span class="code-keyword">try</span> {
			Context context = <span class="code-keyword">new</span> InitialContext();
			DataSource ds = (DataSource)context.lookup(<span class="code-quote">"java:comp/env/jdbc/InventoryDS"</span>);
			con = ds.getConnection();
		} <span class="code-keyword">catch</span> (NamingException e) {
			e.printStackTrace();
		} <span class="code-keyword">catch</span> (SQLException e) {
			e.printStackTrace();
		}
		<span class="code-keyword">return</span> con;
	}

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

<h3><a name="SimpleDatabaseAccessApplication-SampleDatabase"></a>Sample Database</h3>
<p>The sample database that is being used to demonstrate this application is in-built Derby database. The name of the sample database is <b>InventoryDB</b> and it consists of two tables, namely ITEM and ITEM_MASTER. The fields for each of these tables are described below.  </p>

<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'>Table Name	</th>
<th class='confluenceTh'> Fields		</th>
</tr>
<tr>
<td class='confluenceTd'>ITEM		</td>
<td class='confluenceTd'>ITEM_ID (PRIMARY KEY)<br clear="all" />
		 ITEM_NAME<br clear="all" />
		 DESCRIPTION</td>
</tr>
<tr>
<td class='confluenceTd'>ITEM_MASTER	</td>
<td class='confluenceTd'>ITEM_ID (PRIMARY KEY)<br clear="all" />
		 QUANTITY</td>
</tr>
</tbody></table>

<p>The <b>ITEM</b> table stores the data related to the items while <b>ITEM_MASTER</b> stores the quantity in hand of each item.</p>

<h2><a name="SimpleDatabaseAccessApplication-Toolsused"></a>Tools used</h2>
<p>The tools used for developing and building the Inventory sample application are:</p>

<h3><a name="SimpleDatabaseAccessApplication-ApacheDerby"></a>Apache Derby</h3>
<p>Apache Derby, an Apache DB subproject, is a relational database implemented in Java. Its footprint is so small you can easily embed it in any Java-based solution. In addition to its embedded framework, Derby supports a more familiar client/server framework with the Derby Network Server.<br/>
<span class="nobr"><a href="http://db.apache.org/derby/index.html" title="Visit page outside Confluence" rel="nofollow">http://db.apache.org/derby/index.html<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></p>

<h3><a name="SimpleDatabaseAccessApplication-ApacheMaven2"></a>Apache Maven 2</h3>
<p>Maven is a popular open source build tool for enterprise Java projects, designed to take much of the hard work out of the build process. Maven uses a declarative approach, where the project structure and contents are described, rather than the task-based approach used in Ant or in traditional make files, for example. This helps enforce company-wide development standards and reduces the time needed to write and maintain build scripts. The declarative, lifecycle-based approach used by Maven 1 is, for many, a radical departure from more traditional build techniques, and Maven 2 goes even further in this regard. Maven 2 can be download from the following URL:<br/>
<span class="nobr"><a href="http://maven.apache.org" title="Visit page outside Confluence" rel="nofollow">http://maven.apache.org<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></p>


<h1><a name="SimpleDatabaseAccessApplication-Configuring%2Cbuildinganddeploying"></a>Configuring, building and deploying</h1>

<p>Currently this sample application is available from our subversion repository, use the following <b>svn</b> command to retrieve the content:</p>

<p><b><tt>svn co <span class="nobr"><a href="http://svn.apache.org/repos/asf/geronimo/samples/branches/2.1/samples/inventory/" title="Visit page outside Confluence" rel="nofollow">http://svn.apache.org/repos/asf/geronimo/samples/branches/2.1/samples/inventory/<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> inventory_home</tt></b></p>

<p>A directory named <b><tt>inventory_home</tt></b> will be created when you check out from the source, you can choose a directory name and location convenient to you. We will generically refer to this directory as <b>&lt;sample_home&gt;</b>.</p>

<h2><a name="SimpleDatabaseAccessApplication-Configuring"></a>Configuring</h2>
<p>Configuration of the application consists of creating the database and defining the connection pool to access it.</p>

<h3><a name="SimpleDatabaseAccessApplication-CreatingandPopulatingDatabase"></a>Creating and Populating Database</h3>
<p>After starting Apache Geronimo log into the console and follow the given steps to create the <b>InventoryDB</b> database.</p>

<ol>
	<li>Select <b>DB Manager</b> link from the <b>Console Navigation</b> panel on the left.</li>
	<li>Give the database name as <b>InventoryDB</b> and click <b>Create</b> button.</li>
	<li>Select <b>InventoryDB</b> to the <b>Use DB</b> field.</li>
	<li>Open <b>InventoryDB.sql</b> in the <b>&lt;sample_home&gt;/inventory-ear/src/main/resources</b> directory from a text editor.</li>
	<li>Paste the content <b>InventoryDB.sql</b> to the <b>SQL Commands</b> text area and press <b>Run SQL</b> button.</li>
</ol>


<div class="preformatted" style="border-style: solid; "><div class="preformattedHeader" style="border-bottom-style: solid; "><b>InventoryDB.sql</b></div><div class="preformattedContent">
<pre>CREATE TABLE item(
	item_id VARCHAR(10) PRIMARY KEY,
	item_name VARCHAR(25),
	description VARCHAR(100)	
);

CREATE TABLE item_master(
	item_id VARCHAR(10) PRIMARY KEY,
	quantity INTEGER
);

INSERT INTO item VALUES('001', 'Item 1', 'Test Item 1');
INSERT INTO item VALUES('002', 'Item 2', 'Test Item 2');
INSERT INTO item VALUES('003', 'Item 3', 'Test Item 3');
INSERT INTO item VALUES('004', 'Item 4', 'Test Item 4');


INSERT INTO item_master VALUES('001', 12);
INSERT INTO item_master VALUES('002', 8);
INSERT INTO item_master VALUES('003', 49);
INSERT INTO item_master VALUES('004', 34);
</pre>
</div></div>

<h2><a name="SimpleDatabaseAccessApplication-Building"></a>Building</h2>
<p>Inventory application comes with an <b>pom.xml</b> script to help users to build from source code. Use the command prompt to navigate into the <b>inventory</b> directory and just give <b>mvn install</b> command to build. It will create the <b>inventory-ear-2.1-SNAPSHOT.ear</b> file under the <b>&lt;sample_home&gt;</b> directory. Now, you are ready to deploy Inventory web application in to the Geronimo Application server.</p>

<h2><a name="SimpleDatabaseAccessApplication-Deploying"></a>Deploying</h2>
<p>Deploying sample application is pretty straight forward as we are going to use the Geronimo Console. </p>
<ol>
	<li>Click the <b>Deploy New</b> link on the <b>Console Navigation</b> panel.</li>
	<li>Load <b>inventory-ear-2.1-SNAPSHOT.ear</b> file from <b>&lt;sample_home&gt;</b> directory into the <b>Archive</b> input box.</li>
	<li>Press <b>Install</b> button to deploy the application in the server.</li>
</ol>


<h1><a name="SimpleDatabaseAccessApplication-TestingoftheSampleApplication"></a>Testing of the Sample Application</h1>

<p>To test the sample application, open a browser and type <span class="nobr"><a href="http://localhost:8080/inventory" title="Visit page outside Confluence" rel="nofollow">http://localhost:8080/inventory<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>. The Welcome page of Inventory application which is acts as a notice board will be loaded.</p>

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

<p>The user can directly access Add Items, Receive Goods and Issue Goods functionalities from the Welcome page.</p>

<h1><a name="SimpleDatabaseAccessApplication-Summary"></a>Summary</h1>

<p>This article has shown you how to use JDBC features inside the Geronimo Application Server. You followed step-by-step instructions to build, deploy and test a sample application to elaborate these features.</p>

<p>The highlights of this article are:</p>
<ul>
	<li>JDBC features in Apache Geronimo.</li>
	<li>Create a database and populate the data in Geronimo with in built Derby Database.</li>
	<li>Deploy a database pool plan to access a database.</li>
	<li>Deploy web archives to access database via the pool defined in Geronimo.</li>
</ul>
</div>


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

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

</div>

</body>
</html>


Mime
View raw message