geronimo-scm mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From conflue...@apache.org
Subject [CONF] Apache Geronimo v2.1: Inbound JCA example (page created)
Date Thu, 28 Feb 2008 15:18:00 GMT
<html>
<head>
    <base href="http://cwiki.apache.org/confluence" />
    <style type="text/css">
    <!--
    body, p, td, table, tr, .bodytext, .stepfield {
	font-family: Verdana, arial, sans-serif;
	font-size: 11px;
	line-height: 16px;
	color: #000000;
	font-weight: normal;
}
#PageContent {
	text-align: left;
	background-color: #fff;
	padding: 0px;
	margin: 0px;
    padding-bottom:20px;
}
/*
** when this stylesheet is used for the Tiny MCE Wysiwyg editor's edit area, we can't
** use an id=PageContent or class=wiki-content, so we must
** set the body style to that used for PageContent, and p to that used for wiki-content.
*/

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

@media print {

body {
    background-color: #fff;
}

}

.monospaceInput {
    font:12px monospace
}

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

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

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

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

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

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

.focusedComment {
    background: #ffffce;
}

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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


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

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

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

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

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

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

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

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

.pagebody {
}

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

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

.newpagetitle {
    color: #ccc !important;
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.logocell {
    padding: 10px;
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.tableview table {
    margin: 0;
}

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

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

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

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

.error {
	background-color: #fcc;
}

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

.errorMessage {
	color: #c00;
}

.success {
	background-color: #dfd;
}

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

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

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

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

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

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

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

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

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

IMG.inline  {}

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

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

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

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

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

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

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

.greybackground {
    background: #f0f0f0
}

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

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

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

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

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

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

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

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

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

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

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

.rowAlternateNoBottomNoColor {
}

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

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

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

}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.toolbar .label {
    display: none;
}

.toolbar .operations {
    display: block;
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

.topBar {
    background-color: #003366;
}


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

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

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

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

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

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

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

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

#headerRow {
    padding: 10px;
}

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

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

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

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

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

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

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

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

.heatmap a {
    text-decoration:none;
}

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

.heatmap li {
    display: inline;
}

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

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

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

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

.linkerror { background-color: #fcc;}

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

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

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

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


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

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

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

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

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

.inputSection{
    margin-bottom:20px;
}

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

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

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

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

.topPadding
{
    margin-top: 20px;
}

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

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

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

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

    <div class="pageheader">
        <span class="pagetitle">
            Page Created :
            <a href="http://cwiki.apache.org/confluence/display/GMOxDOC21">GMOxDOC21</a> :
            <a href="http://cwiki.apache.org/confluence/display/GMOxDOC21/Inbound+JCA+example">Inbound JCA example</a>
        </span>
    </div>

     <p>
        <a href="http://cwiki.apache.org/confluence/display/GMOxDOC21/Inbound+JCA+example">Inbound JCA example</a>
        has been created by             <a href="http://cwiki.apache.org/confluence/display/~beckerdo">Dan Becker</a>
            <span class="smallfont">(Feb 28, 2008)</span>.
     </p>

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

/*]]>*/</style><div class="Scrollbar"><table class='ScrollbarTable'><tr><td class='ScrollbarPrevIcon'><a href="/confluence/display/GMOxDOC21/How+to+Access+Resources+via+JNDI"><img border='0' align='middle' src='/confluence/images/icons/back_16.gif' width='16' height='16'></a></td><td width='33%' class='ScrollbarPrevName'><a href="/confluence/display/GMOxDOC21/How+to+Access+Resources+via+JNDI">How to Access Resources via JNDI</a>&nbsp;</td><td width='33%' class='ScrollbarParent'><sup><a href="/confluence/display/GMOxDOC21/Sample+applications"><img border='0' align='middle' src='/confluence/images/icons/up_16.gif' width='8' height='8'></a></sup><a href="/confluence/display/GMOxDOC21/Sample+applications">Sample applications</a></td><td width='33%' class='ScrollbarNextName'>&nbsp;<a href="/confluence/display/GMOxDOC21/SPECjAppServer2004">SPECjAppServer2004</a></td><td class='ScrollbarNextIcon'><a href="/confluence/display/GMOxDOC21/SPECjAppServer2004"><img border='0' align='middle' src='/confluence/images/icons/forwd_16.gif' width='16' height='16'></a></td></tr></table></div>
<p><a name="InboundJCAexample-top"></a>&nbsp;</p>

<p>The J2EE Connector Architecture (JCA) provides a Java technology solution to the problem of connectivity between the many application containers and today's enterprise information systems (EIS). In the 1.5 release of the JCA specification, the architecture defines an inbound communication model, whereby the EIS initiates all communication to an EJB application. The mechanism allows the inbound resource adapters to invoke Enterprise Java Beans (EJB).</p>

<h1><a name="InboundJCAexample-Overview"></a>Overview <a name="InboundJCAexample-overview"></a></h1>

<p>This document will describe how to deploy an EJB application, so that it can receive inbound events from a JCA Adapter. It will first describe the key parts of the Resource Adapter that pertain to the inbound communication model, as well as the Geronimo-specific plans that will deploy the Resource Adapter stand-alone. It will then describe the<br/>
Enterprise Application that will be executed by the EIS, via the inbound communication mechanism.</p>

<h1><a name="InboundJCAexample-ResourceAdapter"></a>Resource Adapter <a name="InboundJCAexample-adapter"></a></h1>

<p>The code described in this section are classes that will be deployed as part of a resource adapter. For the most part, there is nothing Geronimo-specific about these files. However, the end of this section will discuss how to deploy the resource adapter into a Geronimo container.</p>

<p>In the JCA 1.5 specification, inbound adapters can support custom messaging formats. This allows a Message-Driven Bean (MDB) to implement any interface that has been defined by the inbound Resource Adapter. In the previous version of the JCA specification, Java Message Service (JMS) messages was the only mechanism for inbound communication, requiring the MDB to implement the interface javax.jms.MessageListener. With JCA 1.5, however, any interface definition can be used by a MDB to handle inbound requests.</p>

<h2><a name="InboundJCAexample-InterfaceDefinition"></a>Interface Definition</h2>

<p>For this example, the interface <b>com.sample.connector.EventListener</b> interface has been defined. This interface will be implemented by any MDB that will be called by the inbound Resource Adapter.</p>
<div class="code"><div class="codeHeader"><b>EventListener.java</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> com.sample.connector;

<span class="code-keyword">import</span> java.util.List;
<span class="code-keyword">import</span> javax.resource.ResourceException;

/**
 * An <span class="code-keyword">interface</span> allowing Events to be Handled.  Message-driven Beans implement
 * <span class="code-keyword">this</span> <span class="code-keyword">interface</span>, in order to receive inbound-events from our EIS via the JCA adapter.
 */
<span class="code-keyword">public</span> <span class="code-keyword">interface</span> EventListener {

    /**
     * Method to be called when a Event is handled.
     *
     * @param eventName the name of the event
     * @param paramList the parameters sent to the event
     *
     * @<span class="code-keyword">throws</span> ResourceException <span class="code-keyword">if</span> an error occurs
     */
    void handleEvent(<span class="code-object">String</span> eventName, List paramList) <span class="code-keyword">throws</span> ResourceException;
}</pre>
</div></div>

<h2><a name="InboundJCAexample-ActivationSpecimplementation"></a>ActivationSpec implementation</h2>

<p>Inbound resource adapters use implementations of the interface <b>javax.resource.spi.ActivationSpec</b>. The interface itself has no methods, but the class implementing the interface</p>
<ul>
	<li>must be a JavaBean, providing both getter and setter methods to the bean's fields</li>
	<li>must be serializable</li>
</ul>


<p>According the the API documentation, "the ActivationSpec implementation will hold the activation configuration information for a message endpoint". The message endpoint, in this case, will be an MDB in our enterprise application. Our ActivationSpec implementation is the class <b>com.sample.connector.EventActivationSpec.</b> Our example's ActivationSpec will store all the data required so that a connection can be opened, in order for the remote EIS system to call into the application container (machineName, port, user name, user password, and event pattern).</p>
<div class="code"><div class="codeHeader"><b>EventActivationSpec.java</b></div><div class="codeContent">
<pre class="code-java">/*
 * EventActivationSpec.java
 */

<span class="code-keyword">package</span> com.sample.connector;

<span class="code-keyword">import</span> java.io.Serializable;
<span class="code-keyword">import</span> javax.resource.spi.ActivationSpec;
<span class="code-keyword">import</span> javax.resource.spi.InvalidPropertyException;
<span class="code-keyword">import</span> javax.resource.spi.ResourceAdapter;

/**
 * Implementation of the &lt;code&gt;ActivationSpec&lt;/code&gt; <span class="code-keyword">interface</span>, which allows EIS Events
 * to be exposed to message-drive beans.  This &lt;code&gt;ActivationSpec&lt;/code&gt; is used to
 * support inbound connection from our EIS to a message-driven bean.  This will open
 * an EIS connection and use its event mechanism provided by the EIS-specific connection
 * class.  The connection to the EIS will be held open <span class="code-keyword">while</span> the application containing
 * the message-driven bean is available.
 */
<span class="code-keyword">public</span> class EventActivationSpec <span class="code-keyword">implements</span> ActivationSpec, Serializable  {

    <span class="code-keyword">private</span> ResourceAdapter resourceAdapter;     <span class="code-keyword">private</span> <span class="code-object">String</span> serverName;
    <span class="code-keyword">private</span> <span class="code-object">Integer</span> portNumber;
    <span class="code-keyword">private</span> <span class="code-object">String</span> userName;
    <span class="code-keyword">private</span> <span class="code-object">String</span> password;
    <span class="code-keyword">private</span> <span class="code-object">String</span> eventPatterns;<span class="code-comment">//A comma-delimeted string of patterns
</span>
    /**
     * Creates a <span class="code-keyword">new</span> instance of the EventActivationSpec class.
     */
    <span class="code-keyword">public</span> EventActivationSpec() {
    }

    /**
     * No validation is performed
     */
    <span class="code-keyword">public</span> void validate() <span class="code-keyword">throws</span> InvalidPropertyException {
    }

    <span class="code-comment">//javadoc inherited
</span>    <span class="code-keyword">public</span> ResourceAdapter getResourceAdapter() {
        <span class="code-keyword">return</span> resourceAdapter;
    }

    <span class="code-comment">//javadoc inherited
</span>    <span class="code-keyword">public</span> void setResourceAdapter(ResourceAdapter resourceAdapter) {
        <span class="code-keyword">this</span>.resourceAdapter = resourceAdapter;
    }     /**
     * Getter method <span class="code-keyword">for</span> the ServerName attribute.  This allows the server name
     * to be defined against a Connection pool
     *
     * @<span class="code-keyword">return</span> a &lt;code&gt;<span class="code-object">String</span>&lt;/code&gt; containing the server name value
     */
    <span class="code-keyword">public</span> <span class="code-object">String</span> getServerName() {
        <span class="code-keyword">return</span> serverName;
    }

    /**
     * Setter method <span class="code-keyword">for</span> the ServerName attribute.  This allows the server name to be
     * defined against a connection pool/.
     *
     * @param serverName the &lt;code&gt;<span class="code-object">String</span>&lt;/code&gt; that will be defined against <span class="code-keyword">this</span> attribute
     */
    <span class="code-keyword">public</span> void setServerName(<span class="code-object">String</span> serverName) {
        <span class="code-keyword">this</span>.serverName = serverName;
    }

    /**
     * Getter method <span class="code-keyword">for</span> the PortNumber attribute.  This allows the port number
     * to be defined against a Connection pool
     *
     * @<span class="code-keyword">return</span> a &lt;code&gt;<span class="code-object">Integer</span>&lt;/code&gt; containing the server port value
     */
    <span class="code-keyword">public</span> <span class="code-object">Integer</span> getPortNumber() {
        <span class="code-keyword">return</span> portNumber;
    }     /**
     * Setter method <span class="code-keyword">for</span> the PortNumber attribute.  This allows the server port to be
     * defined against a connection pool/.
     *
     * @param portNumber the &lt;code&gt;<span class="code-object">Integer</span>&lt;/code&gt; that will be defined against <span class="code-keyword">this</span> attribute
     */
    <span class="code-keyword">public</span> void setPortNumber(<span class="code-object">Integer</span> portNumber) {
        <span class="code-keyword">this</span>.portNumber = portNumber;
    }

    /**
     * Getter method <span class="code-keyword">for</span> the UserName attribute.  This allows the user name
     * to be defined against a Connection pool
     *
     * @<span class="code-keyword">return</span> a &lt;code&gt;<span class="code-object">String</span>&lt;/code&gt; containing the user name value
     */
    <span class="code-keyword">public</span> <span class="code-object">String</span> getUserName() {
        <span class="code-keyword">return</span> userName;
    }

    /**
     * Setter method <span class="code-keyword">for</span> the UserName attribute.  This allows the user name to be
     * defined against a connection pool/.
     *
     * @param userName the &lt;code&gt;<span class="code-object">String</span>&lt;/code&gt; that will be defined against <span class="code-keyword">this</span> attribute
     */
    <span class="code-keyword">public</span> void setUserName(<span class="code-object">String</span> userName) {
        <span class="code-keyword">this</span>.userName = userName;
    }
     /**
     * Getter method <span class="code-keyword">for</span> the Password attribute.  This allows the password
     * to be defined against a Connection pool
     *
     * @<span class="code-keyword">return</span> a &lt;code&gt;<span class="code-object">String</span>&lt;/code&gt; containing the password value
     */
    <span class="code-keyword">public</span> <span class="code-object">String</span> getPassword() {
        <span class="code-keyword">return</span> password;
    }

    /**
     * Setter method <span class="code-keyword">for</span> the Password attribute.  This allows the password to be
     * defined against a connection pool/.
     *
     * @param password the &lt;code&gt;<span class="code-object">String</span>&lt;/code&gt; that will be defined against <span class="code-keyword">this</span> attribute
     */
    <span class="code-keyword">public</span> void setPassword(<span class="code-object">String</span> password) {
        <span class="code-keyword">this</span>.password = password;
    }

    /**
     * Returns the event patterns that will be used when subscribing to Events.  This string can contain
     * comma-delimited value, in order to subscribe to multiple Events.
     *
     * @<span class="code-keyword">return</span> a &lt;code&gt;<span class="code-object">String</span>&lt;/code&gt; containing the event patterns that will be subscribed
     */
    <span class="code-keyword">public</span> <span class="code-object">String</span> getEventPatterns() {
        <span class="code-keyword">return</span> eventPatterns;
    }

    /**
     * Defines the event patterns that will be subscribed to by the message-driven beans.  The value can
     * contain comma-delimited patterns, such that multiple events can be subscribed to in the single bean.
     *
     * @param eventPatterns a &lt;code&gt;<span class="code-object">String</span>&lt;/code&gt; containing the single pattern or comma-delimited patterns
     */
    <span class="code-keyword">public</span> void setEventPatterns(<span class="code-object">String</span> eventPatterns) {
        <span class="code-keyword">this</span>.eventPatterns = eventPatterns;
    }
}</pre>
</div></div>

<h2><a name="InboundJCAexample-CommonDeploymentDescriptor"></a>Common Deployment Descriptor</h2>

<p>In the JCA deployment descriptor (ra.xml), there is a section that allows the adapter to associate an interface with the ActivationSpec implementation. This is required, so that the application container can ensure that mandatory properties are defined in the MDB that will be called by the adapter.</p>
<div class="code"><div class="codeHeader"><b>ra.xml</b></div><div class="codeContent">
<pre class="code-java">&lt;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&gt;
&lt;connector xmlns=<span class="code-quote">"http:<span class="code-comment">//java.sun.com/xml/ns/j2ee"</span>
</span>    xmlns:xsi=<span class="code-quote">"http:<span class="code-comment">//www.w3.org/2001/XMLSchema-instance"</span>
</span>    xmlns:schemaLocation=<span class="code-quote">"http:<span class="code-comment">//java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/connector_1_5.xsd"</span>
</span>    version=<span class="code-quote">"1.5"</span>&gt;
    &lt;display-name&gt;EIS Connector&lt;/display-name&gt;
    &lt;vendor-name&gt;My Component&lt;/vendor-name&gt;
    &lt;eis-type&gt;My Remote Server&lt;/eis-type&gt;
    &lt;resourceadapter-version&gt;1.0&lt;/resourceadapter-version&gt;
    &lt;resourceadapter&gt;
        &lt;resourceadapter-class&gt;com.sample.connector.MyResourceAdapter&lt;/resourceadapter-class&gt;
           &lt;!-- snip --&gt;
        &lt;inbound-resourceadapter&gt;
            &lt;messageadapter&gt;
                &lt;messagelistener&gt;
                    &lt;messagelistener-type&gt;com.sample.connector.EventListener&lt;/messagelistener-type&gt;
                    &lt;activationspec&gt;
                        &lt;activationspec-class&gt;com.sample.connector.EventActivationSpec&lt;/activationspec-class&gt;
                        &lt;required-config-property&gt;
                            &lt;config-property-name&gt;ServerName&lt;/config-property-name&gt;
                        &lt;/required-config-property&gt;
                        &lt;required-config-property&gt;
                            &lt;config-property-name&gt;PortNumber&lt;/config-property-name&gt;
                        &lt;/required-config-property&gt;
                        &lt;required-config-property&gt;
                            &lt;config-property-name&gt;UserName&lt;/config-property-name&gt;
                        &lt;/required-config-property&gt;
                        &lt;required-config-property&gt;
                            &lt;config-property-name&gt;Password&lt;/config-property-name&gt;
                        &lt;/required-config-property&gt;
                        &lt;required-config-property&gt;
                            &lt;config-property-name&gt;EventPatterns&lt;/config-property-name&gt;
                        &lt;/required-config-property&gt;
                    &lt;/activationspec&gt;
                &lt;/messagelistener&gt;
        &lt;/inbound-resourceadapter&gt;
        &lt;security-permission&gt;
            &lt;description&gt;Permissions allowed to the EIS Connector&lt;/description&gt;
            &lt;security-permission-spec/&gt;
        &lt;/security-permission&gt;
    &lt;/resourceadapter&gt;
&lt;/connector&gt;</pre>
</div></div>
<p>Once an ActivationSpec has been implemented, the Resource Adapter's <b>endpointActivation</b> method can be updated. The application container will call this method on the Resource Adapter when a MDB is deployed into the environment. This allows the inbound adapter to open any connections. The method's signature is</p>
<div class="code"><div class="codeContent">
<pre class="code-java"><span class="code-keyword">public</span> void endpointActivation(MessageEndpointFactory endpointFactory, ActivationSpec spec) <span class="code-keyword">throws</span> ResourceException</pre>
</div></div>
<p>The endpointFactory provides the ability to create new instances of MDBs, and the spec will be the implementation of ActivationSpec, which will contain all the required properties. The implementation of this method will be specific to the mechanism used by the EIS to support messaging. Typically, the resource adapter will define implementations of the <b>javax.resource.spi.work.Work</b> interface, which will service the inbound requests without directly creating new Threads.</p>

<p>Equally important is to implement the <b>endpointDeactivation</b> method.&nbsp; This allows the adapter to free any resources that were created when the endpoint was activated.</p>

<h2><a name="InboundJCAexample-GeronimoDeploymentDescriptor"></a>Geronimo Deployment Descriptor</h2>

<p>Finally, we've reached the Geronimo-specific details.&nbsp; The Geronimo Deployment Descriptor provides a section that defines specific inbound Resource Adapters.</p>
<div class="code"><div class="codeHeader"><b>geronimo-ra.xml</b></div><div class="codeContent">
<pre class="code-java">&lt;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&gt;
&lt;connector xmlns=<span class="code-quote">"http:<span class="code-comment">//geronimo.apache.org/xml/ns/j2ee/connector-1.2"</span>&gt;
</span>  &lt;dep:environment xmlns:dep=<span class="code-quote">"http:<span class="code-comment">//geronimo.apache.org/xml/ns/deployment-1.2"</span>&gt;
</span>    &lt;dep:moduleId&gt;
      &lt;dep:groupId&gt;com.sample&lt;/dep:groupId&gt;
      &lt;dep:artifactId&gt;myConnector&lt;/dep:artifactId&gt;
      &lt;dep:version&gt;1.0&lt;/dep:version&gt;
      &lt;dep:type&gt;rar&lt;/dep:type&gt;
    &lt;/dep:moduleId&gt;
    &lt;dep:dependencies/&gt;
    &lt;dep:hidden-classes/&gt;
    &lt;dep:non-overridable-classes/&gt;
  &lt;/dep:environment&gt;
  &lt;resourceadapter&gt;
    &lt;resourceadapter-instance&gt;
      &lt;resourceadapter-name&gt;MyInboundEvents&lt;/resourceadapter-name&gt;
      &lt;workmanager&gt;
        &lt;gbean-link&gt;DefaultWorkManager&lt;/gbean-link&gt;
      &lt;/workmanager&gt;
    &lt;/resourceadapter-instance&gt;
  &lt;/resourceadapter&gt;
&lt;/connector&gt;</pre>
</div></div>
<p>When deploying the adapter's RAR file with the above deployment plan, a single inbound adapter will be created, named <b>MyInboundEvents</b>.</p>

<h1><a name="InboundJCAexample-EJBApplication"></a>EJB Application <a name="InboundJCAexample-application"></a></h1>

<p>At this point, we've defined and deployed our resource adapter into the Geronimo server instance.&nbsp; Now, an EJB application can be written and deployed that contains a Message-Driven Bean that will be called by the inbound Resource Adapter when it receives a message from the remote EIS.</p>

<p>In this example, a Message-Driven Bean implements the EventListener interface that was defined by the Resource Adapter.</p>
<div class="code"><div class="codeHeader"><b>EventBean.java</b></div><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> com.sample.eventDemo.message;

<span class="code-keyword">import</span> com.sample.connector.EventListener;
<span class="code-keyword">import</span> java.util.List;
<span class="code-keyword">import</span> javax.ejb.ActivationConfigProperty;
<span class="code-keyword">import</span> javax.ejb.MessageDriven;
<span class="code-keyword">import</span> javax.resource.ResourceException;

/**
 * Message-driven Bean, listening <span class="code-keyword">for</span> Events
 */
@MessageDriven(
    name=<span class="code-quote">"EventBean"</span>,
    messageListenerInterface=EventListener.class,
    activationConfig={
        @ActivationConfigProperty(propertyName=<span class="code-quote">"ServerName"</span>,propertyValue=<span class="code-quote">"fozzie"</span>),
        @ActivationConfigProperty(propertyName=<span class="code-quote">"PortNumber"</span>,propertyValue=<span class="code-quote">"40100"</span>),
        @ActivationConfigProperty(propertyName=<span class="code-quote">"UserName"</span>,propertyValue=<span class="code-quote">"user"</span>),
        @ActivationConfigProperty(propertyName=<span class="code-quote">"Password"</span>,propertyValue=<span class="code-quote">"pwd"</span>),
        @ActivationConfigProperty(propertyName=<span class="code-quote">"EventPatterns"</span>,propertyValue=<span class="code-quote">"myPattern"</span>)
    }
)
<span class="code-keyword">public</span> class EventBean <span class="code-keyword">implements</span> EventListener {

    /**
     * Method that will be called by the inbound Event handler
     */
    <span class="code-keyword">public</span> void handleEvent(<span class="code-object">String</span> eventName, List paramList) <span class="code-keyword">throws</span> ResourceException {
        <span class="code-object">System</span>.out.println(<span class="code-quote">"In MDB: "</span> + eventName + <span class="code-quote">" with params "</span> + paramList.toString());
    }
 }</pre>
</div></div>
<p>The bean doesn't do much, but it will show that the bean is being executed. However, it is using the ActivationConfigProperty annotation to define the properties required by the inbound resource adapter. These values will be defined against the appropriate ActivationSpec (in this case, the EventActivationSpec), which will be passed to the resource adapter's endpointActivation method.</p>

<h2><a name="InboundJCAexample-GeronimoDeploymentDescriptor"></a>Geronimo Deployment Descriptor</h2>

<p>The final piece is to associate the MDB with the inbound Resource Adapter MyInboundEvents that was defined when the Resource Adapter was deployed into the Geronimo container. This is done in the EJB's Geronimo Deployment Descriptor, <b>openejb-jar.xml</b>.</p>
<div class="code"><div class="codeHeader"><b>openejb-jar.xml</b></div><div class="codeContent">
<pre class="code-java">&lt;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&gt;
&lt;openejb-jar
        xmlns=<span class="code-quote">"http:<span class="code-comment">//www.openejb.org/xml/ns/openejb-jar-2.1"</span>
</span>        xmlns:naming=<span class="code-quote">"http:<span class="code-comment">//geronimo.apache.org/xml/ns/naming-1.1"</span>
</span>        xmlns:security=<span class="code-quote">"http:<span class="code-comment">//geronimo.apache.org/xml/ns/security-1.1"</span>
</span>        xmlns:sys=<span class="code-quote">"http:<span class="code-comment">//geronimo.apache.org/xml/ns/deployment-1.2"</span>&gt;
</span>    &lt;sys:environment&gt;
        &lt;sys:moduleId&gt;
            &lt;sys:groupId&gt;com.sample.connectorDemo&lt;/sys:groupId&gt;
            &lt;sys:artifactId&gt;SampleEventHandler&lt;/sys:artifactId&gt;
            &lt;sys:version&gt;1.1&lt;/sys:version&gt;
            &lt;sys:type&gt;car&lt;/sys:type&gt;
        &lt;/sys:moduleId&gt;
        &lt;sys:dependencies&gt;
            &lt;sys:dependency&gt;
                &lt;sys:groupId&gt;com.sample&lt;/sys:groupId&gt;
                &lt;sys:artifactId&gt;myConnector&lt;/sys:artifactId&gt;
                &lt;sys:version&gt;1.0&lt;/sys:version&gt;
                &lt;sys:type&gt;rar&lt;/sys:type&gt;
            &lt;/sys:dependency&gt;
        &lt;/sys:dependencies&gt;
        &lt;sys:hidden-classes/&gt;
        &lt;sys:non-overridable-classes/&gt;
    &lt;/sys:environment&gt;
    &lt;enterprise-beans&gt;
        &lt;message-driven&gt;
            &lt;ejb-name&gt;EventBean&lt;/ejb-name&gt;
            &lt;resource-adapter&gt;
                &lt;resource-link&gt;MyInboundEvents&lt;/resource-link&gt;
            &lt;/resource-adapter&gt;
        &lt;/message-driven&gt;
    &lt;/enterprise-beans&gt;
&lt;/openejb-jar&gt;</pre>
</div></div>
<p>In this file, we're associating the EventBean with the MyInboundEvents adapter.</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