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

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

@media print {

body {
    background-color: #fff;
}

}

.monospaceInput {
    font:12px monospace
}

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

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

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

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

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

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

.focusedComment {
    background: #ffffce;
}

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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


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

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

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

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

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

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

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

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

.pagebody {
}

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

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

.newpagetitle {
    color: #ccc !important;
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.logocell {
    padding: 10px;
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.tableview table {
    margin: 0;
}

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

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

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

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

.error {
	background-color: #fcc;
}

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

.errorMessage {
	color: #c00;
}

.success {
	background-color: #dfd;
}

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

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

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

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

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

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

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

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

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

IMG.inline  {}

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

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

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

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

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

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

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

.greybackground {
    background: #f0f0f0
}

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

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

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

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

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

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

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

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

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

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

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

.rowAlternateNoBottomNoColor {
}

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

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

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

}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.toolbar .label {
    display: none;
}

.toolbar .operations {
    display: block;
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

.topBar {
    background-color: #003366;
}


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

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

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

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

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

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

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

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

#headerRow {
    padding: 10px;
}

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

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

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

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

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

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

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

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

.heatmap a {
    text-decoration:none;
}

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

.heatmap li {
    display: inline;
}

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

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

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

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

.linkerror { background-color: #fcc;}

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

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

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

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


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

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

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

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

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

.inputSection{
    margin-bottom:20px;
}

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

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

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

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

.topPadding
{
    margin-top: 20px;
}

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

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

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

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

    <div class="pageheader">
        <span class="pagetitle">
            Page Edited :
            <a href="http://cwiki.apache.org/confluence/display/GMOxDOC22">GMOxDOC22</a> :
            <a href="http://cwiki.apache.org/confluence/display/GMOxDOC22/Client+JNDI+Names">Client JNDI Names</a>
        </span>
    </div>

     <p>
        <a href="http://cwiki.apache.org/confluence/display/GMOxDOC22/Client+JNDI+Names">Client JNDI Names</a>
        has been edited by             <a href="http://cwiki.apache.org/confluence/display/~chirunhua@gmail.com">Runhua Chi</a>
            <span class="smallfont">(Jun 05, 2009)</span>.
     </p>
    
     <p>
                 <a href="http://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=93384&originalVersion=10&revisedVersion=11">(View changes)</a>
     </p>

    <span class="label">Content:</span><br/>
    <div class="greybox wiki-content"><h1><a name="ClientJNDINames-What%27sMyBean%27sJNDIName%3F"></a>What's My Bean's JNDI Name?</h1>
<p>There are a few things to keep in mind before you start reading:</p>
<ol>
	<li>A default JNDI name is provided to your EJB.</li>
	<li>You can customize the JNDI name.</li>
	<li>If the name is taken, an error will be logged and deployment will continue.</li>
</ol>


<table cellpadding='5' width='85%' cellspacing='8px' class='infoMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
<p>Set the <b>openejb.jndiname.failoncollision</b> system property to 'true' if you'd like a strict guarantee the jndi names you want are created.</p></td></tr></table>

<h2><a name="ClientJNDINames-DefaultJNDIname"></a>Default JNDI name </h2>
<p>The default JNDI name is in the following format:</p>
<div class="code"><div class="codeContent">
<pre class="code-java">{ejbName}{interfaceType.annotationName}</pre>
</div></div>
<p>Lets try and understand the above format. Both <b>ejbName</b> and <b>interfaceType.annotationName</b> are pre-defined variables. There are other pre-defined variables available which you could use to customize the JNDI name format.</p>

<h1><a name="ClientJNDINames-JNDINameFormatting"></a>JNDI Name Formatting</h1>

<p>The <b>openejb.jndiname.format</b> property allows you to supply a template for the global JNDI names of all your EJBs.  With it, you have complete control over the structure of the JNDI layout can institute a design pattern just right for your client apps.  See the <a href="/confluence/display/OPENEJBx30/Service+Locator" title="Service Locator">Service Locator</a> doc for clever ways to use the JNDI name formatting functionality in client code.</p>

<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> variable </th>
<th class='confluenceTh'> description </th>
</tr>
<tr>
<td class='confluenceTd'> moduleId </td>
<td class='confluenceTd'>  Typically the name of the ejb-jar file or the &lt;ejb-jar id=""&gt; id value if specified </td>
</tr>
<tr>
<td class='confluenceTd'> ejbType </td>
<td class='confluenceTd'>  STATEFUL, STATELESS, BMP_ENTITY, CMP_ENTITY, or MESSAGE_DRIVEN </td>
</tr>
<tr>
<td class='confluenceTd'> ejbClass </td>
<td class='confluenceTd'>  for a class named <em>org.acme.superfun.WidgetBean</em> results in <b>org.acme.superfun.WidgetBean</b> </td>
</tr>
<tr>
<td class='confluenceTd'> ejbClass.simpleName </td>
<td class='confluenceTd'>  for a class named <em>org.acme.superfun.WidgetBean</em> results in <b>WidgetBean</b> </td>
</tr>
<tr>
<td class='confluenceTd'> ejbClass.packageName </td>
<td class='confluenceTd'>  for a class named <em>org.acme.superfun.WidgetBean</em> results in <b>org.acme.superfun</b> </td>
</tr>
<tr>
<td class='confluenceTd'> ejbName </td>
<td class='confluenceTd'>  The ejb-name as specified in xml or via the 'name' attribute in an @Stateful, @Stateless, or @MessageDriven annotation </td>
</tr>
<tr>
<td class='confluenceTd'> deploymentId </td>
<td class='confluenceTd'>  The unique system id for the ejb.  Typically the ejbName unless specified in the openejb-jar.xml or via changing the openejb.deploymentId.format </td>
</tr>
<tr>
<td class='confluenceTd'> interfaceType </td>
<td class='confluenceTd'>  see interfaceType.annotationName </td>
</tr>
<tr>
<td class='confluenceTd'> interfaceType.annotationName </td>
<td class='confluenceTd'> Following the EJB 3 annotations @RemoteHome, @LocalHome, @Remote and @Local
<ul class="alternate" type="square">
	<li><b>RemoteHome</b>  <em>(EJB 2 EJBHome)</em></li>
	<li><b>LocalHome</b> <em>(EJB 2 EJBLocalHome)</em></li>
	<li><b>Remote</b> <em>(EJB 3 Business Remote)</em></li>
	<li><b>Local</b> <em>(EJB 3 Business Local)</em></li>
	<li><b>Endpoint</b> <em>(EJB webservice endpoint)</em></li>
</ul>
</td>
</tr>
<tr>
</tr>
<tr>
<td class='confluenceTd'> interfaceType.xmlName </td>
<td class='confluenceTd'>  Following the ejb-jar.xml descriptor elements &lt;home&gt;, &lt;local-home&gt;, &lt;business-remote&gt;, &lt;business-local&gt;, and &lt;service-endpoint&gt;:
<ul class="alternate" type="square">
	<li><b>home</b>  <em>(EJB 2 EJBHome)</em></li>
	<li><b>local-home</b> <em>(EJB 2 EJBLocalHome)</em></li>
	<li><b>business-remote</b> <em>(EJB 3 Business Remote)</em></li>
	<li><b>business-local</b> <em>(EJB 3 Business Local)</em></li>
	<li><b>service-endpoint</b> <em>(EJB webservice endpoint)</em></li>
</ul>
</td>
</tr>
<tr>
</tr>
<tr>
<td class='confluenceTd'> interfaceType.xmlNameCc </td>
<td class='confluenceTd'>  Camel-case version of interfaceType.xmlName:
<ul class="alternate" type="square">
	<li><b>Home</b>  <em>(EJB 2 EJBHome)</em></li>
	<li><b>LocalHome</b> <em>(EJB 2 EJBLocalHome)</em></li>
	<li><b>BusinessRemote</b> <em>(EJB 3 Business Remote)</em></li>
	<li><b>BusinessLocal</b> <em>(EJB 3 Business Local)</em></li>
	<li><b>ServiceEndpoint</b> <em>(EJB webservice endpoint)</em></li>
</ul>
</td>
</tr>
<tr>
<td class='confluenceTd'> interfaceType.openejbLegacyName </td>
<td class='confluenceTd'>  Following the OpenEJB 1.0 hard-coded format:
<ul class="alternate" type="square">
	<li><em>(empty string)</em>  <em>(EJB 2 EJBHome)</em></li>
	<li><b>Local</b> <em>(EJB 2 EJBLocalHome)</em></li>
	<li><b>BusinessRemote</b> <em>(EJB 3 Business Remote)</em></li>
	<li><b>BusinessLocal</b> <em>(EJB 3 Business Local)</em></li>
	<li><b>ServiceEndpoint</b> <em>(EJB webservice endpoint)</em></li>
</ul>
</td>
</tr>
<tr>
<td class='confluenceTd'> interfaceClass </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li><em>(business)</em> for a class named <em>org.acme.superfun.WidgetRemote</em> results in <b>org.acme.superfun.WidgetRemote</b></li>
	<li><em>(home)</em> for a class named <em>org.acme.superfun.WidgetHome</em> results in <b>org.acme.superfun.WidgetHome</b></li>
</ul>
</td>
</tr>
<tr>
</tr>
<tr>
<td class='confluenceTd'> interfaceClass.simpleName </td>
<td class='confluenceTd'><ul class="alternate" type="square">
	<li><em>(business)</em> for a class named <em>org.acme.superfun.WidgetRemote</em> results in <b>WidgetRemote</b></li>
	<li><em>(home)</em> for a class named <em>org.acme.superfun.WidgetHome</em> results in <b>WidgetHome</b></li>
</ul>
</td>
</tr>
<tr>
<td class='confluenceTd'> interfaceClass.packageName </td>
<td class='confluenceTd'>  for a class named <em>org.acme.superfun.WidgetRemote</em> results in <b>org.acme.superfun</b> </td>
</tr>
</tbody></table>

<p>This can be set on a server level via a <em>system property</em>, for example:</p>

<table cellpadding='5' width='85%' cellspacing='8px' class='infoMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b class="strong">TODO</b><br />
<p>Show the recommended way to set system properties or this property (if a gbean attribute is added)</p></td></tr></table>


<h1><a name="ClientJNDINames-SettingtheJNDIname"></a>Setting the JNDI name</h1>

<p>It's possible to set the desired jndi name format for the whole server level, an ejb, an ejb's "local" interface (local/remote/local-home/home), and for an individual interface the ejb implements.  More specific jndi name formats act as an override to any more general formats.  The most specific format dictates the jndi name that will be used for any given interface of an ejb.  It's possible to specify a general format for your server, override it at an ejb level and override that further for a specific interface of that ejb.</p>

<h2><a name="ClientJNDINames-Viathe%3Cjndi%3Etagforaspecificejb"></a>Via the &lt;jndi&gt; tag for a specific ejb</h2>

<p>The following sets the name specifically for the interface org.superbiz.Foo.</p>

<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;openejb-jar&gt;</span>
  ...

  <span class="code-tag">&lt;session&gt;</span>
    ...

    <span class="code-tag">&lt;jndi name=<span class="code-quote">"foo"</span> interface=<span class="code-quote">"org.superbiz.Foo"</span>/&gt;</span>  
  <span class="code-tag">&lt;/session&gt;</span>
<span class="code-tag">&lt;/openejb-jar&gt;</span></pre>
</div></div>

<p>Or more generally...</p>

<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;openejb-jar&gt;</span>
  ...

  <span class="code-tag">&lt;session&gt;</span>
    ...

    <span class="code-tag">&lt;jndi name=<span class="code-quote">"foo"</span> interface=<span class="code-quote">"Remote"</span>/&gt;</span> 
  <span class="code-tag">&lt;/session&gt;</span>
<span class="code-tag">&lt;/openejb-jar&gt;</span></pre>
</div></div>

<p>Or more generally still...</p>

<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;openejb-jar&gt;</span>
  ...

  <span class="code-tag">&lt;session&gt;</span>
    ...

    <span class="code-tag">&lt;jndi name=<span class="code-quote">"foo"</span>/&gt;</span> 
  <span class="code-tag">&lt;/session&gt;</span>
<span class="code-tag">&lt;/openejb-jar&gt;</span></pre>
</div></div>

<p>The 'name' attribute can still use templates if it likes, such as: </p>

<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;openejb-jar&gt;</span>
  ...

  <span class="code-tag">&lt;session&gt;</span>
    ...

    <span class="code-tag">&lt;jndi name=<span class="code-quote">"ejb/{interfaceClass.simpleName}"</span> interface=<span class="code-quote">"org.superbiz.Foo"</span>/&gt;</span> 
  <span class="code-tag">&lt;/session&gt;</span>
<span class="code-tag">&lt;/openejb-jar&gt;</span></pre>
</div></div>

<h3><a name="ClientJNDINames-Multiple%3Cjndi%3Etags"></a>Multiple &lt;jndi&gt; tags</h3>

<p>Multiple &lt;jndi&gt; tags are allowed making it possible for you to be as specific as you need about the jndi name of each interface or each logical group of iterfaces (Local, Remote, LocalHome, RemoteHome).  </p>

<p>Given an ejb, FooBean, with the following interfaces:</p>
<ul class="alternate" type="square">
	<li>business-local: org.superbiz.LocalOne</li>
	<li>business-local: org.superbiz.LocalTwo</li>
	<li>business-remote: org.superbiz.RemoteOne</li>
	<li>business-remote: org.superbiz.RemoteTwo</li>
	<li>home: org.superbiz.FooHome</li>
	<li>local-home: org.superbiz.FooLocalHome</li>
</ul>


<p>The following four examples would yield the same jndi names.  The intention with these examples is to show the various ways you can isolate specific interfaces or types of interfaces to gain more specific control on how they are named.</p>

<div class="code"><div class="codeHeader"><b>#1</b></div><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;openejb-jar&gt;</span>
  ...

  <span class="code-tag">&lt;session&gt;</span>
    ...

    <span class="code-tag">&lt;jndi name=<span class="code-quote">"LocalOne"</span> interface=<span class="code-quote">"org.superbiz.LocalOne"</span>/&gt;</span> 
    <span class="code-tag">&lt;jndi name=<span class="code-quote">"LocalTwo"</span> interface=<span class="code-quote">"org.superbiz.LocalTwo"</span>/&gt;</span> 
    <span class="code-tag">&lt;jndi name=<span class="code-quote">"RemoteOne"</span> interface=<span class="code-quote">"org.superbiz.RemoteOne"</span>/&gt;</span> 
    <span class="code-tag">&lt;jndi name=<span class="code-quote">"RemoteTwo"</span> interface=<span class="code-quote">"org.superbiz.RemoteTwo"</span>/&gt;</span> 
    <span class="code-tag">&lt;jndi name=<span class="code-quote">"FooHome"</span> interface=<span class="code-quote">"org.superbiz.FooHome"</span>/&gt;</span> 
    <span class="code-tag">&lt;jndi name=<span class="code-quote">"FooLocalHome"</span> interface=<span class="code-quote">"org.superbiz.FooLocalHome"</span>/&gt;</span> 
  <span class="code-tag">&lt;/session&gt;</span>
<span class="code-tag">&lt;/openejb-jar&gt;</span></pre>
</div></div>

<div class="code"><div class="codeHeader"><b>#2</b></div><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;openejb-jar&gt;</span>
  ...

  <span class="code-tag">&lt;session&gt;</span>
    ...

    <span class="code-tag"><span class="code-comment">&lt;!-- applies to LocalOne and LocalTwo --&gt;</span></span>
    <span class="code-tag">&lt;jndi name=<span class="code-quote">"{interfaceClass.simpleName}"</span> interface=<span class="code-quote">"Local"</span>/&gt;</span> 

    <span class="code-tag"><span class="code-comment">&lt;!-- applies to RemoteOne and RemoteTwo --&gt;</span></span>
    <span class="code-tag">&lt;jndi name=<span class="code-quote">"{interfaceClass.simpleName}"</span> interface=<span class="code-quote">"Remote"</span>/&gt;</span> 

    <span class="code-tag"><span class="code-comment">&lt;!-- applies to FooHome --&gt;</span></span>
    <span class="code-tag">&lt;jndi name=<span class="code-quote">"{interfaceClass.simpleName}"</span> interface=<span class="code-quote">"RemoteHome"</span>/&gt;</span> 

    <span class="code-tag"><span class="code-comment">&lt;!-- applies to FooLocalHome --&gt;</span></span>
    <span class="code-tag">&lt;jndi name=<span class="code-quote">"{interfaceClass.simpleName}"</span> interface=<span class="code-quote">"LocalHome"</span>/&gt;</span> 
  <span class="code-tag">&lt;/session&gt;</span>
<span class="code-tag">&lt;/openejb-jar&gt;</span></pre>
</div></div>

<div class="code"><div class="codeHeader"><b>#3</b></div><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;openejb-jar&gt;</span>
  ...

  <span class="code-tag">&lt;session&gt;</span>
    ...

    <span class="code-tag"><span class="code-comment">&lt;!-- applies to RemoteOne, RemoteTwo, FooHome, and FooLocalHome --&gt;</span></span>
    <span class="code-tag">&lt;jndi name=<span class="code-quote">"{interfaceClass.simpleName}"</span>/&gt;</span> 

    <span class="code-tag"><span class="code-comment">&lt;!-- these two would count as an override on the above format --&gt;</span></span>
    <span class="code-tag">&lt;jndi name=<span class="code-quote">"LocalOne"</span> interface=<span class="code-quote">"org.superbiz.LocalOne"</span>/&gt;</span> 
    <span class="code-tag">&lt;jndi name=<span class="code-quote">"LocalTwo"</span> interface=<span class="code-quote">"org.superbiz.LocalTwo"</span>/&gt;</span> 
  <span class="code-tag">&lt;/session&gt;</span>
<span class="code-tag">&lt;/openejb-jar&gt;</span></pre>
</div></div>

<div class="code"><div class="codeHeader"><b>#4</b></div><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;openejb-jar&gt;</span>
  ...

  <span class="code-tag">&lt;session&gt;</span>
    ...

    <span class="code-tag"><span class="code-comment">&lt;!-- applies to LocalOne, LocalTwo, RemoteOne, RemoteTwo, FooHome, and FooLocalHome --&gt;</span></span>
    <span class="code-tag">&lt;jndi name=<span class="code-quote">"{interfaceClass.simpleName}"</span>/&gt;</span> 
  <span class="code-tag">&lt;/session&gt;</span>
<span class="code-tag">&lt;/openejb-jar&gt;</span></pre>
</div></div>


<h2><a name="ClientJNDINames-GlobalSettings"></a>Global Settings</h2>
<p>You can change the JNDI setttings by specifying the GERONIMO_OPTS before lanuching the command geronimo start. For example, to change the JNDI format into <div class="error"><span class="error">Unknown macro: {ejbName}</span> <p>/<div class="error"><span class="error">Unknown macro: {interfaceClass}</span> </div>, use this syntax:</p>

<p>set GERONIMO_OPTS="-Dopenejb.jndiname.format=</p></div>/<div class="error"><span class="error">Unknown macro: {interfaceClass}</span> </div></p>

<p>You are responsible for ensuring the names don't conflict.   </p>

<h3><a name="ClientJNDINames-Conservativesettings"></a>Conservative settings</h3>

<p>A very conservative setting such as "<em>{deploymentId}/{interfaceClass}</em>" would guarantee that each and every single interface is bound to JNDI.  If your bean had a legacy EJBObject interface, three business remote interfaces, and two business local interfaces, this pattern would result in <b>six</b> proxies bound into JNDI.</p>

<p>Similarly conservative settings would be:</p>
<ul class="alternate" type="square">
	<li><em>{deploymentId}/{interfaceClass.simpleName}</em></li>
	<li><em>{moduleId}/{ejbName}/{interfaceClass}</em></li>
	<li><em>{ejbName}/{interfaceClass}</em></li>
	<li><em>{moduleId}/{ejbClass}/{interfaceClass}</em></li>
	<li><em>{ejbClass}/{interfaceClass}</em></li>
	<li><em>{ejbClass}/{interfaceClass.simpleName}</em></li>
	<li><em>{ejbClass.simpleName}/{interfaceClass.simpleName}</em></li>
	<li><em>{interfaceClass}/{ejbName}</em></li>
</ul>


<p>Bordeline optimistic:</p>
<ul class="alternate" type="square">
	<li><em>{moduleId}/{interfaceClass}</em></li>
	<li><em>{interfaceClass}</em></li>
</ul>


<p>The above two settings would work if the interface wasn't shared by other beans.</p>

<h3><a name="ClientJNDINames-Pragmaticsettings"></a>Pragmatic settings</h3>

<p>A more middle ground setting such as "<em>{deploymentId}{interfaceType.annotationName}</em>" would guarantee that at least one proxy of each interface type is bound to JNDI.  If your bean had a legacy EJBObject interface, three business remote interfaces, and two business local interfaces, this pattern would result in <b>three</b> proxies bound into JNDI: one proxy dedicated to your EJBObject interface; one proxy implementing all three business remote interfaces; one proxy implementing the two business local interfaces.</p>

<p>Similarly pragmatic settings would be:</p>
<ul class="alternate" type="square">
	<li><em>{moduleId}/{ejbClass}/{interfaceType.annotationName}</em></li>
	<li><em>{ejbClass}/{interfaceType.xmlName}</em></li>
	<li><em>{ejbClass.simpleName}/{interfaceType.xmlNameCc}</em></li>
	<li><em>{interfaceType}/{ejbName}</em></li>
	<li><em>{interfaceType}/{ejbClass}</em></li>
</ul>


<h3><a name="ClientJNDINames-Optimisticsettings"></a>Optimistic settings</h3>

<p>A very optimistic setting such as "<em>{deploymentId}</em>" would guarantee only one proxy for the bean will be bound to JNDI.  This would be fine if you knew you only had one type of interface in your beans.  For example, only business remote interfaces, or only business local interfaces, or only an EJBObject interface, or only an EJBLocalObject interface.</p>

<p>If a bean in the app did have more than one interface type, one business local and one business remote for example, by default OpenEJB will reject the app when it detects that it cannot bind the second interface.  This strict behavior can be disabled by setting the <b>openejb.jndiname.failoncollision</b> system property to <em>false</em>.  When this property is set to false, we will simply log an error that the second proxy cannot be bound to JNDI, tell you which ejb is using that name, and continue loading your app.</p>

<p>Similarly optimistic settings would be:</p>
<ul class="alternate" type="square">
	<li><em>{ejbName}</em></li>
	<li><em>{ejbClass}</em></li>
	<li><em>{ejbClass.simpleName}</em></li>
	<li><em>{moduleId}/{ejbClass.simpleName}</em></li>
	<li><em>{moduleId}/{ejbName}</em></li>
</ul>


<h1><a name="ClientJNDINames-AdvancedDetailsonEJB3.0BusinessProxies%28thesimplepart%29"></a>Advanced Details on EJB 3.0 Business Proxies (the simple part)</h1>

<p>If you implement your business interfaces, your life is simple as your proxies will also implement your business interfaces of the same type.  Meaning any proxy OpenEJB creates for a business local interface will also implement your other business local interfaces.  Similarly, any proxy OpenEJB creates for a business remote interface will also implement your other business remote interfaces.</p>

<h1><a name="ClientJNDINames-AdvancedDetailsonEJB3.0BusinessProxies%28thecomplicatedpart%29"></a>Advanced Details on EJB 3.0 Business Proxies (the complicated part)</h1>

<table cellpadding='5' width='85%' cellspacing='8px' class='infoMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
<p>Read this section of either of these two apply to you:</p>
<ul class="alternate" type="square">
	<li>You do not implement your business interfaces in your bean class</li>
	<li>One or more of your business remote interfaces extend from javax.rmi.Remote</li>
</ul>


<p>If neither of these two items describe your apps, then there is no need to read further.  Go have fun.</p></td></tr></table>
<h3><a name="ClientJNDINames-Notimplementingbusinessinterfaces"></a>Not implementing business interfaces</h3>

<p>If you do not implement your business interfaces it may not be possible for us to implement all your business interfaces in a single interface.  Conflicts in the throws clauses and the return values can occur as detailed <a href="/confluence/display/OPENEJB/Multiple+Business+Interface+Hazzards" title="Multiple Business Interface Hazzards">here</a>.  When creating a proxy for an interface we will detect and remove any other business interfaces that would conflict with the main interface.</p>

<h3><a name="ClientJNDINames-Businessinterfacesextendingjavax.rmi.Remote"></a>Business interfaces extending javax.rmi.Remote</h3>

<p>Per spec rules many runtime exceptions (container or connection related) are thrown from javax.rmi.Remote proxies as java.rmi.RemoteException which is not a runtime exception and must be throwable via the proxy as a checked exception. The issue is that conflicting throws clauses are actually removed for two interfaces sharing the same method signature.  For example two methods such as these:</p>
<ul class="alternate" type="square">
	<li>InterfaceA: void doIt() throws Foo;</li>
	<li>InterfaceB: void doIt() throws RemoteException;</li>
</ul>


<p>can be implemented by trimming out the conflicting throws clauses as follows:</p>
<ul class="alternate" type="square">
	<li>Implementation: void doIt(){}</li>
</ul>


<p>This is fine for a bean class as it does not need to throw the RMI required javax.rmi.RemoteException. However if we create a proxy from these two interfaces it will also wind up with a 'doIt(){}' method that cannot throw javax.rmi.RemoteException.  This is very bad as the container does need to throw RemoteException to any business interfaces extending java.rmi.Remote for any container related issues or connection issues.  If the container attempts to throw a RemoteException from the proxies 'doIt(){}' method, it will result in an UndeclaredThrowableException thrown by the VM.</p>

<p>The only way to guarantee the proxy has the 'doIt() throws RemoteException {}' method of InterfaceB is to cut out InterfaceA when we create the proxy dedicated to InterfaceB.</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