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: JBoss to Geronimo - Hibernate Migration (Unverified on 2.1) (page created)
Date Thu, 28 Feb 2008 14:43: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 Created :
            <a href="http://cwiki.apache.org/confluence/display/GMOxDOC21">GMOxDOC21</a> :
            <a href="http://cwiki.apache.org/confluence/display/GMOxDOC21/JBoss+to+Geronimo+-+Hibernate+Migration+%28Unverified+on+2.1%29">JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)</a>
        </span>
    </div>

     <p>
        <a href="http://cwiki.apache.org/confluence/display/GMOxDOC21/JBoss+to+Geronimo+-+Hibernate+Migration+%28Unverified+on+2.1%29">JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)</a>
        has been created by             <a href="http://cwiki.apache.org/confluence/display/~jawarner">Jason Warner</a>
            <span class="smallfont">(Feb 28, 2008)</span>.
     </p>

    <span class="label">Content:</span><br />
    <div class="greybox wiki-content"><p><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-top"></a><br/>
This article will help you migrate applications using Hibernate 3.2 as the ORM tool from JBoss Application Server 4.2.1 to Apache Geronimo 2.0.</p>

<p>Hibernate is a powerful, high performance object/relational persistence and query service. It helps in the development of persistent (POJO) classes which have the getter and setter methods for attributes that are then mapped to fields in the database. You may follow object-oriented idiom - including association, inheritance, polymorphism, composition, and collections. Hibernate allows you to express queries in its own portable SQL extension (HQL), as well as in native SQL, or with an object-oriented Criteria and Example API.</p>

<p>Basically, Hibernate maps the Java classes to the database tables. It also provides the data query and retrieval facilities that significantly reduce the development time. It fits in naturally to the object-oriented mode of code development in the JAVA middle-tier. A unique feature of Hibernate is that it facilitates transparent persistence that enables the applications to switch to any database be it MySQL, Oracle or DB2. Hibernate can be used in Java Swing applications, Java Servlet-based applications, or J2EE applications using EJB session beans (Java Servlet based application in our case).</p>

<p>In order to illustrate the steps involved in the migration a sample application is provided which we will first deploy in JBoss and then migrate to Geronimo. The sample application will be the Online Brokerage Application which we already used in the JDBC migration example. This application has been changed to use Hibernate for persistence.</p>

<p>This article is organized in the following sections:</p>
<ul>
	<li><a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-implementation" title="implementation on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">Hibernate implementation analysis</a></li>
	<li><a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-sampleApp" title="sampleApp on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">Sample application</a></li>
	<li><a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-JBoss" title="JBoss on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">The JBoss environment</a></li>
	<li><a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-Geronimo" title="Geronimo on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">The Geronimo environment</a></li>
	<li><a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-migration" title="migration on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">Step-by-step migration</a></li>
	<li><a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-summary" title="summary on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">Summary</a></li>
</ul>


<p><a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-top" title="top on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">Back to Top</a></p>

<h1><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-Hibernateimplementationanalysis"></a>Hibernate implementation analysis <a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-implementation"></a></h1>

<p>Hibernate can provide the following services:</p>
<ul>
	<li>Connection Management</li>
	<li>Transaction Management</li>
	<li>Object Relational Mapping</li>
</ul>


<p>It is also very flexible and we can use any combinations of these services. In this article we will be configuring hibernate to provide only the O/R Mapping feature while JBoss/Geronimo will provide both Transaction Management and Connection Management. This is the most commonly used configuration of Hibernate with an application server. Hibernate requires a configuration file <tt>hibernate.cfg.xml</tt> which creates the connection pool and sets up the required environment. It contains parameters like the database driver, connection url, dialect (this specifies which RDBMS is being used), username, password, pool size among others. It also contains the location of the Mapping File <tt>&#42;.hbm.xml</tt>. A Mapping File is used to map the fields in the database table to the persistent class attributes.</p>

<p>These properties are <b>common</b> to any application server including <b>Apache Geronimo v2.0</b>.</p>

<p>However, JBoss (more specifically the Hibernate MBean) provides <b>two</b> additional deployment mechanisms.</p>

<p>The first is the Hibernate Archive (HAR file). Here, all the Hibernate classes and mapping files are packaged in a special archive, the HAR file. JBoss deploys this archive in the same way as it does with an EAR or a WAR file.</p>

<p>The alternative to the HAR file is to simply put all the Hibernate classes and mapping files with the other application classes, like in an EAR for example. The Hibernate MBean would be separately configured and told to search all application JARs for mapping files. Both deployment mechanisms allow you to provide Hibernate objects to your application code without performing any manual configuration or writing of the setup code normally required.</p>

<p>Structurally, a HAR file resembles a JBoss service archive (SAR file). The HAR file contains the Hibernate class files and the mapping files (*.hbm.xml) along with the standard <tt>jboss-service.xml</tt> file containing a definition for the Hibernate MBean configured for the needs of the Hibernate application being created. In the latest JBoss distribution, it has been renamed as <tt>hibernate-service.xml</tt>, but it retains the same structure and purpose.</p>

<p>Hibernate archives can be deployed as top-level packages or as a component of an EAR file. Since Hibernate archives are not a standard J2EE deployment type, we need to declare them in the <tt>jboss-app.xml</tt> file of an EAR file to use them in that context.</p>

<p>The following table provides a feature-to-feature comparison between these two applicaiton servers.</p>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Feature </th>
<th class='confluenceTh'> Apache Geronimo v2.0 </th>
<th class='confluenceTh'> JBoss v4.2.1 </th>
</tr>
<tr>
<td class='confluenceTd'> Container-managed datasource </td>
<td class='confluenceTd'> Supported. Hibernate is able to use a datasource given its JNDI name. This is because it is running in the same thread as the application. </td>
<td class='confluenceTd'> Supported. Hibernate can lookup a datasource from JNDI given its JNDI name. </td>
</tr>
<tr>
<td class='confluenceTd'> Automatic JNDI binding </td>
<td class='confluenceTd'> Not Supported. </td>
<td class='confluenceTd'> Supported. Once the property is set the session factory is bound to the JNDI context. </td>
</tr>
<tr>
<td class='confluenceTd'> JTA Session binding </td>
<td class='confluenceTd'> This feature is not supported out of the box. We need to write a lookup for the Geronimo Transaction Manager to enable this. </td>
<td class='confluenceTd'> Supported out of the Box. Hibernate provides a lookup class for the JBoss Transaction Manager. </td>
</tr>
<tr>
<td class='confluenceTd'> JMX deployment </td>
<td class='confluenceTd'> Not Supported out of the box. <b>Can be implemented by writing a GBean and a Hibernate Connection Provider class</b>. </td>
<td class='confluenceTd'> Supported. Hibernate is distributed with <tt>org.hibernate.jmx.HibernateService</tt> which can be deployed on JBoss. </td>
</tr>
<tr>
<td class='confluenceTd'> Hibernate Archive (HAR) </td>
<td class='confluenceTd'> Not Supported. Hibernate classes are deployed as a part of the J2EE archives. </td>
<td class='confluenceTd'> Supported. A HAR packages the configuration and mapping files enabling extra server support to deployment. </td>
</tr>
<tr>
<td class='confluenceTd'> Caching </td>
<td class='confluenceTd'> You can use caching mechanisms provided by hibernate. </td>
<td class='confluenceTd'> You can use caching mechanisms provided by hibernate. Integration with JBoss Cache is also supported. </td>
</tr>
<tr>
<td class='confluenceTd'> Session Management </td>
<td class='confluenceTd'> Not Supported. It is required to manually open sessions. Only the transaction needs to be closed. </td>
<td class='confluenceTd'> The Hibernate Session's lifecycle can be automatically bound to the scope of a <br clear="all" />
JTA transaction. This means you no longer have to manually open and close the Session, this becomes the job of a JBoss EJB interceptor. </td>
</tr>
<tr>
<td class='confluenceTd'> Hibernate Mapping Files </td>
<td class='confluenceTd'> We need to specify the locations of the Hibernate mapping files. </td>
<td class='confluenceTd'> If we use HAR deployment JBoss will automatically lookup the Hibernate mapping files. </td>
</tr>
</tbody></table>
<p><a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-top" title="top on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">Back to Top</a></p>

<h1><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-Sampleapplication"></a>Sample application <a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-sampleApp"></a></h1>

<p>This article contains a sample application to demonstrate migrating an application from JBoss to Geronimo, called <span class="error">&#91;Online Brokerage|^brokerage.zip&#93;</span> . It represents an online trading scenario in which users can buy and sell stocks. The application has the following five pages:</p>
<ul>
	<li>Login Page</li>
	<li>Registration Page</li>
	<li>User Information Page</li>
	<li>Available Stocks Page</li>
	<li>User Portfolio Page</li>
</ul>


<p>The following figure illustrates the application flow:<span class="error">Unable to render embedded object: File (brokerage.jpg) not found.</span><br/>
First, the user accesses the Login page. From the Login page the user enters the user name and password. If the user name or password is not valid the application throws an error message and rejects the user's login attempt. If the user name and password are correct, the user is taken to the Available Stocks page where he/she can view all the stocks that are present for sale at that time.<br/>
The user can choose to buy as many stocks as wanted, depending on the available money in the account, by clicking the Buy button. After the transaction completes successfully the user is brought back to the Available Stocks page where he/she can buy more stocks if required. If the user has insufficient funds to buy stocks the application will throw an error and will not process the transaction. The error message is shown at the top of the Available Stocks page. There is a User Info button on this page. By clicking this button the user is taken to the User Info page and shown the user details.<br/>
>From the Available Stocks page there is a View your Portfolio link that shows all the stocks that the user owns. In that page, the user can select the stocks and quantity to sell. This page also shows the user's available cash in the User Cash field. If the user tries to sell more stocks than he/she has, the application will throw an error. The error message will be displayed on the same page. For each successful sale, the sale amount is added to the user's cash balance. The quantity text box shows the quantity of stocks of a particular company that the user has. The Quantity to Sell field allows the user to enter the quantity of stocks to sell for a specific company. For selling and buying, the radio button should be checked. This should be done after entering the values. If either the quantity to sell textbox is not filled or the selection box is not checked and you press on sell a JavaScript alert will be triggered saying that the required field is empty. On entering non numeric characters for quantity another alert will be triggered. This behavior is similar for the Available Stocks page as well.<br/>
New users can register by clicking the Register button in the login page. In the Registration page the user will enter a user id, user name, password, address and available cash.<br/>
<a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-top" title="top on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">Back to Top</a></p>
<h2><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-ApplicationclassesandJSPpages"></a>Application classes and JSP pages</h2>

<p>The Online Brokerage sample application consists of the following packages:</p>
<ul>
	<li>com.dev.trade.bo
	<ul>
		<li>Stock - Represents the stock of a company.</li>
		<li>User - Represents the user.</li>
		<li>UserStock - Represents the stock owned by a user.</li>
	</ul>
	</li>
</ul>


<ul>
	<li>com.dev.trade.dao
	<ul>
		<li>TradeDAO - Contains all the database access methods.</li>
	</ul>
	</li>
</ul>


<ul>
	<li>com.dev.trade.exception
	<ul>
		<li>DBException - Custom exception class that is thrown for all database exceptions.</li>
	</ul>
	</li>
</ul>


<ul>
	<li>com.dev.trade.servlet
	<ul>
		<li>TradeDispatcherServlet - Dispatches all the requests to the JSPs after performing required database functions.</li>
	</ul>
	</li>
</ul>


<p>The Online Brokerage also includes the following JSP pages:</p>
<ul>
	<li>login.jsp - The login page of the application.</li>
	<li>error.jsp - The default error page of the application.</li>
	<li>register.jsp - The user registration page.</li>
	<li>stocks.jsp - The Available Stocks page from where the user can buy stocks.</li>
	<li>userstocks.jsp - The user portfolio page which shows the user's stocks. The user can sell stocks from this page.</li>
</ul>


<p><a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-top" title="top on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">Back to Top</a></p>

<h2><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-Toolsused"></a>Tools used</h2>

<p>The tools used for developing and building the sample application are:</p>

<h3><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-ApacheAnt"></a>Apache Ant</h3>

<p>Ant is a pure Java build tool. It is used for building the war files and populating the database for the Online Brokerage application. Ant can be downloaded from the following URL:</p>

<p><span class="nobr"><a href="http://ant.apache.org" title="Visit page outside Confluence" rel="nofollow">http://ant.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>

<h3><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-Hibernate"></a>Hibernate</h3>

<p>At the time of writing this article, Hibernate 3.2 is the latest version available and can be downloaded at the following URL:<br/>
<span class="nobr"><a href="http://www.hibernate.org" title="Visit page outside Confluence" rel="nofollow">http://www.hibernate.org<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></p>

<p>Additional documentation on Hibernate may be found at the following URL:<br/>
<span class="nobr"><a href="http://hibernate.org/5.html" title="Visit page outside Confluence" rel="nofollow">http://hibernate.org/5.html<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span><br/>
<span class="nobr"><a href="http://www.hibernate.org/hib_docs/v3/reference/en/html/tutorial.html" title="Visit page outside Confluence" rel="nofollow">http://www.hibernate.org/hib_docs/v3/reference/en/html/tutorial.html<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></p>

<p>Download and install Hibernate, the installation directory will be later referred as <b>&lt;hibernate_home&gt;</b>.</p>

<p><a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-top" title="top on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">Back to Top</a></p>

<h2><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-Sampledatabase"></a>Sample database</h2>

<p>The database used for demonstrating this application is MySQL. The sample database name is <b>adi</b> and it consists of the following three tables, STOCKS, USERS and USERSTOCKS. 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'> STOCKS </td>
<td class='confluenceTd'> ID (PRIMARY KEY) <br clear="all" />
 NAME <br clear="all" />
 PRICE </td>
</tr>
<tr>
<td class='confluenceTd'> USERS </td>
<td class='confluenceTd'> USERID (PRIMARY KEY) <br clear="all" />
 NAME <br clear="all" />
 PASSWORD <br clear="all" />
 ADDRESS <br clear="all" />
 CASH </td>
</tr>
<tr>
<td class='confluenceTd'> USERSTOCKS </td>
<td class='confluenceTd'> ID (PRIMARY KEY) <br clear="all" />
 USERID (PRIMARY KEY) <br clear="all" />
 NAME <br clear="all" />
 PRICE <br clear="all" />
 QUANTITY </td>
</tr>
</tbody></table>
<p>The USERSTOCKS table is used to store the stocks that are owned by each user. The USERS and STOCKS tables are used to store the user and stock details. Because this is just a sample application the amount of money that a user has is entered during user registration by the user itself.</p>

<p>The DDL file used for populating this database is <b>db.sql</b> and it is located in the &lt;brokerage_home&gt;\sql directory.</p>

<p><a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-top" title="top on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">Back to Top</a></p>

<h1><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-TheJBossenvironment"></a>The JBoss environment <a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-JBoss"></a></h1>

<p>This section shows you how and where the sample JBoss reference environment was installed so you can map this scenario to your own implementation.</p>

<p>Detailed instructions for installing, configuring, and managing JBoss are provided in the product documentation. Check the product Web site for the most updated documents.</p>

<p>The following list highlights the general tasks you will need to complete to install and configure the<br/>
initial environment as the starting point for deploying the sample application.</p>
<ol>
	<li>Download and install JBoss v4.2.1 as explained in the product documentation guides. From now on the<br/>
installation directory will be referred as <b>&lt;jboss_home&gt;</b></li>
	<li>Create a copy of the default JBoss v4.2.1 application server. Copy recursively <b>&lt;jboss_home&gt;\server\default</b> to <b>&lt;jboss_home&gt;\server\&lt;your_server_name&gt;</b></li>
	<li>Start the new server by running the <tt><b>run.sh &#45;c &lt;your_server_name&gt;</b></tt> command from the <b>&lt;jboss_home&gt;\bin</b> directory.</li>
	<li>Once the server is started, you can verify that it is running by opening a Web browser and pointing it to this URL: <span class="nobr"><a href="http://localhost:8080" title="Visit page outside Confluence" rel="nofollow">http://localhost:8080<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>. You should see the JBoss Welcome window and be able to access the JBoss console.</li>
	<li>Once the application server is up and running, the next step is to install and configure all the remaining prerequisite software required by the sample application. This step is described in the following section.</li>
</ol>


<h2><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-Installandconfigureprerequisitesoftware"></a>Install and configure prerequisite software</h2>

<p>In order to build and run the Library application included in this article, you need to install and configure the build tool and the database that is used by the application.</p>

<h3><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-Installthedatabase"></a>Install the database</h3>

<p>As mentioned earlier in the article, this application is using the MySQL database that can be downloaded from the following URL:</p>

<p><span class="nobr"><a href="http://www.mysql.com" title="Visit page outside Confluence" rel="nofollow">http://www.mysql.com<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></p>

<p>Note: The appropriate version of the MySQL Connector/J should also be downloaded (3.1, 5.0, or 5.1), depending on your MySQL version.</p>

<p>This MySQL connector must also be placed in &lt;JBOSS_HOME&gt;/server/default/lib.&nbsp;</p>

<p>The Installation and configuration of MySQL is fairly intuitive and it is well documented in the MySQL Reference Manual available at the following URL:</p>

<p><span class="nobr"><a href="http://dev.mysql.com/doc/mysql/en" title="Visit page outside Confluence" rel="nofollow">http://dev.mysql.com/doc/mysql/en<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></p>

<p><b>Note:</b> During the instance configuration I modified the security settings and specified "password" as the password for the root user. This user ID and password will later be used for accessing the database from the sample application.</p>

<h3><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-Createsampledatabase"></a>Create sample database</h3>

<p>Once the MySQL instance is configured you need to create the sample database that will be used by the Library application. From a command line, type the following command to start the MySQL monitor:</p>

<p><tt><b>mysql &#45;u root &#45;ppassword</b></tt></p>

<p>Note that there is no blank between the flag &#45;p and the password.</p>

<p>This will bring up the MySQL command interface as shown in the following example:</p>
<div class="preformatted" style="border-style: solid; "><div class="preformattedHeader" style="border-bottom-style: solid; "><b>MySQL monitor interface</b></div><div class="preformattedContent">
<pre>Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7 to server version: 4.1.14-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql&gt;
</pre>
</div></div>
<p>From the MySQL command interface create the <b>adi</b> sample database by typing the following command:</p>

<p><tt><b>mysql&gt; create database adi;</b></tt></p>

<h3><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-ConfigureAnt"></a>Configure Ant</h3>

<p>As mentioned before, Apache Ant is used to build the binaries for the Online Brokerage application. If you do not have Ant installed this is a good time for doing it and make sure that <b>&lt;ant_home&gt;\bin</b> directory is added to the system's path variable.</p>

<p>Apache Ant can be downloaded from the following URL:</p>

<p><span class="nobr"><a href="http://ant.apache.org" title="Visit page outside Confluence" rel="nofollow">http://ant.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>

<h3><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-ConfigureHibernate"></a>Configure Hibernate</h3>

<p>JBoss comes bundled with Hibernate so there is no need to download separate jars for hibernate.</p>

<p><a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-top" title="top on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">Back to Top</a></p>

<h2><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-Buildthesampleapplication"></a>Build the sample application</h2>

<p>The Online Brokerage application included with this article provides an Ant script that you will use in order to build the application and populate the database. Download the sample application by cliking on <span class="error">&#91;Online Brokerage|^brokerage.zip&#93;</span>.</p>

<p>After extracting the zip file, a brokerage directory is created, throughout the rest of the article we will refer to this directory as <b>&lt;brokerage_home&gt;</b>. In that directory open the <b>build.properties</b> file and edit the properties to match your environment as shown in the following example:</p>
<div class="preformatted" style="border-style: solid; "><div class="preformattedHeader" style="border-bottom-style: solid; "><b>build.properties</b></div><div class="preformattedContent">
<pre>#Replace java.home with your jdk directory
java.home=&lt;java_home&gt;

#Replace jboss.home with the parent directory of lib/j2ee.jar
jboss.home=&lt;jboss_home&gt;/server/&lt;your_server_name&gt;

#Replace geronimo.home with the geronimo home directory.
geronimo.home=&lt;geronimo_home&gt;

#Fully qualified name of the JDBC driver class
db.driver=com.mysql.jdbc.Driver

#database url
db.url=jdbc:mysql://localhost:3306/adi

#database userId
db.userid=root

#database password
db.password=password

#script file for creating the tables
sql.file=sql/db.sql

#location of the jdbc driver jar.
driver.classpath=&lt;mysql-connector_home&gt;/mysql-connector-java-3.1.14-bin.jar

#location of the hibernate jars.
dependency.dir=&lt;hibernate_home&gt;/lib
</pre>
</div></div>
<p>Note that the path to the Hibernate jars defined by the <tt><b>dependency.dir</b></tt> tag are necessary by Geronimo, JBoss comes with it's own copy of Hibernate. Still you will need to copy to that directory the <b>hibernate3.jar</b> file located in the <b>&lt;hibernate_home&gt;</b> directory.</p>
<table cellpadding='5' width='85%' cellspacing='8px' class='noteMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Important:</b> When specifying the paths in this file, make sure you use forward slash "<b>/</b>" otherwise you will get compilation errors.</td></tr></table>
<p>From a command prompt or shell change directory to &lt;brokerage_home&gt; and run the <b>ant</b> command. This will build the war, har and ear files and place them in the <b>&lt;brokerage_home&gt;\jboss-artefact</b> directory. The war created by the <b>ant</b> build contains a JBoss specific deployment descriptor <b>jboss-web.xml</b> file in the WEB-INF directory of the WAR. The HAR contains a JBoss specific <b>hibernate-service.xml</b> file in the META-INF directory and the EAR contains a JBoss specific deployment descriptor <b>jboss-app.xml</b>. These files are shown below.</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>jboss-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>
<span class="code-tag">&lt;jboss-web&gt;</span>
  <span class="code-tag">&lt;context-root&gt;</span>/brokerage<span class="code-tag">&lt;/context-root&gt;</span>
  <span class="code-tag">&lt;resource-ref&gt;</span>
      <span class="code-tag">&lt;res-ref-name&gt;</span>jdbc/HibernateDB<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;jndi-name&gt;</span>jdbc/HibernateDS<span class="code-tag">&lt;/jndi-name&gt;</span>
  <span class="code-tag">&lt;/resource-ref&gt;</span>
<span class="code-tag">&lt;/jboss-web&gt;</span></pre>
</div></div>
<p>The resource-ref element is used to map the resource referred to by the name <b>jdbc/HibernateDB</b> in the web.xml file to the resource with the JNDI name <b>java:jdbc/</b> <b>HibernateDS</b>, for example MySQL datasource.</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>hibernate-service.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>
<span class="code-tag">&lt;server&gt;</span>
    &lt;mbean code=<span class="code-quote">"org.jboss.hibernate.jmx.Hibernate"</span>
           name=<span class="code-quote">"jboss.har:service=Hibernate"</span>&gt;
        <span class="code-tag">&lt;attribute name=<span class="code-quote">"DatasourceName"</span>&gt;</span>java:jdbc/HibernateDS<span class="code-tag">&lt;/attribute&gt;</span>

        <span class="code-tag">&lt;attribute name=<span class="code-quote">"Dialect"</span>&gt;</span>
            org.hibernate.dialect.MySQLDialect
        <span class="code-tag">&lt;/attribute&gt;</span>
        <span class="code-tag">&lt;attribute name=<span class="code-quote">"SessionFactoryName"</span>&gt;</span>
            java:/hibernate/BrokerageSessionFactory
        <span class="code-tag">&lt;/attribute&gt;</span>
        <span class="code-tag">&lt;attribute name=<span class="code-quote">"CacheProviderClass"</span>&gt;</span>
            org.hibernate.cache.HashtableCacheProvider
        <span class="code-tag">&lt;/attribute&gt;</span>
         <span class="code-tag"><span class="code-comment">&lt;!-- &lt;attribute name=<span class="code-quote">"ScanForMappingsEnabled"</span>&gt;</span>true<span class="code-tag">&lt;/attribute&gt;</span> --&gt;</span>
        <span class="code-tag">&lt;attribute name=<span class="code-quote">"ShowSqlEnabled"</span>&gt;</span>true<span class="code-tag">&lt;/attribute&gt;</span>
    <span class="code-tag">&lt;/mbean&gt;</span>
<span class="code-tag">&lt;/server&gt;</span></pre>
</div></div>
<p>This file contains the hibernate properties that need to be set. The property names and their functions are:</p>
<ul>
	<li><b>DatasourceName</b> &#45; The JNDI name of the datasource that Hibernate should use.</li>
	<li><b>Dialect</b> &#45; The SQL Dialect that should be used.</li>
	<li><b>SessionFactoryName</b> &#45; JNDI name to which the session factory should be bound.</li>
	<li><b>CacheProviderClass</b> &#45; The Class of the Cache Provider</li>
	<li><b>ShowSqlEnabled</b> &#45; Show the executed SQL statements in the output.</li>
</ul>


<p>The <b>hibernate-service.xml</b> file should be present in the META-INF directory of the EAR.</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>jboss-app.xml</b></div><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;!DOCTYPE jboss-app PUBLIC <span class="code-quote">"-//JBoss//DTD J2EE Application 1.4//EN"</span> <span class="code-quote">"http://www.jboss.org/j2ee/dtd/jboss-app_4_0.dtd"</span>&gt;</span>
<span class="code-tag">&lt;jboss-app&gt;</span>
    <span class="code-tag">&lt;module&gt;</span>
        <span class="code-tag">&lt;har&gt;</span>brokerage.har<span class="code-tag">&lt;/har&gt;</span>
    <span class="code-tag">&lt;/module&gt;</span>
<span class="code-tag">&lt;/jboss-app&gt;</span></pre>
</div></div>
<p>The <b>jboss-app.xml</b> file located in the META-INF directory of the EAR specifies the name of the har file present in the EAR.</p>

<p>The following example shows the deployment descriptor <b>web.xml</b> used in this application. The <b>web.xml</b> file located in the WEB-INF directory of <tt><b>brokerage.war</b></tt> is the deployment descriptor where you specify, among other things, the servlets name and default JSP for the application.</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> version=<span class="code-quote">"2.4"</span> <span class="code-keyword">xmlns:xsi</span>=<span class="code-quote">"http://www.w3.org/2001/XMLSchema-instance"</span>
xsi:schemaLocation=<span class="code-quote">"http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</span>&gt;
    <span class="code-tag">&lt;display-name&gt;</span>brokerage<span class="code-tag">&lt;/display-name&gt;</span>
    <span class="code-tag">&lt;servlet&gt;</span>
        <span class="code-tag">&lt;display-name&gt;</span>Trade-Dispatcher<span class="code-tag">&lt;/display-name&gt;</span>
        <span class="code-tag">&lt;servlet-name&gt;</span>TradeDispatcher<span class="code-tag">&lt;/servlet-name&gt;</span>
        <span class="code-tag">&lt;servlet-class&gt;</span>com.dev.trade.servlet.TradeDispatcherServlet<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>TradeDispatcher<span class="code-tag">&lt;/servlet-name&gt;</span>
        <span class="code-tag">&lt;url-pattern&gt;</span>/login<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>TradeDispatcher<span class="code-tag">&lt;/servlet-name&gt;</span>
        <span class="code-tag">&lt;url-pattern&gt;</span>/stocks<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>TradeDispatcher<span class="code-tag">&lt;/servlet-name&gt;</span>
        <span class="code-tag">&lt;url-pattern&gt;</span>/userstocks<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>TradeDispatcher<span class="code-tag">&lt;/servlet-name&gt;</span>
        <span class="code-tag">&lt;url-pattern&gt;</span>/buy<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>TradeDispatcher<span class="code-tag">&lt;/servlet-name&gt;</span>
        <span class="code-tag">&lt;url-pattern&gt;</span>/sell<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>TradeDispatcher<span class="code-tag">&lt;/servlet-name&gt;</span>
        <span class="code-tag">&lt;url-pattern&gt;</span>/register<span class="code-tag">&lt;/url-pattern&gt;</span>
    <span class="code-tag">&lt;/servlet-mapping&gt;</span>
    <span class="code-tag">&lt;welcome-file-list&gt;</span>
  <span class="code-tag">&lt;welcome-file&gt;</span>/login.jsp<span class="code-tag">&lt;/welcome-file&gt;</span>
    <span class="code-tag">&lt;/welcome-file-list&gt;</span>
    <span class="code-tag">&lt;error-page&gt;</span>
     <span class="code-tag">&lt;exception-type&gt;</span>javax.servlet.ServletException<span class="code-tag">&lt;/exception-type&gt;</span>
     <span class="code-tag">&lt;location&gt;</span>/error.jsp<span class="code-tag">&lt;/location&gt;</span>
    <span class="code-tag">&lt;/error-page&gt;</span>

    <span class="code-tag">&lt;resource-ref&gt;</span>
        <span class="code-tag">&lt;res-ref-name&gt;</span>jdbc/HibernateDB<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><a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-top" title="top on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">Back to Top</a></p>

<h2><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-Populatesampledata"></a>Populate sample data</h2>

<p>As we mentioned before, the <b>db.sql</b> script is provided to populate the sample data. The location of this file is already defined in the <b>build.properties</b> by the tag <b>sql.file</b>. To populate the sample data simply run the following command from the <b>&lt;brokerage_home&gt;</b> directory.</p>

<p><tt><b>ant populateDB</b></tt></p>

<p><a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-top" title="top on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">Back to Top</a></p>

<h2><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-Deploythesampleapplication"></a>Deploy the sample application</h2>

<p>Before you deploy the sample application you need to configure the datasource required by this application. To deploy the datasource configuration in JBoss copy the <b>mysql-ds.xml</b> file located in the <b>&lt;brokerage_home&gt;\plan</b> directory to the following directory:</p>

<p><tt><b>&lt;jboss_home&gt;\server\&lt;your_server_name&gt;\deploy</b></tt></p>

<p>Similarly to the database deployment, to deploy the Online Brokerage application in JBoss, copy the <b>brokerage.ear</b> file you just built with Ant to the following directory:</p>

<p><tt><b>&lt;jboss_home&gt;\server\&lt;your_server_name&gt;\deploy</b></tt></p>

<p>If JBoss is already started, it will automatically deploy and start the application; otherwise, the application will be deployed and started at the next startup.</p>

<p><a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-top" title="top on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">Back to Top</a></p>

<h2><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-Testthesampleapplication"></a>Test the sample application</h2>

<p>To test the application, open a Web browser and access the following URL:</p>

<p><span class="nobr"><a href="http://localhost:8080/brokerage" title="Visit page outside Confluence" rel="nofollow">http://localhost:8080/brokerage<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></p>

<p>This brings up the login screen of the Online Brokerage application. Enter j2ee as the user name and password as the password and click on login. This takes you to the available stocks page illustrated in the following figure. The application is now configured and running.<span class="error">Unable to render embedded object: File (available.jpg) not found.</span><br/>
<a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-top" title="top on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">Back to Top</a></p>
<h1><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-TheGeronimoenvironment"></a>The Geronimo environment <a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-Geronimo"></a></h1>

<p>Download and install Geronimo from the following URL:</p>

<p><span class="nobr"><a href="http://geronimo.apache.org/downloads.html" title="Visit page outside Confluence" rel="nofollow">http://geronimo.apache.org/downloads.html<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></p>

<p>The release notes available there provide clear instructions on system requirements and how to install and start Geronimo. Throughout the rest of this article we will refer to the Geronimo installation directory as <b>&lt;geronimo_home&gt;</b>.</p>

<p><a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-top" title="top on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">Back to Top</a></p>

<h2><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-ConfigureResources"></a>Configure Resources</h2>

<p>For running the Online Brokerage application in Geronimo, you will be using the same MySQL database that was used with JBoss. So the first task you need to do in order to prepare the Geronimo environment is to configure the data source.</p>

<h3><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-Configurethedatasource"></a>Configure the datasource</h3>

<p>You need to copy the MySQL database driver into the Geronimo repository so that you can refer to it in the data source deployment plan. The Geronimo repository is located in the <b>&lt;geronimo_home&gt;/repository</b> directory. Inside this directory, create a new directory called <b>mysql/jars</b> and copy the <b>mysql-connector-java-3.1.14-bin.jar</b> file into it.</p>

<p>Now, you need to define a data source deployment plan. For your convenience, the sample application already provides a deployment plan called <b>mysql-geronimo-plan.xml</b> located in the <b>&lt;brokerage_home&gt;\plan</b> directory. The following example shows the content of this deployment plan.</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>mysql-geronimo-plan.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>
<span class="code-tag">&lt;connector xmlns=<span class="code-quote">"http://geronimo.apache.org/xml/ns/j2ee/connector-1.2"</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.1"</span>&gt;</span>
    <span class="code-tag">&lt;dep:moduleId&gt;</span>
	  <span class="code-tag">&lt;dep:groupId&gt;</span>user<span class="code-tag">&lt;/dep:groupId&gt;</span>
	  <span class="code-tag">&lt;dep:artifactId&gt;</span>database-pool-HibernateDB<span class="code-tag">&lt;/dep:artifactId&gt;</span>
	  <span class="code-tag">&lt;dep:version&gt;</span>2.0<span class="code-tag">&lt;/dep:version&gt;</span>
	  <span class="code-tag">&lt;dep:type&gt;</span>car<span class="code-tag">&lt;/dep:type&gt;</span>
	<span class="code-tag">&lt;/dep:moduleId&gt;</span>
	<span class="code-tag">&lt;dep:dependencies&gt;</span>
	  &lt;dep:dependency
	    <span class="code-tag">&lt;dep:groupId&gt;</span>mysql<span class="code-tag">&lt;/dep:groupId&gt;</span>
		<span class="code-tag">&lt;dep:artifactId&gt;</span>mysql-connector-java<span class="code-tag">&lt;/dep:artifactId&gt;</span>
		<span class="code-tag">&lt;dep:version&gt;</span>3.1.14-bin<span class="code-tag">&lt;/dep:version&gt;</span>
		<span class="code-tag">&lt;dep:type&gt;</span>jar<span class="code-tag">&lt;/dep:type&gt;</span>
	  <span class="code-tag">&lt;/dep:dependency&gt;</span>
	<span class="code-tag">&lt;/dep:dependencies&gt;</span>
  <span class="code-tag">&lt;/dep:environment&gt;</span>
  <span class="code-tag">&lt;resourceadapter&gt;</span>
    <span class="code-tag">&lt;outbound-resourceadapter&gt;</span>
      <span class="code-tag">&lt;connection-definition&gt;</span>
        <span class="code-tag">&lt;connectionfactory-interface&gt;</span>javax.sql.DataSource<span class="code-tag">&lt;/connectionfactory-interface&gt;</span>
        <span class="code-tag">&lt;connectiondefinition-instance&gt;</span>
          <span class="code-tag">&lt;name&gt;</span>HibernateDS<span class="code-tag">&lt;/name&gt;</span>
          <span class="code-tag">&lt;config-property-setting name=<span class="code-quote">"Password"</span>&gt;</span>password<span class="code-tag">&lt;/config-property-setting&gt;</span>
          <span class="code-tag">&lt;config-property-setting name=<span class="code-quote">"CommitBeforeAutocommit"</span>&gt;</span>false<span class="code-tag">&lt;/config-property-setting&gt;</span>
          <span class="code-tag">&lt;config-property-setting name=<span class="code-quote">"Driver"</span>&gt;</span>com.mysql.jdbc.Driver<span class="code-tag">&lt;/config-property-setting&gt;</span>
          <span class="code-tag">&lt;config-property-setting name=<span class="code-quote">"ExceptionSorterClass"</span>&gt;</span>org.tranql.connector.AllExceptionsAreFatalSorter<span class="code-tag">&lt;/config-property-setting&gt;</span>
          <span class="code-tag">&lt;config-property-setting name=<span class="code-quote">"UserName"</span>&gt;</span>root<span class="code-tag">&lt;/config-property-setting&gt;</span>
          <span class="code-tag">&lt;config-property-setting name=<span class="code-quote">"ConnectionURL"</span>&gt;</span>jdbc:mysql://localhost:3306/adi<span class="code-tag">&lt;/config-property-setting&gt;</span>
          <span class="code-tag">&lt;connectionmanager&gt;</span>
            <span class="code-tag">&lt;local-transaction/&gt;</span>
            <span class="code-tag">&lt;single-pool&gt;</span>
              <span class="code-tag">&lt;max-size&gt;</span>10<span class="code-tag">&lt;/max-size&gt;</span>
              <span class="code-tag">&lt;min-size&gt;</span>0<span class="code-tag">&lt;/min-size&gt;</span>
              <span class="code-tag">&lt;blocking-timeout-milliseconds&gt;</span>5000<span class="code-tag">&lt;/blocking-timeout-milliseconds&gt;</span>
              <span class="code-tag">&lt;idle-timeout-minutes&gt;</span>30<span class="code-tag">&lt;/idle-timeout-minutes&gt;</span>
              <span class="code-tag">&lt;match-one/&gt;</span>
            <span class="code-tag">&lt;/single-pool&gt;</span>
          <span class="code-tag">&lt;/connectionmanager&gt;</span>
        <span class="code-tag">&lt;/connectiondefinition-instance&gt;</span>
      <span class="code-tag">&lt;/connection-definition&gt;</span>
    <span class="code-tag">&lt;/outbound-resourceadapter&gt;</span>
  <span class="code-tag">&lt;/resourceadapter&gt;</span>
<span class="code-tag">&lt;/connector&gt;</span></pre>
</div></div>
<p>Now that you have a deployment plan and have copied the drivers the next step is to acutally deploy the datasource connection pool. If you have not yet started Geronimo please do so by running the following command:</p>

<p><tt><b>&lt;geronimo_home&gt;\bin\geronimo start</b></tt></p>

<p>To deploy the datasource connection pool run the following command:</p>

<p><tt><b>&lt;geronimo_home&gt;\bin\deploy &#45;-user system &#45;-password manager deploy &lt;brokerage_home&gt;\plan\mysql-geronimo-plan.xml ..\repository\org\tranql\tranql-connector-ra\1.3\tranql-connector-ra-1.3.rar</b></tt></p>

<p>Depending on your environment you should see a confirmation message similar to this one:</p>
<div class="preformatted" style="border-style: solid; "><div class="preformattedContent" style="background-color: #FFFFFF; ">
<pre>C:\geronimo-2.0\bin&gt;deploy --user system --password manager deploy \brokerage\plan\mysql-geronimo-plan.xml
..\repository\org\tranql\tranql-connector-ra\1.3\tranql-connector-ra-1.3.rar
    Deployed user/database-pool-HibernateDS/2.0/car
</pre>
</div></div>
<p><font color="white">&nbsp;</font></p>

<p><a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-top" title="top on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">Back to Top</a></p>

<h1><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-Stepbystepmigration"></a>Step-by-step migration <a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-migration"></a></h1>

<p>Apache Geronimo does not support HAR archives so we will be having all the classes inside a WAR archive. We need to write two classes for making the application work on Geronimo. One is a TransactionManagerLookup class for Geronimo and the other is a utility class HibernateUtil to get the SessionFactory. In addition to this we will need to make some changes to the TradeDispatcherServlet and TradeDAO classes.</p>

<p>As a first step we will see the changes that need to be made to the application as illustrated in the following list.</p>

<p><a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-TradeDAO" title="TradeDAO on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">TradeDAO</a><br/>
<a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-HibernateUtil" title="HibernateUtil on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">HibernateUtil</a><br/>
<a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-TradeDispatcherServlet" title="TradeDispatcherServlet on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">TradeDispatcherServlet</a></p>

<h3><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-TradeDAO"></a>TradeDAO <a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-TradeDAO"></a></h3>

<p>In JBoss the HibernateMBean will create and bind the SessionFactory to the Global JNDI Context. So we can obtain the SessionFactory through a simple lookup. We can then get the session from the SessionFactory.</p>

<p><tt>TradeDAO.java</tt> is located in the <tt>&lt;brokerage_home&gt;/src/com/dev/trade/dao</tt> directory.</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>Excerpt from TradeDAO.java for JBoss</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> com.dev.trade.dao;

<span class="code-keyword">import</span> java.sql.Connection;
<span class="code-keyword">import</span> java.sql.SQLException;
<span class="code-keyword">import</span> java.util.ArrayList;
<span class="code-keyword">import</span> java.util.Iterator;
<span class="code-keyword">import</span> java.util.List;
<span class="code-keyword">import</span> java.util.Set;

<span class="code-keyword">import</span> javax.naming.InitialContext;
<span class="code-keyword">import</span> javax.naming.NamingException;

<span class="code-keyword">import</span> org.hibernate.Query;
<span class="code-keyword">import</span> org.hibernate.Session;
<span class="code-keyword">import</span> org.hibernate.SessionFactory;

<span class="code-keyword">import</span> com.dev.trade.bo.Stock;
<span class="code-keyword">import</span> com.dev.trade.bo.User;
<span class="code-keyword">import</span> com.dev.trade.bo.UserStock;
<span class="code-keyword">import</span> com.dev.trade.exception.DBException;
<span class="code-keyword">import</span> com.dev.trade.util.HibernateUtil;

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

	SessionFactory factory  = <span class="code-keyword">null</span>;
	Session session = <span class="code-keyword">null</span>;

	<span class="code-keyword">public</span> TradeDAO() <span class="code-keyword">throws</span> Exception {

		<span class="code-keyword">try</span> {
			InitialContext ctx = <span class="code-keyword">new</span> InitialContext();
		    factory  = (SessionFactory)ctx.lookup(<span class="code-quote">"java:hibernate/BrokerageSessionFactory"</span>);

		} <span class="code-keyword">catch</span> (NamingException e1) {
			<span class="code-comment">// TODO Auto-generated <span class="code-keyword">catch</span> block
</span>			e1.printStackTrace();
		}
	}

	<span class="code-keyword">public</span> User getUserByUserId(<span class="code-object">String</span> userId) <span class="code-keyword">throws</span> DBException {

		session = factory.getCurrentSession();
		Query q = session.createQuery(<span class="code-quote">"from User u where u.userId=:userId"</span>);
		q.setString(<span class="code-quote">"userId"</span>, userId);
		<span class="code-keyword">return</span> (User) q.uniqueResult();

	}
	...</pre>
</div></div>
<p>In Geronimo we will write a new utility class to create the SessionFactory, this class will be the HibernateUtil class. It has a method getCurrentSession() that will return the session.</p>

<p>Modify the first part of <tt>TradeDAO.java</tt> to match the changes in the following excerpt.</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>Excerpt from TradeDAO.java for Geronimo</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> com.dev.trade.dao;

<span class="code-keyword">import</span> java.sql.Connection;
<span class="code-keyword">import</span> java.sql.SQLException;
<span class="code-keyword">import</span> java.util.ArrayList;
<span class="code-keyword">import</span> java.util.Iterator;
<span class="code-keyword">import</span> java.util.List;
<span class="code-keyword">import</span> java.util.Set;

<span class="code-keyword">import</span> org.hibernate.Query;
<span class="code-keyword">import</span> org.hibernate.Session;

<span class="code-keyword">import</span> com.dev.trade.bo.Stock;
<span class="code-keyword">import</span> com.dev.trade.bo.User;
<span class="code-keyword">import</span> com.dev.trade.bo.UserStock;
<span class="code-keyword">import</span> com.dev.trade.exception.DBException;
<span class="code-keyword">import</span> com.dev.trade.util.HibernateUtil;

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


      Session session = <span class="code-keyword">null</span>;

       <span class="code-keyword">public</span> TradeDAO() <span class="code-keyword">throws</span> Exception {

        }

       <span class="code-keyword">public</span> User getUserByUserId(<span class="code-object">String</span> userId) <span class="code-keyword">throws</span> DBException {

            session = HibernateUtil.getCurrentSession();
                Query q = session.createQuery(<span class="code-quote">"from User u where u.userId=:userId"</span>);
                q.setString(<span class="code-quote">"userId"</span>, userId);
              <span class="code-keyword">return</span> (User) q.uniqueResult();

       }
       ...</pre>
</div></div>
<p>Do a search and replace, look for the following string:</p>

<p><tt><b>factory.getCurrentSession()</b></tt></p>

<p>and replace it with</p>

<p><tt><b>HibernateUtil.getCurrentSession()</b></tt></p>

<p><em>You should count 9 replacements.</em></p>

<p>This difference in obtaining the session will be the main change in the codebase for the application to run in Apache Geronimo.</p>

<h3><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-HibernateUtil"></a>HibernateUtil <a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-HibernateUtil"></a></h3>

<p>As mentioned above we will use this class to create the SessionFactory and provide the application with Hibernate sessions. The source code for the class is given below</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>HibernateUtil.java for Geronimo</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> com.dev.trade.util;

<span class="code-keyword">import</span> org.hibernate.HibernateException;
<span class="code-keyword">import</span> org.hibernate.Session;
<span class="code-keyword">import</span> org.hibernate.cfg.Configuration;

/**
 * Configures and provides access to Hibernate sessions, tied to the
 * current thread of execution.  Follows the <span class="code-object">Thread</span> Local Session
 * pattern, see {@link http:<span class="code-comment">//hibernate.org/42.html}.
</span> */
<span class="code-keyword">public</span> class HibernateUtil {

    /** location of the Hibernate Configuration File */
    <span class="code-keyword">private</span> <span class="code-keyword">static</span> <span class="code-object">String</span> CONFIG_FILE_LOCATION = <span class="code-quote">"hibernate.cfg.xml"</span>;

    /** Holds a single instance of Session */
    <span class="code-keyword">private</span> <span class="code-keyword">static</span> <span class="code-keyword">final</span> ThreadLocal threadLocal = <span class="code-keyword">new</span> ThreadLocal();

    /** The single instance of hibernate configuration */
    <span class="code-keyword">private</span> <span class="code-keyword">static</span> <span class="code-keyword">final</span> Configuration cfg = <span class="code-keyword">new</span> Configuration();

    /** The single instance of hibernate SessionFactory */
    <span class="code-keyword">private</span> <span class="code-keyword">static</span> org.hibernate.SessionFactory sessionFactory;

    /**
     * Returns the ThreadLocal Session instance.  Lazy initialize
     * the &lt;code&gt;SessionFactory&lt;/code&gt; <span class="code-keyword">if</span> needed.
     *
     *  @<span class="code-keyword">return</span> Session
     *  @<span class="code-keyword">throws</span> HibernateException
     */
    <span class="code-keyword">public</span> <span class="code-keyword">static</span> Session getCurrentSession() <span class="code-keyword">throws</span> HibernateException {
        Session session = (Session) threadLocal.get();

        <span class="code-keyword">if</span> (session == <span class="code-keyword">null</span> || ! session.isConnected()) {
            <span class="code-keyword">if</span> (sessionFactory == <span class="code-keyword">null</span>) {
                <span class="code-keyword">try</span> {
                    cfg.configure(CONFIG_FILE_LOCATION);
                    sessionFactory = cfg.buildSessionFactory();
                }
                <span class="code-keyword">catch</span> (Exception e) {
                    <span class="code-object">System</span>.err.println(<span class="code-quote">"%%%% Error Creating SessionFactory %%%%"</span>);
                    e.printStackTrace();
                }
            }
            session = sessionFactory.openSession();
            threadLocal.set(session);
        }

        <span class="code-keyword">return</span> session;
    }

    /**
     *  Close the single hibernate session instance.
     *
     *  @<span class="code-keyword">throws</span> HibernateException
     */
    <span class="code-keyword">public</span> <span class="code-keyword">static</span> void closeSession() <span class="code-keyword">throws</span> HibernateException {
        Session session = (Session) threadLocal.get();


        <span class="code-keyword">if</span> (session != <span class="code-keyword">null</span>) {
            session.close();
        }
    }



}</pre>
</div></div>
<p><tt>HibernateUtil.java</tt> is located in the <tt>&lt;brokerage_home&gt;/src/com/dev/trade/util</tt> directory. For your convenience, a copy of this file is already provided with the sample application.</p>

<h3><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-TradeDispatcherServlet"></a>TradeDispatcherServlet <a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-TradeDispatcherServlet"></a></h3>

<p>In this class there will also be a difference in getting the SessionFactory. In JBoss we get it from the JNDI Context but in Geronimo we will get it through the utility class.</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>doGet method for JBoss</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">protected</span> void doGet(HttpServletRequest request,
   HttpServletResponse response) <span class="code-keyword">throws</span> ServletException, IOException {

   Session hsession = <span class="code-keyword">null</span>;
   <span class="code-keyword">try</span> {
         InitialContext ctx = <span class="code-keyword">new</span> InitialContext();
         SessionFactory factory  =  (SessionFactory)ctx.lookup(<span class="code-quote">"java:hibernate/BrokerageSessionFactory"</span>);
         hsession = factory.openSession();
       } <span class="code-keyword">catch</span> (NamingException e1) {
            e1.printStackTrace();
       }

    Transaction tr = hsession.beginTransaction();</pre>
</div></div>
<p><tt>TradeDispatcherServlet.java</tt> is located in the <tt>&lt;brokerage_home&gt;/src/com/dev/trade/servlet</tt> directory. Replace the doGet method for the one shown in the following example.</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>doGet method for Geronimo</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">protected</span> void doGet(HttpServletRequest request,
    HttpServletResponse response) <span class="code-keyword">throws</span> ServletException, IOException {

    Transaction tr = HibernateUtil.getCurrentSession().getTransaction();
    tr.begin();</pre>
</div></div>
<p>Hibernate comes with transaction manager lookup classes for many application servers. Unfortunately Hibernate 3.2 does not have a lookup class specific for Apache Geronimo, so we need to write our own. The code for the Geronimo specific transaction manager lookup is shown in the following example.</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>GeronimoTransactionManagerLookup</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> org.hibernate.transaction;

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

<span class="code-keyword">import</span> javax.transaction.TransactionManager;
<span class="code-keyword">import</span> org.hibernate.HibernateException;
<span class="code-keyword">import</span> org.hibernate.transaction.TransactionManagerLookup;

<span class="code-keyword">import</span> org.apache.geronimo.gbean.AbstractName;
<span class="code-keyword">import</span> org.apache.geronimo.gbean.AbstractNameQuery;
<span class="code-keyword">import</span> org.apache.geronimo.kernel.Kernel;
<span class="code-keyword">import</span> org.apache.geronimo.kernel.KernelRegistry;
<span class="code-keyword">import</span> org.apache.geronimo.kernel.proxy.ProxyManager;

<span class="code-keyword">public</span> class GeronimoTransactionManagerLookup <span class="code-keyword">implements</span>
        TransactionManagerLookup {

    <span class="code-keyword">public</span> <span class="code-keyword">static</span> <span class="code-keyword">final</span> <span class="code-object">String</span> UserTransactionName = <span class="code-quote">"java:comp/UserTransaction"</span>;

    <span class="code-keyword">public</span> TransactionManager getTransactionManager(Properties props) <span class="code-keyword">throws</span> HibernateException {
       /*
         * <span class="code-keyword">try</span> { Kernel kernel = KernelRegistry.getSingleKernel(); ProxyManager
         * proxyManager = kernel.getProxyManager(); AbstractNameQuery query =
         * <span class="code-keyword">new</span> AbstractNameQuery(TransactionManager.class.getName()); Set names =
         * kernel.listGBeans(query); AbstractName name = <span class="code-keyword">null</span>; <span class="code-keyword">for</span> (Iterator it =
         * names.iterator(); it.hasNext();) name = (AbstractName) it.next();
         * <span class="code-object">Object</span> transMg = (<span class="code-object">Object</span>) proxyManager.createProxy(name,
         * TransactionManager.class); <span class="code-keyword">return</span> (TransactionManager)transMg; }<span class="code-keyword">catch</span>
         * (Exception e) { e.printStackTrace(); <span class="code-object">System</span>.out.println(); <span class="code-keyword">throw</span> <span class="code-keyword">new</span>
         * HibernateException(<span class="code-quote">"Geronimo Transaction Manager Lookup Failed"</span>, e); }
         */
       <span class="code-keyword">try</span> {
       Kernel kernel = KernelRegistry.getSingleKernel();
       AbstractNameQuery query = <span class="code-keyword">new</span> AbstractNameQuery(TransactionManager.class.getName ());
       Set&lt;AbstractName&gt; names = kernel.listGBeans(query);
       <span class="code-keyword">if</span> (names.size() != 1) {
           <span class="code-keyword">throw</span> <span class="code-keyword">new</span> IllegalStateException(<span class="code-quote">"Expected one transaction manager, not "</span> + names.size());
       }
       AbstractName name = names.iterator().next();
       TransactionManager transMg = (TransactionManager)
       kernel.getGBean(name);
       <span class="code-keyword">return</span> (TransactionManager)transMg;
       } <span class="code-keyword">catch</span> (Exception e) {
           e.printStackTrace();
           <span class="code-object">System</span>.out.println();
           <span class="code-keyword">throw</span> <span class="code-keyword">new</span> HibernateException(<span class="code-quote">"Geronimo Transaction Manager Lookup Failed"</span>, e);
       }
   }

    <span class="code-keyword">public</span> <span class="code-object">String</span> getUserTransactionName() {
        <span class="code-keyword">return</span> UserTransactionName;
    }
}</pre>
</div></div>
<p>For your convenience this class is already provided in the <tt>&lt;brokerage_home&gt;/TransactionManager</tt> directory. Create the following directory structure and copy the <tt>GeronimoTransactionManagerLookup.java</tt> there.</p>

<p>&#42;<tt>brokerage_home&gt;/src/org/hibernate/transaction</tt></p>

<p>Now you need to create the hibernate configuration file hibernate-cfg.xml. Inside this file you will specify the required hibernate configuration attributes. Note that the <tt>hibernate-service.xml</tt> in JBoss is for doing the same thing. For your convenience this file is also provided with the sample application in the <tt>&lt;brokerage_home&gt;/hibrenate</tt> directory.</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>hibernate-cfg.xml</b></div><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;?xml version='1.0' encoding='utf-8'?&gt;</span>
&lt;!DOCTYPE hibernate-configuration PUBLIC
        <span class="code-quote">"-//Hibernate/Hibernate Configuration DTD 3.0//EN"</span>
        <span class="code-quote">"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"</span>&gt;

<span class="code-tag">&lt;hibernate-configuration&gt;</span>
 <span class="code-tag">&lt;session-factory&gt;</span>
 <span class="code-tag"><span class="code-comment">&lt;!-- properties --&gt;</span></span>
 <span class="code-tag">&lt;property name=<span class="code-quote">"connection.datasource"</span>&gt;</span>java:comp/env/jdbc/HibernateDB<span class="code-tag">&lt;/property&gt;</span>
 <span class="code-tag">&lt;property name=<span class="code-quote">"hibernate.transaction.manager_lookup_class"</span>&gt;</span>
    org.hibernate.transaction.GeronimoTransactionManagerLookup
 <span class="code-tag">&lt;/property&gt;</span>

  <span class="code-tag">&lt;property name=<span class="code-quote">"hibernate.dialect"</span>&gt;</span>org.hibernate.dialect.MySQLDialect<span class="code-tag">&lt;/property&gt;</span>

 <span class="code-tag"><span class="code-comment">&lt;!-- Disable the second-level cache  --&gt;</span></span>
<span class="code-tag">&lt;property name=<span class="code-quote">"hibernate.cache.provider_class"</span>&gt;</span>org.hibernate.cache.NoCacheProvider<span class="code-tag">&lt;/property&gt;</span>
<span class="code-tag">&lt;property name=<span class="code-quote">"hibernate.current_session_context_class"</span>&gt;</span>org.hibernate.context.JTASessionContext<span class="code-tag">&lt;/property&gt;</span>
 <span class="code-tag"><span class="code-comment">&lt;!-- Echo all executed SQL to stdout --&gt;</span></span>
 <span class="code-tag">&lt;property name=<span class="code-quote">"hibernate.show_sql"</span>&gt;</span>true<span class="code-tag">&lt;/property&gt;</span>

 <span class="code-tag"><span class="code-comment">&lt;!-- Drop and re-create the database schema on startup --&gt;</span></span>
<span class="code-tag"><span class="code-comment">&lt;!--&lt;property name=<span class="code-quote">"hibernate.hbm2ddl.auto"</span>&gt;</span>create<span class="code-tag">&lt;/property&gt;</span> --&gt;</span>

 <span class="code-tag"><span class="code-comment">&lt;!-- mapping files --&gt;</span></span>
 <span class="code-tag">&lt;mapping resource=<span class="code-quote">"Stock.hbm.xml"</span>/&gt;</span>
 <span class="code-tag">&lt;mapping resource=<span class="code-quote">"UserStock.hbm.xml"</span>/&gt;</span>
 <span class="code-tag">&lt;mapping resource=<span class="code-quote">"User.hbm.xml"</span>/&gt;</span>

 <span class="code-tag">&lt;/session-factory&gt;</span>
<span class="code-tag">&lt;/hibernate-configuration&gt;</span></pre>
</div></div>
<p>Additional details for the specific functions of each of these properties can be found in the hibernate manual.</p>

<p>One last step before building is to create a <b>geronimo-web.xml</b> file which is the Geronimo specific deployment descriptor as illustrated in the following example. Once again, for your convenience this file is also provided with the sample application in the <tt>&lt;brokerage_home&gt;/web/descriptors/geronimo</tt> directory.</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">"ISO-8859-1"</span>?&gt;</span>
<span class="code-tag">&lt;web-app xmlns=<span class="code-quote">"http://geronimo.apache.org/xml/ns/j2ee/web-1.1"</span> <span class="code-keyword">xmlns:naming</span>=<span class="code-quote">"http://geronimo.apache.org/xml/ns/naming-1.1"</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.1"</span>&gt;</span>
	    <span class="code-tag">&lt;dep:moduleId&gt;</span>
		    <span class="code-tag">&lt;dep:groupId&gt;</span>BrokerageApp<span class="code-tag">&lt;/dep:groupId&gt;</span>
			<span class="code-tag">&lt;dep:artifactId&gt;</span>MySqlDS<span class="code-tag">&lt;/dep:artifactId&gt;</span>
			<span class="code-tag">&lt;dep:version&gt;</span>2.0<span class="code-tag">&lt;/dep:version&gt;</span>
			<span class="code-tag">&lt;dep:type&gt;</span>car<span class="code-tag">&lt;/dep:type&gt;</span>
		<span class="code-tag">&lt;/dep:moduleId&gt;</span>

		<span class="code-tag">&lt;dep:dependencies&gt;</span>
		    <span class="code-tag">&lt;dep:dependency&gt;</span>
		        <span class="code-tag">&lt;dep:groupId&gt;</span>user<span class="code-tag">&lt;/dep:groupId&gt;</span>
			    <span class="code-tag">&lt;dep:artifactId&gt;</span>database-pool-HibernateDB<span class="code-tag">&lt;/dep:artifactId&gt;</span>
			    <span class="code-tag">&lt;dep:version&gt;</span>2.0<span class="code-tag">&lt;/dep:version&gt;</span>
			    <span class="code-tag">&lt;dep:type&gt;</span>car<span class="code-tag">&lt;/dep:type&gt;</span>
			<span class="code-tag">&lt;/dep:dependency&gt;</span>
		<span class="code-tag">&lt;/dep:dependencies&gt;</span>

		<span class="code-tag">&lt;dep:hidden-classes&gt;</span>
		    <span class="code-tag">&lt;dep:filter&gt;</span>org.springframework<span class="code-tag">&lt;/dep:filter&gt;</span>
			<span class="code-tag">&lt;dep:filter&gt;</span>META-INF/spring<span class="code-tag">&lt;/dep:filter&gt;</span>
			<span class="code-tag"><span class="code-comment">&lt;!--dep:filter&gt;</span>antlr<span class="code-tag">&lt;/dep:filter--&gt;</span></span>
		<span class="code-tag">&lt;/dep:hidden-classes&gt;</span>
	<span class="code-tag">&lt;/dep:environment&gt;</span>

	<span class="code-tag">&lt;context-root&gt;</span>/brokerage<span class="code-tag">&lt;/context-root&gt;</span>

    <span class="code-tag">&lt;resource-ref&gt;</span>
        <span class="code-tag">&lt;ref-name&gt;</span>jdbc/HibernateDB<span class="code-tag">&lt;/ref-name&gt;</span>
        <span class="code-tag">&lt;resource-link&gt;</span>HibernateDS<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>The <tt>&lt;hidden-classes&gt;</tt> element is for preventing certain classes that come with Apache Geronimo from being visible to the war classloader which may result in version problems.</p>

<p><a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-top" title="top on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">Back to Top</a></p>

<h2><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-Buildthemigratedsampleapplication"></a>Build the migrated sample application</h2>

<p>To build the application run the following commands</p>
<ul>
	<li>Add the hibernate jar to the classpath. You will now need to build hibernate with the <tt>GeronimoTransactionManagerLookup</tt> class. If you have not downloaded the hibernate source you can compile the class after putting the hibernate jar in the classpath and then manually add that class to the hibernate jar file.<br/>
<tt><b>set CLASSPATH=%CLASSPATH%;&lt;hibernate_home&gt;/lib/hibernate3.jar</b></tt></li>
	<li>Add the Geronimo kernel to your classpath<br/>
<tt><b>set CLASSPATH=%CLASSPATH%;&lt;geronimo_home&gt;/lib/geronimo-kernel-2.0.1.jar</b></tt></li>
</ul>


<ul>
	<li>To add the class manually, although not needed for this particular sample, you can use the tool of your preference and add the GeronimoTransactionManagerLookup.class to the <tt>org\hibernate\transaction</tt> directory in the <tt>hibernate_home&gt;/lib/hibernate3.jar</tt> file.</li>
</ul>


<ul>
	<li>Now build the migrated application by running the following command:</li>
</ul>


<p><tt><b>&lt;brokerage_home&gt;/ant war</b></tt></p>

<p>Note that we are just building the <b>war</b> target because the Online Brokerage sample application is just a web application. In the JBoss section we used an <b>ear</b> to package the <b>war</b> and the <b>har</b>, this last one is not supported by Apache Geronimo.</p>

<p>This will create a <b>brokerage.war</b> file in the <b>&lt;brokerage_home&gt;/geronimo-artefact</b> directory.</p>

<p>The <b>&lt;brokerage_home&gt;/solutions</b> directory has the source files already migrated to compile for and run in Apache Geronimo.</p>

<p><a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-top" title="top on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">Back to Top</a></p>

<h2><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-Deploythemigratedsampleapplication"></a>Deploy the migrated sample application</h2>

<p>To deploy the migrated Online Brokerage application, make sure the Geronimo server is up and running and run the following command:</p>

<p><tt><b>deploy &#45;-user system &#45;-password manager deploy &lt;brokerage_home&gt;/geronimo-artefact/brokerage.war</b></tt></p>

<p>Once the application is deployed, open a Web browser and access the following URL:</p>

<p><span class="nobr"><a href="http://localhost:8080/brokerage" title="Visit page outside Confluence" rel="nofollow">http://localhost:8080/brokerage<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></p>

<p>Login with the same user name and password you used when testing the application from JBoss.</p>

<p><a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-top" title="top on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">Back to Top</a></p>

<h1><a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-Summary"></a>Summary <a name="JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-summary"></a></h1>

<p>This article has shown you how to migrate a sample application that uses Hibernate as its O/R mapping layer, from JBoss to the Apache Geronimo application server. Some of the features/functionalities already provided by JBoss may not yet be implemented in Geronimo, as a consequence some minor additional coding may be required but the overall migration complexity is low.</p>

<p><a href="#JBosstoGeronimo-HibernateMigration%28Unverifiedon2.1%29-top" title="top on JBoss to Geronimo - Hibernate Migration (Unverified on 2.1)">Back to Top</a></p></div>


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

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

</div>

</body>
</html>


Mime
View raw message