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.0 - JA: 4.6. JBoss to Geronimo - Hibernate の移行 (page edited)
Date Mon, 21 Apr 2008 23:57:00 GMT
<html>
<head>
    <base href="http://cwiki.apache.org/confluence" />
    <style type="text/css">
    <!--
    body, p, td, table, tr, .bodytext, .stepfield {
	font-family: Verdana, arial, sans-serif;
	font-size: 11px;
	line-height: 16px;
	color: #000000;
	font-weight: normal;
}
#PageContent {
	text-align: left;
	background-color: #fff;
	padding: 0px;
	margin: 0px;
    padding-bottom:20px;
}
/*
** when this stylesheet is used for the Tiny MCE Wysiwyg editor's edit area, we can't
** use an id=PageContent or class=wiki-content, so we must
** set the body style to that used for PageContent, and p to that used for wiki-content.
*/

body {
	margin: 0px;
	padding: 0px;
	text-align: center;
    background-color: #f0f0f0;
}

@media print {

body {
    background-color: #fff;
}

}

.monospaceInput {
    font:12px monospace
}

.wiki-content p, .commentblock p {
    margin: 16px 0px 16px 0px;
    padding: 0px;
}

.wiki-content-preview {
    padding: 5px;
    border-left: 1px solid #3c78b5;
    border-right: 1px solid #3c78b5;
}

ul, ol {
    margin-top: 2px;
    margin-bottom: 2px;
    padding-top: 0px;
    padding-bottom: 0px;
}

pre {
    padding: 0px;
    margin-top: 5px;
    margin-left: 15px;
    margin-bottom: 5px;
    margin-right: 5px;
    text-align: left;
}

.helpheading {
    font-weight: bold;
    background-color: #D0D9BD;
        border-bottom: 1px solid #3c78b5;
        padding: 4px 4px 4px 4px;
        margin: 0px;
        margin-top: 10px;
}
.helpcontent {
        padding: 4px 4px 20px 4px;
    background-color: #f5f7f1;
}

.code {
 	border: 1px dashed #3c78b5;
    font-size: 11px;
	font-family: Courier;
    margin: 10px;
	line-height: 13px;
}

.focusedComment {
    background: #ffffce;
}

.commentBox, .focusedComment {
    padding: 10px;
    margin: 5px 0 5px 0;
    border: 1px #bbb solid;
}

.codeHeader {
    background-color: #f0f0f0;
 	border-bottom: 1px dashed #3c78b5;
    padding: 3px;
	text-align: center;
}

.codeContent {
    text-align: left;
    background-color: #f0f0f0;
    padding: 3px;
}

.preformatted {
 	border: 1px dashed #3c78b5;
    font-size: 11px;
	font-family: Courier;
    margin: 10px;
	line-height: 13px;
}

.preformattedHeader {
    background-color: #f0f0f0;
 	border-bottom: 1px dashed #3c78b5;
    padding: 3px;
	text-align: center;
}

.preformattedContent {
    background-color: #f0f0f0;
    padding: 3px;
}

.panel {
 	border: 1px dashed #3c78b5;
    margin: 10px;
    margin-top: 0px;
}

.panelHeader {
    background-color: #f0f0f0;
 	border-bottom: 1px dashed #3c78b5;
    padding: 3px;
	text-align: center;
}

.panelContent {
    background-color: #f0f0f0;
    padding: 5px;
}

.anonymousAlert {
    background-color: #f0f0f0;
 	border: 1px dashed red;
    font-size: 11px;
    padding: 10px 5px 10px 5px;
    margin: 4px;
	line-height: 13px;
}

.lockAlert {
    background-color: #f0f0f0;
    width: 50%;
 	border: 1px dashed red;
    font-size: 11px;
    padding: 10px 5px 10px 5px;
    margin: 4px;
	line-height: 13px;
}


.code-keyword {
  color: #000091;
  background-color: inherit;
}

.code-object {
  color: #910091;
  background-color: inherit;
}

.code-quote {
  color: #009100;
  background-color: inherit;
}

.code-comment {
  color: #808080;
  background-color: inherit;
}


.code-xml .code-keyword {
  color: inherit;
  font-weight: bold;
}

.code-tag {
  color: #000091;
  background-color: inherit;
}

.breadcrumbs {
    background-color: #f0f0f0;
 	border-color: #3c78b5;
	border-width: 1px 0px 1px 0px;
	border-style: solid;
    font-size: 11px;
    padding: 3px 0px 3px 0px;
}

.navmenu {
    border: 1px solid #ccc;
}

.menuheading {
    font-weight: bold;
    background-color: #f0f0f0;
 	border-bottom: 1px solid #3c78b5;
	padding: 4px 4px 2px 4px;
}

.menuitems {
	padding: 4px 4px 20px 4px;
}

.rightpanel {
    border-left: 1px solid #ccc;
    border-bottom: 1px solid #ccc;
}

#helpheading {
    text-align: left;
    font-weight: bold;
    background-color: #D0D9BD;
 	border-bottom: 1px solid #3c78b5;
	padding: 4px 4px 4px 4px;
	margin: 0px;
}
#helpcontent {
	padding: 4px 4px 4px 4px;
    background-color: #f5f7f1;
}
.helptab-unselected {
    font-weight: bold;
	padding: 5px;
    background-color: #f5f7f1;
}
.helptab-selected {
    font-weight: bold;
    background-color: #D0D9BD;
	padding: 5px;
}
.helptabs {
    margin: 0px;
    background-color: #f5f7f1;
	padding: 5px;
}
.infopanel-heading {
    font-weight: bold;
	padding: 4px 0px 2px 0px;
}

.pagebody {
}

.pageheader {
	padding: 5px 5px 5px 0px;
 	border-bottom: 1px solid #3c78b5;
}

.pagetitle {
	font-size: 22px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: #003366;
}

.newpagetitle {
    color: #ccc !important;
}

.steptitle {
	font-size: 18px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: #003366;
	margin-bottom: 7px;
}

.substeptitle {
    font-size: 12px;
    font-weight: bold;
    font-family: Arial, sans-serif;
    color: #003366;
    margin: 2px 4px 4px 4px;
    padding: 2px 4px 1px 4px;
}

.stepdesc {
    font-family: Verdana, arial, sans-serif;
	font-size: 11px;
	line-height: 16px;
	font-weight: normal;
    color: #666666;
    margin-top: 7px;
    margin-bottom: 7px;
}

.steplabel {
    font-weight: bold;
    margin-right: 4px;
    color: black;
    float: left;
    width: 15%;
    text-align: right;
}

.stepfield {
    background: #f0f0f0;
    padding: 5px;
}

.submitButtons{
    margin-top:5px;
    text-align:right;
}

.formtitle {
	font-size: 12px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: #003366;
}

.sectionbottom {
    border-bottom: 1px solid #3c78b5;
}

.topRow {
    border-top: 2px solid #3c78b5;
}

.tabletitle {
	font-size: 14px;
	font-weight: bold;
	font-family: Arial, sans-serif;
    padding: 3px 0px 2px 0px;
    margin: 8px 4px 2px 0px;
	color: #003366;
	border-bottom: 2px solid #3c78b5;
}
.pagesubheading {
    color: #666666;
    font-size: 10px;
    padding: 0px 0px 5px 0px;
}

HR {
	color: 3c78b5;
	height: 1;
}

A:link, A:visited, A:active, A:hover {
	color: #003366;
}

h1 A:link, h1 A:visited, h1 A:active {
	text-decoration: none;
}

h1 A:hover {
    border-bottom: 1px dotted #003366;
}

.wiki-content > :first-child, .commentblock > :first-child {
    margin-top: 3px;
}

.logocell {
    padding: 10px;
}

input {
	font-family: verdana, geneva, arial, sans-serif;
	font-size: 11px;
	color: #000000;
}

textarea, textarea.editor {
	font-family: verdana, geneva, arial, sans-serif;
	font-size: 11px;
	color: #333333;
}

/* use logoSpaceLink instead.
.spacenametitle {
	font: 21px/31px Impact, Arial, Helvetica;
    font-weight: 100;
    color: #999999;
	margin: 0px;
}
.spacenametitle img {
  margin: 0 0 -4px 0;
}
.spacenametitle a {
    text-decoration: none;
    color: #999999;
}
.spacenametitle a:visited {
    text-decoration: none;
    color: #999999;
}*/

.spacenametitle-printable {
	font: 20px/25px Impact, Arial, Helvetica;
    font-weight: 100;
    color: #999999;
	margin: 0px;
}
.spacenametitle-printable a {
    text-decoration: none;
    color: #999999;
}
.spacenametitle-printable a:visited {
    text-decoration: none;
    color: #999999;
}

.blogDate {
	font-weight: bold;
	text-decoration: none;
	color: black;
}

.blogSurtitle {
    background: #f0f0f0;
 	border: 1px solid #ddd;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.blogHeading {
    font-size: 20px;
    line-height: normal;
    font-weight: bold;
    padding: 0px;
    margin: 0px;
}

.blogHeading a {
   text-decoration: none;
   color: black;
}

.endsection {
	align: right;
	color: #666666;
	margin-top: 10px;
}
.endsectionleftnav {
	align: right;
	color: #666666;
	margin-top: 10px;
}

h1 {
	font-size: 24px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	color: #003366;
 	border-bottom: 1px solid #3c78b5;
	padding: 2px;
	margin: 36px 0px 4px 0px;
}

h2 {
	font-size: 18px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
 	border-bottom: 1px solid #3c78b5;
	padding: 2px;
	margin: 27px 0px 4px 0px;
}

h3 {
	font-size: 14px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 21px 0px 4px 0px;
}

h4 {
	font-size: 12px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 18px 0px 4px 0px;
}

h4.search {
	font-size: 12px;
	line-height: normal;
	font-weight: normal;
	background-color: #f0f0f0;
	padding: 4px;
	margin: 18px 0px 4px 0px;
}

h5 {
	font-size: 10px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 14px 0px 4px 0px;
}

h6 {
	font-size: 8px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 14px 0px 4px 0px;
}

.smallfont {
    font-size: 10px;
}
.descfont {
    font-size: 10px;
    color: #666666;
}
.smallerfont {
    font-size: 9px;
}
.smalltext {
    color: #666666;
    font-size: 10px;
}
.smalltext a {
    color: #666666;
}
.smalltext-blue {
    color: #3c78b5;
    font-size: 10px;
}
.surtitle {
    margin-left: 1px;
    margin-bottom: 5px;
    font-size: 14px;
    color: #666666;
}

/* css hack found here:  http://www.fo3nix.pwp.blueyonder.co.uk/tutorials/css/hacks/ */
.navItemOver { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #003366; cursor: hand; voice-family: '\'}\''; voice-family:inherit; cursor: pointer;}
.navItemOver a { color: #ffffff; background-color:#003366; text-decoration: none; }
.navItemOver a:visited { color: #ffffff; background-color:#003366; text-decoration: none; }
.navItemOver a:hover { color: #ffffff; background-color:#003366; text-decoration: none; }
.navItem { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #3c78b5; }
.navItem a { color: #ffffff; text-decoration: none; }
.navItem a:hover { color: #ffffff; text-decoration: none; }
.navItem a:visited { color: #ffffff; text-decoration: none; }

div.padded { padding: 4px; }
div.thickPadded { padding: 10px; }
h3.macrolibrariestitle {
    margin: 0px 0px 0px 0px;
}

div.centered { text-align: center; margin: 10px; }
div.centered table {margin: 0px auto; text-align: left; }

.tableview table {
    margin: 0;
}

.tableview th {
    text-align: left;
    color: #003366;
    font-size: 12px;
    padding: 5px 0px 0px 5px;
    border-bottom: 2px solid #3c78b5;
}
.tableview td {
    text-align: left;
    border-color: #ccc;
    border-width: 0px 0px 1px 0px;
    border-style: solid;
    margin: 0;
    padding: 4px 10px 4px 5px;
}

.grid {
    margin: 2px 0px 5px 0px;
    border-collapse: collapse;
}
.grid th  {
    border: 1px solid #ccc;
    padding: 2px 4px 2px 4px;
    background: #f0f0f0;
    text-align: center;
}
.grid td  {
    border: 1px solid #ccc;
    padding: 3px 4px 3px 4px;
}
.gridHover {
	background-color: #f9f9f9;
}

td.infocell {
    background-color: #f0f0f0;
}
.label {
	font-weight: bold;
	color: #003366;
}

label {
	font-weight: bold;
	color: #003366;
}

.error {
	background-color: #fcc;
}

.errorBox {
	background-color: #fcc;
    border: 1px solid #c00;
    padding: 5px;
    margin: 5px;
}

.errorMessage {
	color: #c00;
}

.success {
	background-color: #dfd;
}

.successBox {
	background-color: #dfd;
    border: 1px solid #090;
    padding: 5px;
    margin-top:5px;
    margin-bottom:5px;
}

blockquote {
	padding-left: 10px;
	padding-right: 10px;
	margin-left: 5px;
	margin-right: 0px;
	border-left: 1px solid #3c78b5;
}

table.confluenceTable
{
    margin: 5px;
    border-collapse: collapse;
}

/* Added as a temporary fix for CONF-4223. The table elements appear to be inheriting the border: none attribute from the sectionMacro class */
table.confluenceTable td.confluenceTd
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
}

/* Added as a temporary fix for CONF-4223. The table elements appear to be inheriting the border: none attribute from the sectionMacro class */
table.confluenceTable th.confluenceTh
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
    background-color: #f0f0f0;
    text-align: center;
}

td.confluenceTd
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
}

th.confluenceTh
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
    background-color: #f0f0f0;
    text-align: center;
}

DIV.small {
	font-size: 9px;
}

H1.pagename {
	margin-top: 0px;
}

IMG.inline  {}

.loginform {
    margin: 5px;
    border: 1px solid #ccc;
}

/* The text how the "This is a preview" comment should be shown. */
.previewnote { text-align: center;
                font-size: 11px;
                    color: red; }

/* How the preview content should be shown */
.previewcontent { background: #E0E0E0; }

/* How the system messages should be shown (DisplayMessage.jsp) */
.messagecontent { background: #E0E0E0; }

/* How the "This page has been modified..." -comment should be shown. */
.conflictnote { }

.createlink {
    color: maroon;
}
a.createlink {
    color: maroon;
}
.templateparameter {
    font-size: 9px;
    color: darkblue;
}

.diffadded {
    background: #ddffdd;
    padding: 1px 1px 1px 4px;
	border-left: 4px solid darkgreen;
}
.diffdeleted {
    color: #999;
    background: #ffdddd;
    padding: 1px 1px 1px 4px;
	border-left: 4px solid darkred;
}
.diffnochange {
    padding: 1px 1px 1px 4px;
	border-left: 4px solid lightgrey;
}
.differror {
    background: brown;
}
.diff {
    font-family: lucida console, courier new, fixed-width;
	font-size: 12px;
	line-height: 14px;
}
.diffaddedchars {
    background-color:#99ff99;
    font-weight:bolder;
}
.diffremovedchars {
    background-color:#ff9999;
    text-decoration: line-through;
    font-weight:bolder;
}

.greybackground {
    background: #f0f0f0
}

.greybox {
 	border: 1px solid #ddd;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.borderedGreyBox {
    border: 1px solid #cccccc;
    background-color: #f0f0f0;
    padding: 10px;
}

.greyboxfilled {
 	border: 1px solid #ddd;
    background: #f0f0f0;
    padding: 3px;
	margin: 1px 1px 10px 1px;
}

.navBackgroundBox {
    padding: 5px 5px 5px 5px;
    font-size: 22px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: white;
    background: #3c78b5;
    text-decoration: none;
}

.previewBoxTop {
	background-color: #f0f0f0;
    border-width: 1px 1px 0px 1px;
    border-style: solid;
    border-color: #3c78b5;
    padding: 5px;
    margin: 5px 0px 0px 0px;
    text-align: center;
}
.previewContent {
    background-color: #fff;
 	border-color: #3c78b5;
	border-width: 0px 1px 0px 1px;
	border-style: solid;
	padding: 10px;
	margin: 0px;
}
.previewBoxBottom {
	background-color: #f0f0f0;
    border-width: 0px 1px 1px 1px;
    border-style: solid;
    border-color: #3c78b5;
    padding: 5px;
    margin: 0px 0px 5px 0px;
    text-align: center;
}

.functionbox {
    background-color: #f0f0f0;
 	border: 1px solid #3c78b5;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.functionbox-greyborder {
    background-color: #f0f0f0;
 	border: 1px solid #ddd;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.search-highlight {
    background-color: #ffffcc;
}

/* normal (white) background */
.rowNormal {
    background-color: #ffffff;
 }

/* alternate (pale yellow) background */
.rowAlternate {
    background-color: #f7f7f7;
}

/* used in the list attachments table */
.rowAlternateNoBottomColor {
    background-color: #f7f7f7;
}

.rowAlternateNoBottomNoColor {
}

.rowAlternateNoBottomColor td {
    border-bottom: 0px;
}

.rowAlternateNoBottomNoColor td {
    border-bottom: 0px;
}

/* row highlight (grey) background */
.rowHighlight {
    background-color: #f0f0f0;

}

TD.greenbar {FONT-SIZE: 2px; BACKGROUND: #00df00; BORDER: 1px solid #9c9c9c; PADDING: 0px; }
TD.redbar {FONT-SIZE: 2px; BACKGROUND: #df0000; BORDER: 1px solid #9c9c9c; PADDING: 0px; }
TD.darkredbar {FONT-SIZE: 2px; BACKGROUND: #af0000; BORDER: 1px solid #9c9c9c; PADDING: 0px; }

TR.testpassed {FONT-SIZE: 2px; BACKGROUND: #ddffdd; PADDING: 0px; }
TR.testfailed {FONT-SIZE: 2px; BACKGROUND: #ffdddd; PADDING: 0px; }

.toolbar  {
    margin: 0px;
    border-collapse: collapse;
}

.toolbar td  {
    border: 1px solid #ccc;
    padding: 2px 2px 2px 2px;
    color: #ccc;
}

td.noformatting {
    border-width: 0px;
    border-style: none;
    text-align: center;
	padding: 0px;
}

.commentblock {
    margin: 12px 0 12px 0;
}

/*
 * Divs displaying the license information, if necessary.
 */
.license-eval, .license-none, .license-nonprofit {
    border-top: 1px solid #bbbbbb;
    text-align: center;
    font-size: 10px;
    font-family: Verdana, Arial, Helvetica, sans-serif;
}

.license-eval, .license-none {
    background-color: #ffcccc;
}

.license-eval b, .license-none b {
    color: #990000
}

.license-nonprofit {
    background-color: #ffffff;
}

/*
 * The shadow at the bottom of the page between the main content and the
 * "powered by" section.
 */
.bottomshadow {
    height: 12px;
    background-image: url("$req.contextPath/images/border/border_bottom.gif");
    background-repeat: repeat-x;
}

/*
 * Styling of the operations box
 */
.navmenu .operations li, .navmenu .operations ul {
    list-style: none;
    margin-left: 0;
    padding-left: 0;
}

.navmenu .operations ul {
    margin-bottom: 9px;
}

.navmenu .label {
    font-weight: inherit;
}

/*
 * Styling of ops as a toolbar
 */
.toolbar div {
    display: none;
}

.toolbar .label {
    display: none;
}

.toolbar .operations {
    display: block;
}

.toolbar .operations ul {
    display: inline;
    list-style: none;
    margin-left: 10px;
    padding-left: 0;
}

.toolbar .operations li {
    list-style: none;
    display: inline;
}

/* list page navigational tabs */
#foldertab {
padding: 3px 0px 3px 8px;
margin-left: 0;
border-bottom: 1px solid #3c78b5;
font: bold 11px Verdana, sans-serif;
}

#foldertab li {
list-style: none;
margin: 0;
display: inline;
}

#foldertab li a {
padding: 3px 0.5em;
margin-left: 3px;
border: 1px solid #3c78b5;
border-bottom: none;
background: #3c78b5;
text-decoration: none;
}

#foldertab li a:link { color: #ffffff; }
#foldertab li a:visited { color: #ffffff; }

#foldertab li a:hover {
color: #ffffff;
background: #003366;
border-color: #003366;
}

#foldertab li a.current {
background: white;
border-bottom: 1px solid white;
color: black;
}

#foldertab li a.current:link { color: black; }
#foldertab li a.current:visited { color: black; }
#foldertab li a.current:hover {
background: white;
border-bottom: 1px solid white;
color: black;
}

/* alphabet list */
ul#squaretab {
margin-left: 0;
padding-left: 0;
white-space: nowrap;
font: bold 8px Verdana, sans-serif;
}

#squaretab li {
display: inline;
list-style-type: none;
}

#squaretab a {
padding: 2px 6px;
border: 1px solid #3c78b5;
}

#squaretab a:link, #squaretab a:visited {
color: #fff;
background-color: #3c78b5;
text-decoration: none;
}

#squaretab a:hover {
color: #ffffff;
background-color: #003366;
border-color: #003366;
text-decoration: none;
}

#squaretab li a#current {
background: white;
color: black;
}

.blogcalendar * {
    font-family:verdana, arial, sans-serif;
    font-size:x-small;
    font-weight:normal;
    line-height:140%;
    padding:2px;
}


table.blogcalendar {
    border: 1px solid #3c78b5;
}

.blogcalendar th.calendarhead, a.calendarhead {
    font-size:x-small;
    font-weight:bold;
    padding:2px;
    text-transform:uppercase;
    background-color: #3c78b5;
    color: #ffffff;
    letter-spacing: .3em;
    text-transform: uppercase;
}

.calendarhead:visited {color: white;}
.calendarhead:active {color: white;}
.calendarhead:hover {color: white;}

.blogcalendar th {
    font-size:x-small;
    font-weight:bold;
    padding:2px;
    background-color:#f0f0f0;
}

.blogcalendar td {
    font-size:x-small;
    font-weight:normal;
}

.searchGroup { padding: 0 0 10px 0; background: #f0f0f0; }
.searchGroupHeading { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #3c78b5; padding: 2px 4px 1px 4px; }
.searchItem { padding: 1px 4px 1px 4px; }
.searchItemSelected { padding: 1px 4px 1px 4px; font-weight: bold; background: #ddd; }

/* permissions page styles */
.permissionHeading {
    border-bottom: #bbb; border-width: 0 0 1px 0; border-style: solid; font-size: 16px; text-align: left;
}
.permissionTab {
    border-width: 0 0 0 1px; border-style: solid; background: #3c78b5; color: #ffffff; font-size: 10px;
}
.permissionSuperTab {
    border-width: 0 0 0 1px; border-style: solid; background: #003366; color: #ffffff;
}
.permissionCell {
    border-left: #bbb; border-width: 0 0 0 1px; border-style: solid;
}

/* warning panel */
.warningPanel { background: #FFFFCE; border:#F0C000 1px solid; padding: 8px; margin: 10px; }
/* alert panel */
.alertPanel { background: #FFCCCC; border:#C00 1px solid; padding: 8px; margin: 10px; }
/* info panel */
.infoPanel { background: #D8E4F1; border:#3c78b5 1px solid; padding: 8px; margin: 10px; }

/* side menu highlighting (e.g. space content screen) */
.optionPadded { padding: 2px; }
.optionSelected { background-color: #ffffcc; padding: 2px; border: 1px solid #ddd; margin: -1px; }
.optionSelected a { font-weight: bold; text-decoration: none; color: black; }

/* information macros */
.noteMacro { border-style: solid; border-width: 1px; border-color: #F0C000; background-color: #FFFFCE; text-align:left; margin-top: 5px; margin-bottom: 5px}
.warningMacro { border-style: solid; border-width: 1px; border-color: #c00; background-color: #fcc; text-align:left; margin-top: 5px; margin-bottom: 5px}
.infoMacro { border-style: solid; border-width: 1px; border-color: #3c78b5; background-color: #D8E4F1; text-align:left; margin-top: 5px; margin-bottom: 5px}
.tipMacro { border-style: solid; border-width: 1px; border-color: #090; background-color: #dfd; text-align:left; margin-top: 5px; margin-bottom: 5px}
.informationMacroPadding { padding: 5px 0 0 5px; }

table.infoMacro td, table.warningMacro td, table.tipMacro td, table.noteMacro td, table.sectionMacro td {
    border: none;
}

table.sectionMacroWithBorder td.columnMacro { border-style: dashed; border-width: 1px; border-color: #cccccc;}

.pagecontent
{
    padding: 10px;
    text-align: left;
}

/* styles for links in the top bar */
.topBarDiv a:link {color: #ffffff;}
.topBarDiv a:visited {color: #ffffff;}
.topBarDiv a:active {color: #ffffff;}
.topBarDiv a:hover {color: #ffffff;}
.topBarDiv {color: #ffffff;}

.topBar {
    background-color: #003366;
}


/* styles for extended operations */
.greyLinks a:link {color: #666666; text-decoration:underline;}
.greyLinks a:visited {color: #666666; text-decoration:underline;}
.greyLinks a:active {color: #666666; text-decoration:underline;}
.greyLinks a:hover {color: #666666; text-decoration:underline;}
.greyLinks {color: #666666; display:block; padding: 10px}

.logoSpaceLink {color: #999999; text-decoration: none}
.logoSpaceLink a:link {color: #999999; text-decoration: none}
.logoSpaceLink a:visited {color: #999999; text-decoration: none}
.logoSpaceLink a:active {color: #999999; text-decoration: none}
.logoSpaceLink a:hover {color: #003366; text-decoration: none}

/* basic panel (basicpanel.vmd) style */
.basicPanelContainer {border: 1px solid #3c78b5; margin-top: 2px; margin-bottom: 8px; width: 100%}
.basicPanelTitle {padding: 5px; margin: 0px; background-color: #f0f0f0; color: black; font-weight: bold;}
.basicPanelBody {padding: 5px; margin: 0px}

.separatorLinks a:link {color: white}
.separatorLinks a:visited {color: white}
.separatorLinks a:active {color: white}

.greynavbar {background-color: #f0f0f0; border-top: 1px solid #3c78b5; margin-top: 2px}

div.headerField {
    float: left;
    width: auto;
    height: 100%;
}

.headerFloat {
    margin-left: auto;
    width: 50%;
}

.headerFloatLeft {
    float: left;
    margin-right: 20px;
    margin-bottom: 10px;
}

#headerRow {
    padding: 10px;
}

div.license-personal {
   background-color: #003366;
   color: #ffffff;
}

div.license-personal a {
   color: #ffffff;
}

.greyFormBox {
    border: 1px solid #cccccc;
    padding: 5px;
}

/* IE automatically adds a margin before and after form tags. Use this style to remove that */
.marginlessForm {
    margin: 0px;
}

.openPageHighlight {
    background-color: #ffffcc;
    padding: 2px;
    border: 1px solid #ddd;
}

.editPageInsertLinks, .editPageInsertLinks a
{
    color: #666666;
    font-weight: bold;
    font-size: 10px;
}

/* Style for label heatmap. */
.top10 a {
    font-weight: bold;
    font-size: 2em;
    color: #003366;
}
.top25 a {
    font-weight: bold;
    font-size: 1.6em;
    color: #003366;
}
.top50 a {
    font-size: 1.4em;
    color: #003366;
}
.top100 a {
    font-size: 1.2em;
    color: #003366;
}

.heatmap {
    list-style:none;
    width: 95%;
    margin: 0px auto;
}

.heatmap a {
    text-decoration:none;
}

.heatmap a:hover {
    text-decoration:underline;
}

.heatmap li {
    display: inline;
}

.minitab {
padding: 3px 0px 3px 8px;
margin-left: 0;
margin-top: 1px;
margin-bottom: 0px;
border-bottom: 1px solid #3c78b5;
font: bold 9px Verdana, sans-serif;
text-decoration: none;
float:none;
}
.selectedminitab {
padding: 3px 0.5em;
margin-left: 3px;
margin-top: 1px;
border: 1px solid #3c78b5;
background: white;
border-bottom: 1px solid white;
color: #000000;
text-decoration: none;
}
.unselectedminitab {
padding: 3px 0.5em;
margin-left: 3px;
margin-top: 1px;
border: 1px solid #3c78b5;
border-bottom: none;
background: #3c78b5;
color: #ffffff;
text-decoration: none;
}

a.unselectedminitab:hover {
color: #ffffff;
background: #003366;
border-color: #003366;
}

a.unselectedminitab:link { color: white; }
a.unselectedminitab:visited { color: white; }

a.selectedminitab:link { color: black; }
a.selectedminitab:visited { color: black; }

.linkerror { background-color: #fcc;}

a.labelOperationLink:link {text-decoration: underline}
a.labelOperationLink:active {text-decoration: underline}
a.labelOperationLink:visited {text-decoration: underline}
a.labelOperationLink:hover {text-decoration: underline}

a.newLabel:link {background-color: #ddffdd}
a.newLabel:active {background-color: #ddffdd}
a.newLabel:visited {background-color: #ddffdd}
a.newLabel:hover {background-color: #ddffdd}

ul.square {list-style-type: square}

.inline-control-link {
    background: #ffc;
    font-size: 9px;
    color: #666;
    padding: 2px;
    text-transform: uppercase;
    text-decoration: none;
}


.inline-control-link a:link {text-decoration: none}
.inline-control-link a:active {text-decoration: none}
.inline-control-link a:visited {text-decoration: none}
.inline-control-link a:hover {text-decoration: none}

.inline-control-link {
    background: #ffc;
    font-size: 9px;
    color: #666;
    padding: 2px;
    text-transform: uppercase;
    text-decoration: none;
    cursor: pointer;
}

div.auto_complete {
    width: 350px;
    background: #fff;
}
div.auto_complete ul {
    border: 1px solid #888;
    margin: 0;
    padding: 0;
    width: 100%;
    list-style-type: none;
}
div.auto_complete ul li {
    margin: 0;
    padding: 3px;
}
div.auto_complete ul li.selected {
    background-color: #ffb;
}
div.auto_complete ul strong.highlight {
    color: #800;
    margin: 0;
    padding: 0;
}

/******* Edit Page Styles *******/
.toogleFormDiv{
    border:1px solid #A7A6AA;
    background-color:white;
    padding:5px;
    margin-top: 5px;
}

.toogleInfoDiv{
    border:1px solid #A7A6AA;
    background-color:white;
    display:none;
    padding:5px;
    margin-top: 10px;
}

.inputSection{
    margin-bottom:20px;
}

#editBox{
   border:1px solid lightgray;
   background-color:#F0F0F0;
}

/******* Left Navigation Theme Styles ********/
.leftnav li a {
    text-decoration:none;
    color:white;
    margin:0px;
    display:block;
    padding:2px;
    padding-left:5px;
    background-color: #3c78b5;
    border-top:1px solid #3c78b5;
}

.leftnav li a:active {color:white;}
.leftnav li a:visited {color:white;}
.leftnav li a:hover {background-color: #003366; color:white;}

/* Added by Shaun during i18n */
.replaced
{
    background-color: #33CC66;
}

.topPadding
{
    margin-top: 20px;
}

/* new form style */
.form-block {
    padding: 6px;
}
.form-error-block {
    padding: 6px;
    background: #fcc;
    border-top: #f0f0f0 1px solid;
    border-bottom: #f0f0f0 1px solid;
    margin-bottom: 6px;
    padding: 0 12px 0 12px;
}
.form-element-large {
    font-size: 16px;
    font-weight: bold;
    font-family: Arial, sans-serif;
    color: #003366;
}

.form-element-small {
    font-size: 12px;
    font-weight: bold;
    font-family: Arial, sans-serif;
    color: #003366;
}

.form-header {
    background: lightyellow;
    border-top: #f0f0f0 1px solid;
    border-bottom: #f0f0f0 1px solid;
    margin-bottom: 6px;
    padding: 0 12px 0 12px;
}
.form-header p, .form-block p, .form-error-block p {
    line-height: normal;
    margin: 12px 0 12px 0;
}
.form-example {
    color: #888;
    font-size: 11px;
}
.form-divider {
    border-bottom: #ccc 1px solid;
    margin-bottom: 6px;
}
.form-buttons {
    margin-top: 6px;
    border-top: #ccc 1px solid;
    border-bottom: #ccc 1px solid;
    background: #f0f0f0;
    padding: 10px;
    text-align: center;
}
.form-buttons input {
    width: 100px;
}
.form-block .error {
    padding: 6px;
    margin-bottom: 6px;
}
    -->
    </style>
</head>
<body>

<div id="PageContent">
<table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%"><tr>
<td valign="top" class="pagebody">

    <div class="pageheader">
        <span class="pagetitle">
            Page Edited :
            <a href="http://cwiki.apache.org/confluence/display/GMOxDOC20ja">GMOxDOC20ja</a> :
            <a href="http://cwiki.apache.org/confluence/display/GMOxDOC20ja/4.6.+JBoss+to+Geronimo+-+Hibernate+%E3%81%AE%E7%A7%BB%E8%A1%8C">4.6. JBoss to Geronimo - Hibernate の移行</a>
        </span>
    </div>

     <p>
        <a href="http://cwiki.apache.org/confluence/display/GMOxDOC20ja/4.6.+JBoss+to+Geronimo+-+Hibernate+%E3%81%AE%E7%A7%BB%E8%A1%8C">4.6. JBoss to Geronimo - Hibernate の移行</a>
        has been edited by             <a href="http://cwiki.apache.org/confluence/display/~t-hosaka@bp1.jp">toshimitsu hosaka</a>
            <span class="smallfont">(Apr 21, 2008)</span>.
     </p>
    
     <p>
                 <a href="http://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=83145&originalVersion=3&revisedVersion=4">(View changes)</a>
     </p>

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

/*]]>*/</style><div class="Scrollbar"><table class='ScrollbarTable'><tr><td class='ScrollbarPrevIcon'><a href="/confluence/pages/viewpage.action?pageId=83144"><img border='0' align='middle' src='/confluence/images/icons/back_16.gif' width='16' height='16'></a></td><td width='33%' class='ScrollbarPrevName'><a href="/confluence/pages/viewpage.action?pageId=83144">4.5. JBoss to Geronimo - EJB-セッションビーンの移行</a>&nbsp;</td><td width='33%' class='ScrollbarParent'><sup><a href="/confluence/pages/viewpage.action?pageId=83137"><img border='0' align='middle' src='/confluence/images/icons/up_16.gif' width='8' height='8'></a></sup><a href="/confluence/pages/viewpage.action?pageId=83137">4. Apache Geronimo への移行</a></td><td width='33%' class='ScrollbarNextName'>&nbsp;<a href="/confluence/pages/viewpage.action?pageId=83146">4.7. JBoss to Geronimo - JDBC の移行</a></td><td class='ScrollbarNextIcon'><a href="/confluence/pages/viewpage.action?pageId=83146"><img border='0' align='middle' src='/confluence/images/icons/forwd_16.gif' width='16' height='16'></a></td></tr></table></div>
<p><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-top"></a><br/>
この文章は、Hibernate 3.2 を ORM ツールとして利用するアプリケーションを JBoss アプリケーション・サーバー 4.2.1 から Apache Geronimo 2.0 へ移行する手助けとなります。&nbsp;</p>

<p>Hibernate は強力な、高性能なオブジェクト・リレーショナルの永続化とクエリー・サービスです。データベースのフィールドに結びつけられた属性の getter と setter メソッド持つ永続化(POJO)クラスの開発の助けになります。関連・継承・ポリモーフィズム・コンポジション・コレ クションなどのオブジェクト指向の特徴に従うことになります。Hibernate は、ネイティブな SQL、オブジェクト指向検索条件、例示 API などと同じように、移行可能な SQL 表現(HQL)を用いて検索を表現できます。</p>

<p>基本的には、Hibernate は Java クラスとデータベースの表を結びつけます。また、データ検索や検索機構によって、開発時間の短縮につながります。自然と、Java 中間層におけるオブジェクト指向のコード開発ができます。Hibernate のユニークな特徴は、MySQL、Oracle または DB2 など、どのようなデータベースにもアプリケーションが切り替えることができる透過的永続化機構です。Hibernate は Java Swing アプリケーション、Java サーブレット・アプリケーション、または EJB セッション・ビーンを利用するJ2EE アプリケーションなどに利用できます。(今回は、Java サーブレット・アプリケーションを利用します)</p>

<p>移行の手順を明らかにするために、最初にサンプル・アプリケーションを JBoss にデプロイし、その後 Geronimo へ移行します。サンプル・アプリケーションは、オンライン取引アプリケーションです。JDBC の移行手順の説明で既に利用した物です。このアプリケーションでは永続化のために Hibernate を利用するように変更します。</p>

<p>この文章には以下のセクションがあります。</p>
<ul>
	<li><a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-implementation" title="implementation on 4.6. JBoss to Geronimo - Hibernate の移行">Hibernate 実装の解析</a></li>
	<li><a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-sampleApp" title="sampleApp on 4.6. JBoss to Geronimo - Hibernate の移行">サンプル・アプリケーション</a></li>
	<li><a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-JBoss" title="JBoss on 4.6. JBoss to Geronimo - Hibernate の移行">JBoss 環境</a></li>
	<li><a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-Geronimo" title="Geronimo on 4.6. JBoss to Geronimo - Hibernate の移行">Geronimo 環境</a></li>
	<li><a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-migration" title="migration on 4.6. JBoss to Geronimo - Hibernate の移行">移行の手順</a></li>
	<li><a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-summary" title="summary on 4.6. JBoss to Geronimo - Hibernate の移行">まとめ</a><br/>
<a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-top" title="top on 4.6. JBoss to Geronimo - Hibernate の移行">Back to Top</a></li>
</ul>


<h1><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-Hibernate%E5%AE%9F%E8%A3%85%E3%81%AE%E8%A7%A3%E6%9E%90"></a>Hibernate 実装の解析 <a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-implementation"></a></h1>

<p>Hibernate は以下のサービスを提供します。&nbsp;</p>
<ul>
	<li>コネクション管理</li>
	<li>トランザクション管理</li>
	<li>オブジェクト・リレーションのマッピング</li>
</ul>


<p>また、とても柔軟であり、さまざまなサービスと組み合わせて利用できます。JBoss、Geronimo ともトランザクション管理とコネクション管理機能を持っているので、この文章では hibernate を O/R マッピング機能のみ利用できるように構成します。一般的に、Hibernate はアプリケーション・サーバーと一緒に利用するように構成します。Hibernate はコネクション・プールの生成と環境の設定に構成ファイルである <tt>hibernate.cfg.xml</tt> を必要とします。このファイルにはデータベース・ドライバー、接続 url、SQL 方言(これは利用している RDBMS の仕様)、ユーザー名、パスワード、プールの大きさなどのパラメーターを含みます。また、*.hbm.xml というマッピング用ファイルの場所の定義も含みます。マッピング用ファイルはデータベースの表のフィールドと永続化クラスの属性とを結びつけるものです。</p>

<p>これらのプロパティは <b>Apache Geronimo v2.0</b> を含めたアプリケーション・サーバーで<b>一般的</b>なものです。</p>

<p>しかし、JBoss(さらに言えば、Hibernate MBean)は、<b>2つ</b>のさらなるデプロイメント機構を持っています。</p>

<p>一つ目は Hibernate&nbsp; アーカイブ(HAR ファイル)です。これは Hibernate のすべてのクラスとマッピング・ファイルが含まれる特別なアーカイブである HAR ファイルです。JBoss はこのアーカイブを EAR や WAR ファイルと同じ方法でデプロイします。</p>

<p>もうひとつは、他のアプリケーションのクラスといっしょに、Hibernate のすべてのクラスとマッピング・ファイルを、例えば EAR の中に単にいれることです。Hibernate MBean は個別に構成され、マッピング・ファイルがアプリケーションのすべての JAR を探しかたを指定します。両方のデプロイメント機構とも、手作業で構成することなく、通常必要となるような設定コードを記述することなく、Hibernate オブジェクトをアプリケーションに追加することができます。</p>

<p>構造的には、HAR ファイルは JBoss サービス・アーカイブ(SAR ファイル)に似ています。HAR ファイルは Hibernate クラス・ファイルとマッピング・ファイル(*.hbm.xml)を、Hibernate アプリケーションが生成する必要がある Hibernate MBean の構成の定義を持つ標準の <tt>jboss-service.xml</tt> ファイルと一緒に保持します。最新の JBoss 製品では、<tt>hibernate-service.xml</tt> という名前にリネームされていますが、同じ構造と目的を持っています。</p>

<p>Hibernate アーカイブはトップレベルのパッケージとして、または EAR ファイルのコンポーネントとしてデプロイすることができます。Hbernate アーカイブは標準の J2EE デプロイメントの形式ではないので、これらをコンテキスト内で利用できるように EAR ファイルに <tt>jboss-app.xml</tt> ファイルを記述する必要があります。</p>

<p>以下の表はこれらアプリケーション・サーバーの機能ごとの比較です。</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'> コンテナー管理データソース </td>
<td class='confluenceTd'> サポートされています。Hibernate は与えられた JNDI 名のデータソースを利用することができます。アプリケーションと同じスレッドで実行されるからです。 <br clear="all" /> </td>
<td class='confluenceTd'> サポートされています。Hibernate は与えられた JNDI 名のデータソースを利用することができます。 </td>
</tr>
<tr>
<td class='confluenceTd'> JNDI 自動バインディング </td>
<td class='confluenceTd'> サポートされていません。 </td>
<td class='confluenceTd'> サポートされています。プロパティが設定されるとセッション・ファクトリーが JNDI コンテキストに結びつけられます。 <br clear="all" /> </td>
</tr>
<tr>
<td class='confluenceTd'> JTA セッション・バインディング </td>
<td class='confluenceTd'> この機能は導入直後そのままの状態ではサポートされていません。Geronimo トランザクション・マネージャーが利用できるようにルックアップを記述する必要があります。 <br clear="all" /> </td>
<td class='confluenceTd'> 導入直後からサポートされています。Hibernate は JBoss トランザクション・マネージャー向けのルックアップ・クラスを持っています。 </td>
</tr>
<tr>
<td class='confluenceTd'> JMX デプロイメント </td>
<td class='confluenceTd'> 導入直後そのままの状態ではサポートされていません。<b>GBean と Hibernate コネクション・プロバイダー・クラスを記述すれば実装できます。</b> <br clear="all" /> </td>
<td class='confluenceTd'> サポートされています。Hibernate は JBoss にデプロイできる <tt>org.hibernate.jmx.HibernateService</tt> を持っています。 </td>
</tr>
<tr>
<td class='confluenceTd'> Hibernate アーカイブ (HAR) </td>
<td class='confluenceTd'> サポートされていません。Hibernate クラスは J2EE アーカイブの一部としてデプロイされます。 </td>
<td class='confluenceTd'> サポートされています。HAR は構成とマッピング・ファイルが含まれ、他のサーバーへのデプロイをサポートできるようになります。 <br clear="all" /> </td>
</tr>
<tr>
<td class='confluenceTd'> キャッシング </td>
<td class='confluenceTd'> hibernate のキャッシング機構を利用できます。 </td>
<td class='confluenceTd'> hibernate のキャッシング機構を利用できます。JBoss キャッシュもサポートされています。 <br clear="all" /> </td>
</tr>
<tr>
<td class='confluenceTd'> セッション管理 <br clear="all" /> </td>
<td class='confluenceTd'> サポートされていません。手動でセッションを開く必要があります。 </td>
<td class='confluenceTd'> Hibernate セッション・ライフサイクルは自動的に JTA トランザクションのスコープに結びつけることができます。手動でセッションを開いたり閉じたりする必要がなく、これは JBoss EBJ インターセプターが行います。 <br clear="all" /> </td>
</tr>
<tr>
<td class='confluenceTd'> Hibernate マッピング・ファイル </td>
<td class='confluenceTd'> Hibernate マッピング・ファイルの場所を指定する必要があります。 </td>
<td class='confluenceTd'> HAR デプロイを利用する場合は JBoss は自動的に Hibernate マッピング・ファイルを探しだします。 </td>
</tr>
</tbody></table>
<p><a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-top" title="top on 4.6. JBoss to Geronimo - Hibernate の移行">Back to Top</a></p>

<h1><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%BB%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3"></a>サンプル・アプリケーション <a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-sampleApp"></a></h1>

<p>この文章には、JBoss から Geronimo へアプリケーションの移行をデモンストレーションするサンプル・アプリケーションがあります。名前は <span class="nobr"><a href="/confluence/download/attachments/83145/brokerage.zip?version=1" title="brokerage.zip attached to 4.6. JBoss to Geronimo - Hibernate の移行">Online Brokerage<sup><img class="rendericon" src="/confluence/images/icons/link_attachment_7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> です。オンライン取引でユーザーが株の売買を行うシナリオです。このアプリケーションには以下の5つのページがあります。</p>
<ul>
	<li>Login ページ</li>
	<li>Registration ページ</li>
	<li>User Information ページ</li>
	<li>Available Stocks ページ</li>
	<li>User Portfolio ページ</li>
</ul>


<p>以下の図は、アプリケーションのフローです。<br/>
<div align="center"><img src="/confluence/download/attachments/83145/brokerage.jpg" border="0" /></div><br clear="all" />
最初に、ユーザーは Login ページに接続します。ログインページからユーザーはユーザー名とパスワードを入力します。ユーザー名またはパスワードが不正の場合は、アプリケーションは エラーメッセージを表示し、そのログインを拒否します。ユーザー名とパスワードが正確であれば、すべての株についてその時点の株価を見ることができる Available Stocks ページを開きます。<br/>
ユーザーは口座にある利用可能な金額に応じて、購入したい株を Buy ボタンをクリックすることで選択します。取引が無事完了すると、Available Stocks ページ が表示され、必要ならばさらに株が購入できます。株の購入に資金が不足していたら、アプリケーションはエラーとなり取引を進めません。エラーメッセージが Available Stocks ページの上部に表示されます。このページには User Info ボタンがあります。これをクリックすると、User Info ページが表示され、ユーザーの詳細情報が表示されます。<br/>
Available Stocks ページには、ユーザーが所有するすべての株を確認できる Portfolio へのリンクがあります。このページでは、ユーザーは株と株数を選んで売却することができます。また、User Cash 欄に現在の利用可能な現金の学が表示されています。所有している数より多くの株を売ろうとすると、アプリケーションはエラーになります。エラーメッセージ が同じページ上に表示されます。売却が成功すると、売却金額がユーザーの現金に加算されます。<br/>
quantity テキストボックスにはユーザーが持っている特定の会社の株の数量が表示されています。Quantity to Sell 欄では、その会社の株の売りたい数量を入力することができます。売却と購入にはラジオボタンをチェックします。このことは数値を入力した後になされます。 もし quantity to sell テキストボックスが入力されていないか、ラジオボタンがチェックされずに sell ボタンを押すと、必須入力欄が空であるという JavaScript のアラートが表示されます。数量欄に数値以外の文字が入っていると、別のアラートが表示されます。この動き方は、Available Stocks Page と同じようなものです。<br/>
新規ユーザーは、login ページで Register ボタンをクリックすることで登録できます。Registration ページでは、ユーザーID、ユーザー名、パスワード、住所と利用可能現金を入力することができます。<br/>
<a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-top" title="top on 4.6. JBoss to Geronimo - Hibernate の移行">Back to Top</a><br clear="all" />
<br clear="all" />
<br clear="all" /></p>
<h2><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%BB%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%A8JSP%E3%83%9A%E3%83%BC%E3%82%B8"></a>アプリケーション・クラスと JSP ページ</h2>

<p>オンライン取引サンプル・アプリケーションには、以下のパッケージが含まれます。</p>
<ul>
	<li>com.dev.trade.bo
	<ul>
		<li>Stock - 会社の株を表す</li>
		<li>User - ユーザーを表す</li>
		<li>UserStock - ユーザーの所有する株を表す</li>
	</ul>
	</li>
</ul>


<ul>
	<li>com.dev.trade.dao
	<ul>
		<li>TradeDAO - すべてのデータベース接続メソッドを含む</li>
	</ul>
	</li>
</ul>


<ul>
	<li>com.dev.trade.exception
	<ul>
		<li>DBException - すべてのデータベースの例外を発生させるカスタム例外</li>
	</ul>
	</li>
</ul>


<ul>
	<li>com.dev.trade.servlet
	<ul>
		<li>TradeDispatcherServlet - すべてのリクエストを、要求されたデータベース機能を実行した後に JSP へ送る処理</li>
	</ul>
	</li>
</ul>


<p>オンライン取引には、以下の JSP ページを含みます。</p>
<ul>
	<li>login.jsp - アプリケーションのログインページ</li>
	<li>error.jsp - アプリケーションのデフォルトのエラーページ</li>
	<li>register.jsp - ユーザー登録のページ</li>
	<li>stocks.jsp - ユーザーが株を購入できる Available Stocks ページ</li>
	<li>userstocks.jsp - ユーザーの保持する株を表示する portfolio ページで、ユーザはここで株を売却する</li>
</ul>


<p><a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-top" title="top on 4.6. JBoss to Geronimo - Hibernate の移行">Back to Top</a></p>

<h2><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E3%83%84%E3%83%BC%E3%83%AB"></a>利用するツール</h2>

<p>オンライン取引アプリケーションの開発とビルドのツールは以下の通りです。</p>

<h3><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-ApacheAnt"></a>Apache Ant</h3>

<p>Ant はピュア Java のビルド・ツールです。war ファイルをビルドし、オンライン取引アプリケーション向けデータベースを作成するために利用されています。Ant は以下の 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="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-Hibernate"></a>Hibernate</h3>

<p>この文章を書いている時点では Hibernate 3.2 が最新の利用可能バージョンです。以下の 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>Hibernate に関する他の文章は、以下の 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>Hibernate をダウンロードし、インストールしてください。インストールしたディレクトリーを後ほど <b>&lt;hibernate_home&gt;</b> として参照します。</p>

<p><a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-top" title="top on 4.6. JBoss to Geronimo - Hibernate の移行">Back to Top</a></p>

<h2><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%BB%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9"></a>サンプル・データベース</h2>

<p>このアプリケーションのデモンストレーションに利用するデータベースは MySQL です。サンプル・データベース名は <b>adi</b> です。STOCKS、USERS、USERSTOCKS の3つのテーブルも持ちます。各テーブルは以下のフィールドを持ちます。</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>USERSTOCKS テーブルは、各ユーザが所有する株を保存するために利用されます。USER と STOCKS テーブルはユーザーと株の詳細情報を保存するために利用されます。これは単にサンプル・アプリケーションですので、ユーザーの持つ金額の量は、ユーザー登 録時にユーザー自身に入力してもらいます。</p>

<p>このデータベース生成用の DDL は <b>db.sql</b> です。&lt;brokerage_homge&gt;\sql ディレクトリーにあります。</p>

<p><a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-top" title="top on 4.6. JBoss to Geronimo - Hibernate の移行">Back to Top</a></p>

<h1><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-JBoss%E7%92%B0%E5%A2%83"></a>JBoss 環境 <a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-JBoss"></a></h1>

<p>このセクションでは、サンプルの JBoss 環境がどのように、どこにインストールされるかを示すので、貴方はこのシナリオを貴方の実装に合わせることができます。</p>

<p>JBoss のインストール、構成と管理の詳細な説明については、JBoss のドキュメントにあります。JBoss のウェブ・サイトで最新のドキュメントをチェックしてください。</p>

<p>以下のリストはインストールと初期環境の構成を完了させ、サンプル・アプリケーションのデプロイの準備を完了させるまでに必要な一般的なタスクを示します。</p>
<ol>
	<li>製品の説明書にしたがって、JBoss v4.2.1 をダウンロード、インストールしてください。以下、インストール・ディレクトリーを <b>&lt;jboss_home&gt;</b> として参照します。</li>
	<li>デフォルトの JBoss v4.2.1 アプリケーション・サーバーのコピーを作ってください。<b>&lt;jboss_home&gt;\server\default</b> ディレクトリーを再帰的に <b>&lt;jboss_home&gt;\server\&lt;your_server_name&gt;</b> へコピーしてください。</li>
	<li><b>&lt;jboss_home&gt;\bin</b> ディレクトリーで <tt><b>run.sh &#45;c &lt;your_server_name&gt;</b></tt> コマンドを入力し、新しいサーバーを始動してください。</li>
	<li>サーバーが始動すると、実行中かどうかの確認はウェブ・ブラウザーで <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>を開くことでできます。JBoss Welcome ウィンドウが表示され、JBoss コンソールへ接続することができます。</li>
	<li>アプリケーション・サーバーが起動し、実行されたら、次はサンプル・アプリケーションに必要なソフトウェアをインストールし、構成するステップです。このステップは以下のセクションで説明します。</li>
</ol>


<h2><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-%E4%BA%8B%E5%89%8D%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%A8%E6%A7%8B%E6%88%90"></a>事前に必要なソフトウェアのインストールと構成</h2>

<p>この文章でのオンライン取引アプリケーションのビルドと実行のために、ビルド・ツールとアプリケーションが利用するデータベースをインストールし、構成する必要があります。</p>

<h3><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB"></a>データベースのインストール</h3>

<p>前述のとおり、このアプリケーションは MySQL データベースを利用しています。次の 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>メモ:貴方の持つ MySQL のバージョンに応じて、MySQL Connector/J のふさわしいバージョン (3.1、5.0、5.1) もダウンロードしてください。</p>

<p>この MySQL コネクターは &lt;JBOSS_HOME&gt;/server/default/lib に置いてください。</p>

<p>MySQL のインストールと構成は、かなり直感的です。MySQL リファレンス・マニュアルは次の 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>メモ</b>:簡単に構成するために、私はセキュリティ設定を変更し、root ユーザーに "password" というパスワードをつけました。このユーザー ID とパスワードは後ほどサンプル・アプリケーションからデータベースへ接続する際に利用されます。</p>

<h3><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%BB%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E4%BD%9C%E6%88%90"></a>サンプル・データベースの作成</h3>

<p>MySQL のインスタンスが構成されたら、書庫アプリケーション(訳注:オンライン取引アプリケーションの間違い?)が利用するサンプル・データベースを作ります。コマンド・ラインから以下のコマンドを入力し、MySQL モニターを始動してください。</p>

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

<p>&#45;p フラグとパスワードとの間にブランク文字がないことに注意してください。</p>

<p>MySQL コマンド・インターフェースが起動すると、以下のような表示になります。</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>MySQL コマンド・インターフェースから、以下のコマンドを入力し、<b>adi</b> サンプル・データベースを作成してください。</p>

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

<h3><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-Ant%E3%81%AE%E6%A7%8B%E6%88%90"></a>Ant の構成</h3>

<p>前述のとおり、オンライン取引アプリケーションのビルドには Apache Ant を利用しています。もしまだ Ant をインストールしていなかったら、そろそろインストールして、 <b>&lt;ant_home&gt;\bin</b> ディレクトリーをシステムの path 変数に追加してください。</p>

<p>Apache Ant は以下の 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="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-Hibernate%E3%81%AE%E6%A7%8B%E6%88%90"></a>Hibernate の構成</h3>

<p>JBoss には Hibernate が同梱されていますので、hibernate とは別に jar をダウンロードする必要はありません。&nbsp;</p>

<p><a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-top" title="top on 4.6. JBoss to Geronimo - Hibernate の移行">Back to Top</a></p>

<h2><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%BB%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89"></a>サンプル・アプリケーションのビルド</h2>

<p>この文章でのオンライン取引アプリケーションには、アプリケーションのビルドとデータベースの生成に利用できる Ant スクリプトが含まれています。サンプル・アプリケーションを次の URL からダウンロードしてください。<span class="nobr"><a href="/confluence/download/attachments/83145/brokerage.zip?version=1" title="brokerage.zip attached to 4.6. JBoss to Geronimo - Hibernate の移行">Online Brokerage<sup><img class="rendericon" src="/confluence/images/icons/link_attachment_7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></p>

<p>zip ファイルを解凍すると、brokerage ディレクトリーが作られます。以下、このディレクトリーを <b>&lt;brokerage_home&gt;</b> とします。このディレクトリーで <b>build.properties</b> ファイルを開き、環境に合わせてプロパティを編集してください。以下に例を示します。</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>Hibernate の jar ファイルのパスが <b>dependency.dir</b> タグで定義されています。Geronimo と JBoss がそれぞれに Hibernate のコピーを持つ必要があることに注意してください。このディレクトリーに、<b>&lt;hibernage_home&gt;</b> ディレクトリーにある <b>hibernate3.jar</b> ファイルをコピーする必要があります。</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>重要:</b> build.properties ファイルの driver.classpath を設定する際に、スラッシュ "/" を利用することに注意してください。そうしないとコンパイル・エラーになります。</td></tr></table>
<p>コマンド・プロンプトやシェルで、&lt;brokerage_home&gt; ディレクトリーに移動して、<b>ant</b> コマンドを実行してください。そうすると、<b>&lt;brokerage_home&gt;\jboss-artefact</b> ディレクトリーに war 、har 、ear ファイルをビルドします。<b>ant</b> によってビルドされた war は、JBoss 固有のデプロイメント・ディスクリプターである <b>jboss-web.xml</b> ファイルを WEB-INF ディレクトリーに含みます。HAR ファイルには JBoss 固有の <b>hibernate-service.xml</b> ファイルを META-INF ディレクトリーに含みます。EAR ファイルには JBoss 固有のデプロイメント・ディスクリプターである <b>jboss-app.xml</b> を含みます。これらのファイルについて、以下に例を示します。
<br clear="all" /></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>resource-ref 要素は、web.xml ファイルにある <b>jdbc/HibernateDB</b> という名前で参照されているリソースと、今回の例での MySQL データ・ソース向けである <b>java:jdbc/HibernateDS</b> という JNDI 名のリソースとを結び付けるために利用されます。</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>このファイルには設定する必要のある hibernate のプロパティを含んでいます。これらの名称と機能は次のとおりです。</p>
<ul>
	<li><b>DatasourceName</b> &#45; Hibernate が利用するデータ・ソースの JNDI 名です。</li>
	<li><b>Dialect</b> &#45; 利用する SQL 方言です。</li>
	<li><b>SessionFactoryName</b> &#45; セッション・ファクトリーの JNDI 名です。</li>
	<li><b>CacheProviderClass</b> &#45; キャッシュ・プロバイダーのクラスです。</li>
	<li><b>ShowSqlEnabled</b> &#45; 実行された SQL 文を出力します。</li>
</ul>


<p><b>hibernate-service.xml</b> ファイルは EAR(訳注:原文は EAR ですが、HAR では?)の META-INF ディレクトリーの中にあります。</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><b>jboss-app.xml</b> ファイルは EAR ファイルの META-INF ディレクトリーの中にあり、har ファイルの名前を記述しています。</p>

<p>以下の例ではこのアプリケーションで利用しているデプロイメント記述である <b>web.xml</b> を示します。<b>web.xml</b> ファイルは <b>brokerage.war</b> ファイルの WEB-INF ディレクトリーにあるデプロイメント記述で、サーブレット名やアプリケーションのデフォルトの JSP などについて記述されています。</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="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-top" title="top on 4.6. JBoss to Geronimo - Hibernate の移行">Back to Top</a></p>

<h2><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%BB%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E7%94%9F%E6%88%90"></a>サンプル・データの生成</h2>

<p>前述のとおり、<b>db.sql</b> スクリプトがサンプル・データを生成します。このファイルの場所はすでに <b>build.properties</b> 内で <b>sql.file</b> タグによって定義されています。サンプル・データの生成には、単に <b>&lt;brokerage_home&gt;</b> ディレクトリーで以下のコマンドを実行してください。</p>

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

<p><a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-top" title="top on 4.6. JBoss to Geronimo - Hibernate の移行">Back to Top</a></p>

<h2><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%BB%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4"></a>サンプル・アプリケーションのデプロイ</h2>

<p>サンプル・アプリケーションをデプロイする前に、このアプリケーションが必要とするデータ・ソースを構成する必要があります。JBoss でデータ・ソースの構成をデプロイするには、<b>&lt;brokerage_home&gt;\plan</b> ディレクトリーにある <b>mysql-ds.xml</b> ファイルを以下のディレクトリーにコピーしてください。</p>

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

<p>データベースのデプロイと同様に、JBoss でのオンライン取引アプリケーションのデプロイは、Ant でビルドした <b>brokerage.ear</b> ファイルを以下のディレクトリーにコピーしてください。</p>

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

<p>もし JBoss がすでに始動していたら、自動的にアプリケーションがデプロイされ、始動されます。そうでなければ、アプリケーションは次回始動時にデプロイされ、始動されます。&nbsp;</p>

<p><a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-top" title="top on 4.6. JBoss to Geronimo - Hibernate の移行">Back to Top</a></p>

<h2><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%BB%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%83%86%E3%82%B9%E3%83%88"></a>サンプル・アプリケーションのテスト</h2>

<p>アプリケーションをテストするには、ウェブ・ブラウザーを開き、以下の 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>オンライン取引アプリケーションのログイン画面が表示されます。user name 欄に j2ee 、password 欄に password を入力し、login をクリックしてください。以下の図のような available stocks ページが表示されます。アプリケーションは構成され、実行されています。 <div align="center"><img src="/confluence/download/attachments/83145/available.jpg" border="0" /></div><br/>
<a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-top" title="top on 4.6. JBoss to Geronimo - Hibernate の移行">Back to Top</a><br clear="all" />
<br clear="all" /></p>
<h1><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-Geronimo%E7%92%B0%E5%A2%83"></a>Geronimo 環境 <a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-Geronimo"></a></h1>

<p>以下の URL から Geronimo をダウンロードし、インストールしてください。</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>そこにあるリリース・ノートには、システム要件とインストール、始動方法がが明示されています。以下、この文章では Geronimo のインストール・ディレクトリーを <b>&lt;geronimo_home&gt;</b> とします。</p>

<p><a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-top" title="top on 4.6. JBoss to Geronimo - Hibernate の移行">Back to Top</a></p>

<h2><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%AE%E6%A7%8B%E6%88%90"></a>リソースの構成</h2>

<p>Geronimo でオンライン取引アプリケーションを実行するために、JBoss で利用したものと同じ MySQL データベース を利用します。Geronimo 環境に準備のためにするべき作業は、データ・ソースを構成するだけです。</p>

<h3><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-%E3%83%87%E3%83%BC%E3%82%BF%E3%83%BB%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%AE%E6%A7%8B%E6%88%90"></a>データ・ソースの構成</h3>

<p>データ・ソースのデプロイメント・プランで参照可能になるように、MySQL データベースのドライバーを Geronimo リポジトリーにコピーする必要があります。Geronimo リポジトリーは <b>&lt;geronimo_home&gt;/repository</b> ディレクトリにあります。このディレクトリーの中に <b>mysql/jars</b> というディレクトリーを作り、そこへ <b>mysql-connector-java-3.1.14-bin.jar</b> ファイルをコピーしてください。</p>

<p>データ・ソースのデプロイメント・プランを定義する必要があります。簡単になるように、サンプル・アプリケーションにはすでに <b>mysql-geronimo-plan.xml</b> というデプロイメント・プランが <b>&lt;brokerage_home&gt;\plan</b> ディレクトリーの中にあります。以下の例がデプロイメント・プランの中身です。</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>
	  <span class="code-tag">&lt;dep:dependency&gt;</span>
	    <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>デプロイメント・プランを作り、ドライバーをコピーしたら、次のステップは実際にデータ・ソースのコネクション・プールをデプロイすることです。もし Geronimo を始動していなければ、以下のコマンドで実行し、始動してください。</p>

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

<p>データ・ソースのコネクション・プールをデプロイするために、以下のコマンドを実行してください。&nbsp;</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>環境によりますが、以下のような確認メッセージが表示されるでしょう。</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><a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-top" title="top on 4.6. JBoss to Geronimo - Hibernate の移行">Back to Top</a></p>

<h1><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%83%BB%E3%83%90%E3%82%A4%E3%83%BB%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%81%AE%E7%A7%BB%E8%A1%8C"></a>ステップ・バイ・ステップの移行<a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-migration"></a></h1>

<p>Apache Geronimo はHARアーカイブ形式をサポートしていないので、今回は全てのクラスをWARアーカイブの中に格納します。このアプリケーションをGeronimoで動かすためにクラスを2つ作成する必要があります。ひとつはGeronimo用のTransactionManagerLookupクラスで、もうひとつはセッション・ファクトリーを入手するためのユーティリティ・クラスHibernateUtilです。 それ以外にTradeDispatcherServlet とTradeDAOクラスに若干の変更を加える必要があります。</p>

<p>手始めに、アプリケーションに加えるべき変更点を下記のリストで眺めてみましょう。</p>

<p><a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-TradeDAO" title="TradeDAO on 4.6. JBoss to Geronimo - Hibernate の移行">TradeDAO</a><br/>
<a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-HibernateUtil" title="HibernateUtil on 4.6. JBoss to Geronimo - Hibernate の移行">HibernateUtil</a><br/>
<a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-TradeDispatcherServlet" title="TradeDispatcherServlet on 4.6. JBoss to Geronimo - Hibernate の移行">TradeDispatcherServlet</a></p>

<h3><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-TradeDAO"></a>TradeDAO <a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-TradeDAO"></a></h3>

<p>JBoss環境に於いては、HibernateMBeanがグローバルJNDIコンテキストへのセッション・ファクトリーを作成・バインドしてくれます。この機構により、単純なルックアップだけでセッション・ファクトリーを入手できるようになるわけです。セッションはセッション・ファクトリー経由で入手することができます。</p>

<p><tt>}}{{{}TradeDAO.java</tt> は <tt>&lt;brokerage_home&gt;/src/com/dev/trade/dao</tt> ディレクトリーに存在します。</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>Excerpt from TradeDAO.java for JBoss JBoss用のTradeDAO.javaの抜粋</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>Geronimo環境ではセッション・ファクトリーを作成するための新しいユーティリティ・クラス、HibernateUtil classを作成することになります。<br/>
このクラスには、セッションを入手するための getCurrentSession()メソッドがあります。</p>

<p><tt>TradeDAO.java</tt> の冒頭の箇所を以下の抜粋に従って修正します。</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>Excerpt from TradeDAO.java for Geronimo Geronimo用のTradeDAO.javaの抜</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>以下の文字列を探索・置換します。<br/>
<tt><b>factory.getCurrentSession()</b></tt></p>

<p>を</p>

<p><tt><b>HibernateUtil.getCurrentSession()</b></tt><br/>
で置換します。</p>

<p><em>9箇所が置換されるはずです。</em></p>

<p>セッションを入手する方法が、Apache Geronimo上でアプリケーションを動かすためのコード上の相違点の代表的なものです。</p>

<h3><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-HibernateUtil"></a>HibernateUtil <a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-HibernateUtil"></a></h3>

<p>既に述べたとおり、このクラスはセッション・ファクトリーを作成し、アプリケーションにHibernateのセッションを提供するために使われます。このクラスのソース・コードは以下のようになります。</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> は <tt>&lt;brokerage_home&gt;/src/com/dev/trade/util</tt> ディレクトリーに配置します。ご参考までに、このファイルのコピーは既にサンプル・アプリケーションと一緒に提供されています。</p>

<h3><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-TradeDispatcherServlet"></a>TradeDispatcherServlet <a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-TradeDispatcherServlet"></a></h3>

<p>このクラスにもセッション・ファクトリーを入手する際の相違点があります。JBossではセッション・ファクトリーの入手はJNDIコンテキスト経由で行いましたが、Geronimoではユーティリティ・クラス経由で行います。</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>doGet method for JBoss JBoss用のdoGetメソッド</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> は <tt>&lt;brokerage_home&gt;/src/com/dev/trade/servlet</tt> ディレクトリーに配置されています。doGetメソッドを以下の例に従って置換してください。</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は色々なアプリケーション・サーバーようにトランザクション・マネージャーのルックアップ用のクラスを提供しています。残念ながら、Hibernate 3.2はApache Geronimo用のルックアップ用クラスを提供していませんので、自分たちで作らなくてはなりません。Geronimo用のトランザクション・マネージャーのルックアップ・クラスのコードは以下のようになります。</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>ご参考までに、このクラスは既に <tt>&lt;brokerage_home&gt;/TransactionManager</tt> ディレクトリーに配置されています。以下のようなディレクトリー構造を作り、そこに <tt>GeronimoTransactionManagerLookup.java</tt> をコピーしてください。</p>

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

<p>さて次にHibernateの構成ファイル hibernate-cfg.xml を作る必要があります。このファイルの中に必要なHibernateの構成上の属性を記述します。JBoss環境での <tt>hibernate-service.xml</tt> は hibernate-cfg.xml と同じ働きをしている点にご留意ください。ご参考までに、サンプルアプリケーションと共にこのファイルも既に <tt>&lt;brokerage_home&gt;/hibrenate</tt> ディレクトリーに提供されています。</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>各々のプロパティ毎の詳細な機能説明についてはHibernareのマニュアルを参照してください。</p>

<p>ビルド前の最後のステップとして、Geronimo固有のデプロイメント記述子である <b>geronimo-web.xml</b> を作成します。以下の例を参照してください。またご参考までにこのファイルは <tt>&lt;brokerage_home&gt;/web/descriptors/geronimo</tt> ディレクトリーに既に提供されています。</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><tt>&lt;hidden-classes&gt;</tt> エレメントは、warクラスローダーがクラス探索時にApache Geronimoの提供クラスを参照してしまうことで発生するかもしれないバーション不一致の問題を回避するための指定です。</p>

<p><a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-top" title="top on 4.6. JBoss to Geronimo - Hibernate の移行">Back to Top</a></p>

<h2><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%BB%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89"></a>サンプル・アプリケーションのビルド</h2>

<p>サンプル・アプリケーションをビルドするには以下のコマンドを実行します。</p>
<ul>
	<li>hibernate jar をクラスパスに追加してください。<tt>GeronimoTransactionManagerLookup</tt> クラスはhibernate と共にビルドする必要があります。貴方がHibernateのソースコードをダウンロードしていないとしても、hibernate jarをクラスパスに追加すればクラスをコンパイルできるようになります。その後、コンパイルしたクラスをhibernate jarファイルに追加します。</li>
</ul>


<p><tt><b>set CLASSPATH=%CLASSPATH%;&lt;hibernate_home&gt;/lib/hibernate3.jar</b></tt></p>
<ul>
	<li>クラスパスにgeronimoのカーネルを追加する<br/>
<tt><b>set CLASSPATH=%CLASSPATH%;&lt;geronimo_home&gt;/lib/geronimo-kernel-2.0.1.jar</b></tt></li>
</ul>


<ul>
	<li>今回のサンプルでは必要ありませんが、特定のクラスをご自分で追加するならお好みのツールを使って、GeronimoTransactionManagerLookup.classを <tt>&lt;hibernate_home&gt;/lib/hibernate3.jar</tt> ファイルの中の <tt>org\hibernate\transaction</tt> ディレクトリーに追加してください。</li>
</ul>


<ul>
	<li>では以下のコマンドを使って移行されたアプリケーションをビルドしてみます。</li>
</ul>


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

<p>今回のオンライン仲介サンプル・アプリケーションは単なるWebアプリケーションなので <b>war</b> ターゲットを使っています。JBossのセクションではwarとharをパッケージするためにear形式を使いましたが、har形式はGeronimoではサポートされていません。</p>

<p>実行の結果、<b>&lt;brokerage_home&gt;/geronimo-artefact</b> ディレクトリーに <b>brokerage.war</b> ができます。</p>

<p><b>&lt;brokerage_home&gt;/solutions</b> ディレクトリーにはコンパイルおよびGeronimo環境で稼動させるための移行済みのソースファイル類が含まれています。</p>

<p><a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-top" title="top on 4.6. JBoss to Geronimo - Hibernate の移行">Back to Top</a></p>

<h2><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-%E7%A7%BB%E8%A1%8C%E3%81%97%E3%81%9F%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%BB%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4"></a>移行したサンプル・アプリケーションのデプロイ</h2>

<p>移行したオンライン仲介サンプル・アプリケーションをデプロイするには、Geronimoサーバーが起動して正常稼動していることを確認してから以下のコマンドを実行します。</p>

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

<p>アプリケーションがデプロイされたら、Webブラウザーを開いて以下のURLにアクセスしてください。<br/>
<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>JBoss環境でアプリケーションをテストした時に使ったユーザー名、パスワードと同じものを指定してログインします。</p>

<p><a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-top" title="top on 4.6. JBoss to Geronimo - Hibernate の移行">Back to Top</a></p>

<h1><a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-%E3%82%B5%E3%83%9E%E3%83%AA%E3%83%BC"></a>サマリー <a name="4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-summary"></a></h1>

<p>この記事ではO/Rマッピング層にHibernateを使っているサンプル・アプリケーションをJBossからApache Geronimoへ移行する方法を紹介しました。JBossで提供されている機能・フィーチャーの全てが現時点のGeronimoでは実装されているわでけはないので、結果的に若干の追加のコーディングが必要でしたが、全体的な移行の難易度は低いものでした。</p>

<p><a href="#4.6.JBosstoGeronimo-Hibernate%E3%81%AE%E7%A7%BB%E8%A1%8C-top" title="top on 4.6. JBoss to Geronimo - Hibernate の移行">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