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.2: jms-mdb - JMS and MDB Sample Application (page edited)
Date Thu, 13 Nov 2008 07:53:01 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/GMOxDOC22">GMOxDOC22</a> :
            <a href="http://cwiki.apache.org/confluence/display/GMOxDOC22/jms-mdb+-+JMS+and+MDB+Sample+Application">jms-mdb - JMS and MDB Sample Application</a>
        </span>
    </div>

     <p>
        <a href="http://cwiki.apache.org/confluence/display/GMOxDOC22/jms-mdb+-+JMS+and+MDB+Sample+Application">jms-mdb - JMS and MDB Sample Application</a>
        has been edited by             <a href="http://cwiki.apache.org/confluence/display/~dblevins">David Blevins</a>
            <span class="smallfont">(Aug 11, 2008)</span>.
     </p>
    <p>
      Change summary:
      <div class="greybox wiki-content"><p>updated to openejb-jar-2.2.xsd</p></div>
    </p>
     <p>
                 <a href="http://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=93370&originalVersion=7&revisedVersion=8">(View changes)</a>
     </p>

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

/*]]>*/</style><div class="Scrollbar"><table class='ScrollbarTable'><tr><td class='ScrollbarPrevIcon'><a href="/confluence/display/GMOxDOC22/jaxws-calculator+-+Simple+Web+Service+with+JAX-WS"><img border='0' align='middle' src='/confluence/images/icons/back_16.gif' width='16' height='16'></a></td><td width='33%' class='ScrollbarPrevName'><a href="/confluence/display/GMOxDOC22/jaxws-calculator+-+Simple+Web+Service+with+JAX-WS">jaxws-calculator - Simple Web Service with JAX-WS</a>&nbsp;</td><td width='33%' class='ScrollbarParent'><sup><a href="/confluence/display/GMOxDOC22/Sample+applications"><img border='0' align='middle' src='/confluence/images/icons/up_16.gif' width='8' height='8'></a></sup><a href="/confluence/display/GMOxDOC22/Sample+applications">Sample applications</a></td><td width='33%' class='ScrollbarNextName'>&nbsp;<a href="/confluence/display/GMOxDOC22/ldap-sample-app+-+LDAP+Sample+Application">ldap-sample-app - LDAP Sample Application</a></td><td class='ScrollbarNextIcon'><a href="/confluence/display/GMOxDOC22/ldap-sample-app+-+LDAP+Sample+Application"><img border='0' align='middle' src='/confluence/images/icons/forwd_16.gif' width='16' height='16'></a></td></tr></table></div>
<p><a name="jms-mdb-JMSandMDBSampleApplication-top"></a><br/>
Asynchronous processing is often appropriate under requirements to maximize throughput possibly at the expense of latency. Java Message Service (JMS) supports a considerable range of asynchronous processing scenarios.  Generally it is most appropriate when processing may be divided among a set of components that are under the control of one organization and have reasonably reliable inter-component communication. When the content or format of data to be transferred between components needs to be negotiated among several organizations or communication is less reliable web service solutions may be more appropriate.  When the components are sufficiently lightweight or coupled a SEDA solution may be more appropriate.</p>

<p>Javaee message driven beans provide convenient support for components that need to process only one, independent message at a time.  More complicated scenarios such as components that need to receive two or more messages to proceed or require in-order delivery are usually better handled with jms apis directly or message routing systems.</p>

<p>This sample provides a very simple example of an MDB supplied from a jms queue.  There is a web app to feed the queue.</p>

<p>This article is organized into following sections.</p>
<ul>
	<li>Overview of JMS in Geronimo/ActiveMQ Enviroment</li>
	<li>Application Overview</li>
	<li>Configuring, Building and Deploying the Sample Application</li>
	<li>Testing of the Sample Application</li>
	<li>Summary</li>
</ul>


<h1><a name="jms-mdb-JMSandMDBSampleApplication-OverviewofJMSinGeronimo%2FActiveMQEnviroment"></a>Overview of JMS in Geronimo/ActiveMQ Enviroment <a name="jms-mdb-JMSandMDBSampleApplication-overview"></a></h1>

<p>Geronimo uses ActiveMQ as the default jms provider. JMS connectivity is provided through the J2CA connector provided by ActiveMQ.  Deploying an instance of this resource adapter sets up connection factories and destinations for use by your application.  By default Geronimo starts up an ActiveMQ message broker in the geronimo vm, but the resource adapter can be configured to connect to any ActiveMQ broker whether running inside geronimo or not.</p>

<p>ActiveMQ supports a large variety of transports (such as TCP, SSL, UDP, multicast, intra-JVM, and NIO) and client interactions (such as push, pull, and publish/subscribe).</p>

<h1><a name="jms-mdb-JMSandMDBSampleApplication-ApplicationOverview"></a>Application Overview <a name="jms-mdb-JMSandMDBSampleApplication-application"></a></h1>

<p>The order processing application has a message queue for orders. Order requests can be generated and sent via the web application. When order requests are received on the order queue, a MDB will be triggered.</p>

<h2><a name="jms-mdb-JMSandMDBSampleApplication-Applicationcontents"></a>Application contents</h2>

<p>The core of the order placement application will be deployed as an EAR to the application server. Overview of the contents of EAR is given in the following depiction.</p>
<div class="code"><div class="codeContent">
<pre class="code-java">|-jms-mdb-ear-{version}.ear
   |- geronimo-activemq-ra-{geronimoVersion}.rar
   |- jms-mdb-ejb-{version}.jar
   |- jms-mdb-war-{version}.war
       |- index.jsp
       |- error.jsp
       |- WEB-INF
           |- web.xml
           |- classes
   |- META-INF
       |- application.xml</pre>
</div></div>

<h3><a name="jms-mdb-JMSandMDBSampleApplication-MDBImplementation"></a>MDB Implementation</h3>

<p>The Message-Driven Bean uses the @MessageDriven annotation to replace the declaration of this MDB in the ejb-jar.xml file. By providing the annotation with further information it knows to look for a destination (in this case it happens to be a queue) to process. So this MDB will sit there and process messages passed into the 'OrderQueue.' The end result is that is echoes this message to the screen.</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>OrderRecvMDB.java</b></div><div class="codeContent">
<pre class="code-java"><span class="code-comment">//
</span><span class="code-comment">// MessageDrivenBean that listens to items on the
</span><span class="code-comment">// 'OrderQueue' queue and processes them accordingly.
</span><span class="code-comment">//
</span>@MessageDriven(activationConfig = {
    @ActivationConfigProperty(propertyName=<span class="code-quote">"destinationType"</span>, propertyValue=<span class="code-quote">"javax.jms.Queue"</span>),
    @ActivationConfigProperty(propertyName=<span class="code-quote">"destination"</span>, propertyValue=<span class="code-quote">"OrderQueue"</span>)
})
<span class="code-keyword">public</span> class OrderRecvMDB <span class="code-keyword">implements</span> MessageListener{

    <span class="code-keyword">public</span> void onMessage(Message message) {
        TextMessage textMessage = (TextMessage) message;
        <span class="code-keyword">try</span> {
            <span class="code-object">System</span>.out.println(<span class="code-quote">"(mdb) Order Received \n"</span>+ textMessage.getText());
        } <span class="code-keyword">catch</span> (JMSException e) {
            e.printStackTrace();
        }
    }
}</pre>
</div></div>
<p>In this application there is a MDB that will listen on <b>OrderQueue</b>. The openejb-jar section of the geronimo plan indicates that the OrderRecvMDB MDB uses the <b>jms-resources</b> resource adapter instance.</p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>openejb-jar.xml</b></div><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;openejb-jar xmlns=<span class="code-quote">"http://openejb.apache.org/xml/ns/openejb-jar-2.2"</span>&gt;</span>
    <span class="code-tag">&lt;enterprise-beans&gt;</span>
        <span class="code-tag">&lt;message-driven&gt;</span>
            <span class="code-tag">&lt;ejb-name&gt;</span>OrderRecvMDB<span class="code-tag">&lt;/ejb-name&gt;</span>
            <span class="code-tag">&lt;resource-adapter&gt;</span>
                <span class="code-tag">&lt;resource-link&gt;</span>jms-resources<span class="code-tag">&lt;/resource-link&gt;</span>
            <span class="code-tag">&lt;/resource-adapter&gt;</span>
        <span class="code-tag">&lt;/message-driven&gt;</span>
    <span class="code-tag">&lt;/enterprise-beans&gt;</span>
<span class="code-tag">&lt;/openejb-jar&gt;</span></pre>
</div></div>

<p>The connector section of the geronimo plan configures a resource adapter instance named "jms-resources" that has a ConnectionFactory to be used by the web client and the Order queue used by both client and mdb.</p>

<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>jms-resources.xml</b></div><div class="codeContent">
<pre class="code-xml"><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;resourceadapter&gt;</span>
                <span class="code-tag">&lt;resourceadapter-instance&gt;</span>
                    <span class="code-tag">&lt;resourceadapter-name&gt;</span>jms-resources<span class="code-tag">&lt;/resourceadapter-name&gt;</span>
                    <span class="code-tag">&lt;nam:workmanager <span class="code-keyword">xmlns:nam</span>=<span class="code-quote">"http://geronimo.apache.org/xml/ns/naming-1.2"</span>&gt;</span>
                        <span class="code-tag">&lt;nam:gbean-link&gt;</span>DefaultWorkManager<span class="code-tag">&lt;/nam:gbean-link&gt;</span>
                    <span class="code-tag">&lt;/nam:workmanager&gt;</span>
                <span class="code-tag">&lt;/resourceadapter-instance&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.jms.ConnectionFactory<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>CommonConnectionFactory<span class="code-tag">&lt;/name&gt;</span>
                            <span class="code-tag">&lt;implemented-interface&gt;</span>javax.jms.QueueConnectionFactory<span class="code-tag">&lt;/implemented-interface&gt;</span>
                            <span class="code-tag">&lt;implemented-interface&gt;</span>javax.jms.TopicConnectionFactory<span class="code-tag">&lt;/implemented-interface&gt;</span>
                            <span class="code-tag">&lt;connectionmanager&gt;</span>
                                <span class="code-tag">&lt;xa-transaction&gt;</span>
                                    <span class="code-tag">&lt;transaction-caching/&gt;</span>
                                <span class="code-tag">&lt;/xa-transaction&gt;</span>
                                <span class="code-tag">&lt;single-pool&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;adminobject&gt;</span>
                <span class="code-tag">&lt;adminobject-interface&gt;</span>javax.jms.Queue<span class="code-tag">&lt;/adminobject-interface&gt;</span>
                <span class="code-tag">&lt;adminobject-class&gt;</span>org.apache.activemq.command.ActiveMQQueue<span class="code-tag">&lt;/adminobject-class&gt;</span>
                <span class="code-tag">&lt;adminobject-instance&gt;</span>
                    <span class="code-tag">&lt;message-destination-name&gt;</span>OrderQueue<span class="code-tag">&lt;/message-destination-name&gt;</span>
                    <span class="code-tag">&lt;config-property-setting name=<span class="code-quote">"PhysicalName"</span>&gt;</span>OrderQueue<span class="code-tag">&lt;/config-property-setting&gt;</span>
                <span class="code-tag">&lt;/adminobject-instance&gt;</span>
            <span class="code-tag">&lt;/adminobject&gt;</span>
        <span class="code-tag">&lt;/connector&gt;</span></pre>
</div></div>

<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>application.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;application xmlns=<span class="code-quote">"http://java.sun.com/xml/ns/javaee"</span> <span class="code-keyword">xmlns:xsi</span>=<span class="code-quote">"http://www.w3.org/2001/XMLSchema-instance"</span> 
             xsi:schemaLocation=<span class="code-quote">"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd"</span> version=<span class="code-quote">"5"</span>&gt;
  <span class="code-tag">&lt;description&gt;</span>Geronimo Sample EAR for jms-mdb-sample<span class="code-tag">&lt;/description&gt;</span>
  <span class="code-tag">&lt;display-name&gt;</span>Geronimo Sample EAR for jms-mdb-sample<span class="code-tag">&lt;/display-name&gt;</span>
  <span class="code-tag">&lt;module&gt;</span>
    <span class="code-tag">&lt;connector&gt;</span>geronimo-activemq-ra-2.0-SNAPSHOT.rar<span class="code-tag">&lt;/connector&gt;</span>
  <span class="code-tag">&lt;/module&gt;</span>
  <span class="code-tag">&lt;module&gt;</span>
    <span class="code-tag">&lt;ejb&gt;</span>jms-mdb-sample-ejb-2.0-SNAPSHOT.jar<span class="code-tag">&lt;/ejb&gt;</span>
  <span class="code-tag">&lt;/module&gt;</span>
  <span class="code-tag">&lt;module&gt;</span>
    <span class="code-tag">&lt;web&gt;</span>
      <span class="code-tag">&lt;web-uri&gt;</span>jms-mdb-sample-war-2.0-SNAPSHOT.war<span class="code-tag">&lt;/web-uri&gt;</span>
      <span class="code-tag">&lt;context-root&gt;</span>/order<span class="code-tag">&lt;/context-root&gt;</span>
    <span class="code-tag">&lt;/web&gt;</span>
  <span class="code-tag">&lt;/module&gt;</span>
<span class="code-tag">&lt;/application&gt;</span></pre>
</div></div>

<h3><a name="jms-mdb-JMSandMDBSampleApplication-ClientImplementation"></a>Client Implementation</h3>

<p>The <b>OrderSenderServlet.java</b> servlet will parse the web form, create a message, and send that message to the OrderQueue via the CommonConnectoryFactory. <table cellpadding='5' width='85%' cellspacing='8px' class='noteMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>

<p>Please note that Geronimo ignores the 'mappedName' configuration attribute for @Resource. Instead, use 'name' when annotating.</p></td></tr></table></p>
<div class="code" style="border-style: solid; "><div class="codeHeader" style="border-bottom-style: solid; "><b>OrderSenderServlet.java</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">public</span> class OrderSenderServlet <span class="code-keyword">extends</span> HttpServlet {

    @Resource(name=<span class="code-quote">"CommonConnectionFactory"</span>)
    <span class="code-keyword">private</span> ConnectionFactory factory;

    @Resource(name=<span class="code-quote">"OrderQueue"</span>)
    <span class="code-keyword">private</span> Queue receivingQueue;

    <span class="code-keyword">public</span> void init() <span class="code-keyword">throws</span> ServletException {
        <span class="code-keyword">super</span>.init();
    }

    <span class="code-keyword">protected</span> void doGet(HttpServletRequest req, HttpServletResponse res) <span class="code-keyword">throws</span> ServletException, IOException {
        manageOrders(req,res);
    }

    <span class="code-keyword">protected</span> void doPost(HttpServletRequest req, HttpServletResponse res) <span class="code-keyword">throws</span> ServletException, IOException {
        doGet(req,res);
    }

    <span class="code-keyword">private</span> void manageOrders(HttpServletRequest req, HttpServletResponse res) <span class="code-keyword">throws</span> ServletException, IOException{
        <span class="code-object">String</span> path = <span class="code-quote">"/error.jsp"</span>;
        Connection connection = <span class="code-keyword">null</span>;
	MessageProducer messageProducer = <span class="code-keyword">null</span>;
	Session sess = <span class="code-keyword">null</span>;
	<span class="code-keyword">try</span>
        {
	    <span class="code-object">String</span> customerId = req.getParameter(<span class="code-quote">"customerId"</span>);
	    <span class="code-object">String</span> orderId = req.getParameter(<span class="code-quote">"orderId"</span>);
	    <span class="code-object">String</span> qty = req.getParameter(<span class="code-quote">"quantity"</span>);
	    <span class="code-object">String</span> model = req.getParameter(<span class="code-quote">"model"</span>);

	    <span class="code-keyword">if</span>(!customerId.equals(<span class="code-quote">"") &amp;&amp; !orderId.equals("</span><span class="code-quote">") &amp;&amp; !qty.equals("</span>")){
	    	<span class="code-object">System</span>.out.println(<span class="code-quote">"(client) Start Sending Order Request"</span>);
	    	<span class="code-comment">// creating online order request
</span>	    	<span class="code-object">String</span> orderRequest = <span class="code-quote">"&lt;Order orderId=\"</span><span class="code-quote">"+orderId+"</span>\<span class="code-quote">" custId=\"</span><span class="code-quote">"+customerId+"</span>\<span class="code-quote">" qty=\"</span><span class="code-quote">"+qty+"</span>\<span class="code-quote">" model=\"</span><span class="code-quote">"+model+"</span>\<span class="code-quote">"/&gt;"</span> ;
		connection = factory.createConnection();
		sess = connection.createSession(<span class="code-keyword">false</span>, Session.AUTO_ACKNOWLEDGE);
		path = <span class="code-quote">"/index.jsp"</span>;
		TextMessage msg = sess.createTextMessage(<span class="code-quote">"&lt;OrderId="</span> + orderId + <span class="code-quote">" CustomerId="</span> + customerId
							+ <span class="code-quote">" Quantity="</span> + qty + <span class="code-quote">" Model="</span> + model + <span class="code-quote">"&gt;"</span> );
		messageProducer = sess.createProducer(receivingQueue);
		messageProducer.send(msg);
		<span class="code-object">System</span>.out.println(<span class="code-quote">"(client) Order Request Send"</span>);
	    } <span class="code-keyword">else</span>{
	    	<span class="code-object">String</span> error = "";

	    	<span class="code-keyword">if</span>(customerId.equals("")){
	    	    error = <span class="code-quote">"Customer Id Cannot be Empty"</span>;
	    	}<span class="code-keyword">else</span> <span class="code-keyword">if</span>(orderId.equals("")){
	    	    error = <span class="code-quote">"Order Id Cannot be Empty"</span>;
	    	}<span class="code-keyword">else</span> <span class="code-keyword">if</span>(qty.equals("")){
	    	    error = <span class="code-quote">"Quantity Cannot be Empty"</span>;
	    	}
	    	req.setAttribute(<span class="code-quote">"error"</span>,error);
	    }
        } <span class="code-keyword">catch</span> (Exception e)
        {
            <span class="code-object">System</span>.out.println(<span class="code-quote">"Error "</span>+e);
            e.printStackTrace();
        } <span class="code-keyword">finally</span> {
            <span class="code-keyword">try</span> {
                <span class="code-keyword">if</span>(messageProducer != <span class="code-keyword">null</span>) messageProducer.close();
                <span class="code-keyword">if</span>(sess != <span class="code-keyword">null</span>)sess.close();
                <span class="code-keyword">if</span>(connection!= <span class="code-keyword">null</span>)connection.close();
            } <span class="code-keyword">catch</span> (JMSException e) {
                e.printStackTrace();
            }
        }
        getServletContext().getRequestDispatcher(path).forward(req,res);
    }
}</pre>
</div></div>
<p><b>web.xml</b> of the archive has the relevant configurations for the both queue connection factory and the queue, which is essential to refer to resources in a local enviroment.</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 version=<span class="code-quote">"2.5"</span> xmlns=<span class="code-quote">"http://java.sun.com/xml/ns/javaee"</span> <span class="code-keyword">xmlns:xsi</span>=<span class="code-quote">"http://www.w3.org/2001/XMLSchema-instance"</span>
                       xsi:schemaLocation=<span class="code-quote">"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</span>&gt;
    <span class="code-tag">&lt;description&gt;</span>JMS Servlet Sample<span class="code-tag">&lt;/description&gt;</span>
    <span class="code-tag">&lt;servlet&gt;</span>
        <span class="code-tag">&lt;servlet-name&gt;</span>OrderSenderServlet<span class="code-tag">&lt;/servlet-name&gt;</span>
        <span class="code-tag">&lt;servlet-class&gt;</span>org.apache.geronimo.samples.order.OrderSenderServlet<span class="code-tag">&lt;/servlet-class&gt;</span>
        <span class="code-tag">&lt;load-on-startup&gt;</span>0<span class="code-tag">&lt;/load-on-startup&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>OrderSenderServlet<span class="code-tag">&lt;/servlet-name&gt;</span>
        <span class="code-tag">&lt;url-pattern&gt;</span>/order<span class="code-tag">&lt;/url-pattern&gt;</span>
    <span class="code-tag">&lt;/servlet-mapping&gt;</span>

    <span class="code-tag">&lt;resource-ref&gt;</span>
	<span class="code-tag">&lt;res-ref-name&gt;</span>CommonConnectionFactory<span class="code-tag">&lt;/res-ref-name&gt;</span>
	<span class="code-tag">&lt;res-type&gt;</span>javax.jms.QueueConnectionFactory<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;es-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;message-destination-ref&gt;</span>
	<span class="code-tag">&lt;message-destination-ref-name&gt;</span>OrderQueue<span class="code-tag">&lt;/message-destination-ref-name&gt;</span>
	<span class="code-tag">&lt;message-destination-type&gt;</span>javax.jms.Queue<span class="code-tag">&lt;/message-destination-type&gt;</span>
	<span class="code-tag">&lt;message-destination-usage&gt;</span>Produces<span class="code-tag">&lt;/message-destination-usage&gt;</span>
	<span class="code-tag">&lt;message-destination-link&gt;</span>OrderQueue<span class="code-tag">&lt;/message-destination-link&gt;</span>
    <span class="code-tag">&lt;/message-destination-ref&gt;</span>

    <span class="code-tag">&lt;welcome-file-list&gt;</span>
        <span class="code-tag">&lt;welcome-file&gt;</span>/index.jsp<span class="code-tag">&lt;/welcome-file&gt;</span>
    <span class="code-tag">&lt;/welcome-file-list&gt;</span>

<span class="code-tag">&lt;/web-app&gt;</span></pre>
</div></div><table cellpadding='5' width='85%' cellspacing='8px' class='noteMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
<p>Please note that this web application supports Servlet 2.5 specification. Some of the configurations in older versions (2.4) are slightly different than given in the above web.xml. </p></td></tr></table>

<p>The geronimo plan does not need to include details about the web component as the annotations will help resolve the queue or connection factory references.</p>

<h1><a name="jms-mdb-JMSandMDBSampleApplication-TestingoftheSampleApplication"></a>Testing of the Sample Application <a name="jms-mdb-JMSandMDBSampleApplication-testing"></a></h1>

<p>To test the sample web application open a browser and type <span class="nobr"><a href="http://localhost:8080/order" title="Visit page outside Confluence" rel="nofollow">http://localhost:8080/order<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>. It will forward you in to the Order Management Welcome page. Then user has to fill the necessary information for the order placement and submit it.</p>

<p><div align="center"><img src="/confluence/download/attachments/93370/orderPlacementApp.png" border="0" /></div></p>

<p>After processing an order you will see the message printed to your console.</p>

<h1><a name="jms-mdb-JMSandMDBSampleApplication-Summary"></a>Summary <a name="jms-mdb-JMSandMDBSampleApplication-summary"></a></h1>

<p>This article has demonstrated the use of JMS features in Apache Geronimo with the ActiveMQ JMS server.</p>

<p>Some of the highlights of this article:</p>
<ul>
	<li>Define JMS connection factories and related queues in a Geronimo enviroment.</li>
	<li>Message Driven Beans are the components listening on JMS queues providing by the J2EE container.</li>
</ul>
</div>


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

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

</div>

</body>
</html>


Mime
View raw message