servicemix-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From conflue...@apache.org
Subject [CONF] Apache ServiceMix: Is ServiceMix the Right ESB for Me? (page edited)
Date Wed, 05 Mar 2008 23:05: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/SM">SM</a> :
            <a href="http://cwiki.apache.org/confluence/display/SM/Is+ServiceMix+the+Right+ESB+for+Me%3F">Is ServiceMix the Right ESB for Me?</a>
        </span>
    </div>

     <p>
        <a href="http://cwiki.apache.org/confluence/display/SM/Is+ServiceMix+the+Right+ESB+for+Me%3F">Is ServiceMix the Right ESB for Me?</a>
        has been edited by             <a href="http://cwiki.apache.org/confluence/display/~ammulder">Aaron Mulder</a>
            <span class="smallfont">(Mar 05, 2008)</span>.
     </p>
    
     <p>
                 <a href="http://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=78436&originalVersion=17&revisedVersion=18">(View changes)</a>
     </p>

    <span class="label">Content:</span><br/>
    <div class="greybox wiki-content"><h1><a name="IsServiceMixtheRightESBforMe%3F-IsServiceMixtheRightESBforMe%3F"></a>Is ServiceMix the Right ESB for Me?</h1>

<p>So you've read <a href="/confluence/display/SM/How+to+Evaluate+an+ESB" title="How to Evaluate an ESB">How to Evaluate an ESB</a> and you're ready to select one.  Now the question becomes, 'Is ServiceMix the right one for me?'  Here's some basic information to get your decision-making process started.</p>

<h2><a name="IsServiceMixtheRightESBforMe%3F-OpenSource%26OpenStandards"></a>Open Source &amp; Open Standards</h2>

<h3><a name="IsServiceMixtheRightESBforMe%3F-HowdoOpenSourceESBscomparetocommercialESBs%3F"></a>How do Open Source ESBs compare to commercial ESBs?</h3>

<p>In general, they are both viable solutions.  To be more specific, hopefully the rest of this page will give you some idea.</p>

<p>Note that both community and commercial <a href="/confluence/display/SM/Support" title="Support">Support</a> are available for ServiceMix.</p>

<h3><a name="IsServiceMixtheRightESBforMe%3F-IsServiceMixbasedonOpenStandards%3FIsthatimportant%3F"></a>Is ServiceMix based on Open Standards?  Is that important?</h3>

<p>Yes, and yes.</p>

<p>ServiceMix implements the Java Business Integration or JBI specification (see <a href="/confluence/display/SM/What+is+JBI" title="What is JBI">What is JBI?</a>).  This means that standard JBI components can be run in ServiceMix, along with services that use them.  Likewise, JBI components or services developed for ServiceMix can be used in any other JBI-compliant ESB.</p>

<p>Additionally, while not a standard per se, ServiceMix lets you use Spring beans as services, which may help you get started quickly.  The same Spring beans could be used both in ServiceMix and in other Spring environments (such as, say, in a unit test, or in another application requiring the same logic).</p>

<p>Beyond the above, the message format used internally on the bus is XML-based (with optional binary attachments, etc.), and ServiceMix supports a variety of WS-* specifications for messages going into and out of the bus.  More on those later.  ServiceMix also uses the standard JMX management and monitoring API.</p>

<p>The bottom line is that you should be able to deploy standards-based services, using standards-based ESB functionality, exchanging standards-based messages.  This means your code and configurations should be portable across products, it should be easy to integrate with other environments, and it should be easy to find tools to support development, testing, monitoring, and tuning.</p>

<h3><a name="IsServiceMixtheRightESBforMe%3F-ArethereproprietaryprotocolsinServiceMix%3F"></a>Are there proprietary protocols in ServiceMix?</h3>

<p>Depends on what you mean, I guess.  There are a lot of Spring-related features, and Spring is clearly not an OASIS standard, but we hardly think of it as proprietary.  You can simply ignore these features and choose not to, for example, use Spring Beans as services if you'd prefer not to.</p>

<p>Different JBI service engines included with ServiceMix may let you develop services, routing logic, transformation logic, etc. in a variety of formats.  Just to give a few examples: Drools rules, XSLT transformations, OSWorkflow workflows, Groovy scripts, or JavaBeans (POJOs).  While you might not normally be able to deploy say a Groovy script in another ESB, you could always deploy the <a href="/confluence/display/SM/servicemix-script" title="servicemix-script">servicemix&#45;script</a> JBI component to another JBI-compliant ESB and then your Groovy script would be deployable there too.</p>

<h2><a name="IsServiceMixtheRightESBforMe%3F-BasicArchitecture"></a>Basic Architecture</h2>

<h3><a name="IsServiceMixtheRightESBforMe%3F-JBI%3ANormalizedMessages%2CServiceEngines%2CBindingComponents%2Cohmy%21"></a>JBI: Normalized Messages, Service Engines, Binding Components, oh my!</h3>

<p>Let's look at the picture from the <a href="/confluence/display/SM/Home" title="Home">Front Page</a>:</p>

<p><a href='http://cwiki.apache.org/confluence/download/attachments/39147/ServiceMix3.png' target='ServiceMix3.png' onClick='window.open("http://cwiki.apache.org/confluence/download/attachments/39147/ServiceMix3.png", "ServiceMix3.png", "height=367,width=577,menubar=no,status=no,toolbar=no"); return false;'><img src='/confluence/download/thumbnails/39147/ServiceMix3.png' align="absmiddle" border="0" /></a></p>

<p>In the middle, there's the bus.  The messages on the bus are JBI Normalized Messages, which are XML-based with optional binary attachments, header values, etc. (for more detail see <a href="/confluence/display/SM/What+is+JBI" title="What is JBI">What is JBI?</a>).</p>

<p>On the bottom are binding components.  These are JBI components (like plugins) that have the capability to convert incoming messages from some protocol (like SOAP over HTTP, REST over JMS, SNMP, some custom binary junk, etc.) into Normalized Messages, and put those messages onto the bus.  Or take a Normalized Message from the bus, and send it out using some other protocol.  Or both.</p>

<p>On the top are service engines.  These are JBI components (again, like plugins) that can do interesting things with Normalized Messages.  Like perform some custom message routing, or transform the message via XSLT, or run a BPEL process, or invoke a method on an EJB and return the result as another Normalized Message.</p>

<p>So when you deploy an application, it will probably include things like:</p>
<ul>
	<li>Some POJOs, Spring Beans, or other components with service logic</li>
	<li>Configuration files to activate certain service engines (e.g. to convert Normalized Messages into method calls on your beans above)</li>
	<li>Configuration files to activate certain binding components (e.g. to connect your services to the SOAP-over-HTTP protocol on a certain URL)</li>
	<li>Any additional routing rules, perhaps using a routing service engine, if it can't be deduced (e.g. by comparing the format of a Normalized Message to the WSDL describing the services) or needs additional customization</li>
</ul>


<p>Note that JBI has a specific format for applications &#8211; <a href="/confluence/pages/viewpage.action?pageId=50282" title="What is a JBI SU and how do I create one?">Service Units</a> in a <a href="/confluence/pages/viewpage.action?pageId=50299" title="What is a JBI SA and how do I create one?">Service Assembly</a>, so your application could be deployed to another JBI-compliant ESB (assuming the needed JBI Binding Components and JBI Service Engines had also been deployed).</p>

<h3><a name="IsServiceMixtheRightESBforMe%3F-WSDL%3FDidyousayWSDL%3F"></a>WSDL?  Did you say WSDL?</h3>

<p>So a JBI service is typically described by a WSDL.  This does not mean that SOAP is involved on the bus, though &#8211; note that an XML message (for example, a NormalizedMessage) can be compliant with a WSDL without any of the SOAP envelope, headers, or additional overhead.</p>

<p>In some cases, you may deploy a service with an associated WSDL.  In other cases, the WSDL may be generated for you (for instance, if you deploy a POJO as a service using the JSR-181 service engine).  But the easiest way to make sure a NormalizedMessage gets to a particular service on the bus is to make sure the message complies with the WSDL for that service.  Otherwise, you have various routing options to use.</p>

<p>If it happens that you <em>are</em> using SOAP for messages going into and out of the bus, what typically happens is that the binding component will strip off the SOAP envelope, use the body of the SOAP message as the Normalized Message XML, use any SOAP attachments as attachments on the Normalized Message, and use any SOAP headers as headers on the Normalized Message.  Then the Normalized Message is sent on the bus to the appropriate Service Engines, etc.  Finally, the reverse procedure applies for replies or messages going out of the bus via a SOAP binding component.</p>

<h3><a name="IsServiceMixtheRightESBforMe%3F-HowdoesServiceMixhandlemessagesonthebus%3F"></a>How does ServiceMix handle messages on the bus?</h3>

<p>The two most common modes are SEDA and JMS flows.  For messages that are non-persistent, ServiceMix uses an efficient in-memory system known as the SEDA flow to convey messages on the bus.  For messages that are persistent, ServiceMix uses JMS messages with an underlying ActiveMQ broker.  You may also choose to force the use of the JMS flow, for example to connect multiple ServiceMix instances.</p>

<h2><a name="IsServiceMixtheRightESBforMe%3F-MessageCapabilities"></a>Message Capabilities</h2>

<h3><a name="IsServiceMixtheRightESBforMe%3F-DoesServiceMixsupportSOAP%3F"></a>Does ServiceMix support SOAP?</h3>

<p>Messages on the bus do not use SOAP.  But ServiceMix includes binding components that support <a href="/confluence/display/SM/servicemix-http" title="servicemix-http">SOAP-over-HTTP</a> and <a href="/confluence/display/SM/servicemix-jms" title="servicemix-jms">SOAP-over-JMS</a>, as well as the <a href="/confluence/display/SM/servicemix-cxf-bc" title="servicemix-cxf-bc">CXF</a> binding component that supports SOAP over HTTP and JMS, all of which include SOAP 1.1 and SOAP 1.2 support, MIME attachments, etc.</p>

<h3><a name="IsServiceMixtheRightESBforMe%3F-WhatWSspecificationsdoesServiceMixSupport%3F"></a>What WS-* specifications does ServiceMix Support?</h3>

<p>Most of the WS-* specification support can be found in the binding components included with ServiceMix &#8211; for HTTP, JMS, or CXF (which supports both HTTP and JMS).  Of the three, CXF has the most extensive WS-* support.</p>

<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'>Spec</th>
<th class='confluenceTh'>Purpose</th>
<th class='confluenceTh'>Support</th>
</tr>
<tr>
<th class='confluenceTh'>WS-Security</th>
<td class='confluenceTd'>Authentication, Encryption, Digital Signature</td>
<td class='confluenceTd'>Yes, for <a href="/confluence/display/SM/servicemix-http" title="servicemix-http">HTTP</a> and <a href="/confluence/display/SM/servicemix-cxf-bc" title="servicemix-cxf-bc">CXF</a> binding components and subsequent authentication/authorization</td>
</tr>
<tr>
<th class='confluenceTh'>WS-RM</th>
<td class='confluenceTd'>Reliable Messaging</td>
<td class='confluenceTd'>Yes, for <a href="/confluence/display/SM/servicemix-cxf-bc" title="servicemix-cxf-bc">CXF</a>  binding component</td>
</tr>
<tr>
<th class='confluenceTh'>WS-Addressing</th>
<td class='confluenceTd'>Addressing</td>
<td class='confluenceTd'>Yes, for <a href="/confluence/display/SM/servicemix-http" title="servicemix-http">HTTP</a>, <a href="/confluence/display/SM/servicemix-jms" title="servicemix-jms">JMS</a>, and <a href="/confluence/display/SM/servicemix-cxf-bc" title="servicemix-cxf-bc">CXF</a> binding components</td>
</tr>
<tr>
<th class='confluenceTh'>WS-Policy</th>
<td class='confluenceTd'>Policy Management</td>
<td class='confluenceTd'>Yes, for <a href="/confluence/display/SM/servicemix-cxf-bc" title="servicemix-cxf-bc">CXF</a>  binding component</td>
</tr>
<tr>
<th class='confluenceTh'>WS-Notification</th>
<td class='confluenceTd'>Events</td>
<td class='confluenceTd'>Yes, see the <a href="/confluence/display/SM/servicemix-wsn2005" title="servicemix-wsn2005">WS-Notification</a> documentation</td>
</tr>
<tr>
<th class='confluenceTh'>WS-TX</th>
<td class='confluenceTd'>Transactions</td>
<td class='confluenceTd'>No, though WS-TX headers can be passed through as normalized message headers for services to handle</td>
</tr>
<tr>
<th class='confluenceTh'>WSDM</th>
<td class='confluenceTd'>Management</td>
<td class='confluenceTd'>No, JMX is used instead</td>
</tr>
<tr>
<th class='confluenceTh'>WS-Management</th>
<td class='confluenceTd'>Management</td>
<td class='confluenceTd'>No, JMX is used instead</td>
</tr>
</tbody></table>

<h3><a name="IsServiceMixtheRightESBforMe%3F-DoesServiceMixsupportplainXMLmessages%3F"></a>Does ServiceMix support plain XML messages?</h3>

<p>Yes, the binding components can accept plain XML as well as SOAP &#8211; the Normalized Message is created directly from that XML.  As with any other Normalized Message, routing and transformations can be applied (more on that in a moment).</p>

<h3><a name="IsServiceMixtheRightESBforMe%3F-DoesServiceMixsupportother%28nonXML%2Cbinary%2Cetc.%29protocols%3F"></a>Does ServiceMix support other (non-XML, binary, etc.) protocols?</h3>

<p>ServiceMix can support any protocol so long as a binding component is available to convert protocol messages to or from Normalized Messages.  For custom protocols, you may need to write a bit of code for the binding component, but that is not particularly complex (outside of whatever the protocol processing requires).</p>

<h2><a name="IsServiceMixtheRightESBforMe%3F-Mediation"></a>Mediation</h2>

<h3><a name="IsServiceMixtheRightESBforMe%3F-WhatroutingoptionsdoesServiceMixprovide%3F"></a>What routing options does ServiceMix provide?</h3>

<p><a href="/confluence/display/SM/Routing" title="Routing">Many</a>.</p>
<ol>
	<li>Standard <a href="/confluence/display/SM/How+does+routing+work+in+JBI" title="How does routing work in JBI">JBI routing</a>, for example, a binding component specifies a particular service engine to dispatch to, or the bus matches the Normalized Message XML content to a service's WSDL</li>
	<li>Content-based routing using <a href="/confluence/display/SM/servicemix-eip#servicemix-eip-ContentBasedrouter" title="ContentBasedrouter on servicemix-eip">XPath</a> expressions on the Normalized Message XML content</li>
	<li>Additional <a href="/confluence/display/SM/servicemix-eip" title="servicemix-eip">Enterprise Integration Patterns</a> related to routing (also see <a href="/confluence/display/SM/servicemix-camel" title="servicemix-camel">Camel</a> and the additional <span class="nobr"><a href="http://activemq.apache.org/camel/enterprise-integration-patterns.html#EnterpriseIntegrationPatterns-MessageRouting" title="Visit page outside Confluence" rel="nofollow">patterns<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> supported by Camel)</li>
	<li>Rules-driven routing using the <a href="/confluence/display/SM/servicemix-drools" title="servicemix-drools">servicemix&#45;drools</a> service engine</li>
	<li>Script-driven routing using the <a href="/confluence/display/SM/servicemix-script" title="servicemix-script">servicemix&#45;script</a> service engine</li>
	<li>Java code can perform routing using the <a href="/confluence/display/SM/servicemix-bean" title="servicemix-bean">servicemix&#45;bean</a> service engine</li>
	<li>You can drop in a JBI-compliant <a href="/confluence/display/SM/BPEL" title="BPEL">BPEL</a> service engine (such as <span class="nobr"><a href="http://ode.apache.org" title="Visit page outside Confluence" rel="nofollow">Ode<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> to perform routing (among other things)</li>
</ol>


<h3><a name="IsServiceMixtheRightESBforMe%3F-WhattransformationoptionsdoesServiceMixprovide%3F"></a>What transformation options does ServiceMix provide?</h3>

<p>The main approach would be <a href="/confluence/display/SM/servicemix-saxon" title="servicemix-saxon">XSLT</a> transformation on the Normalized Message XML content.</p>

<p>Additionally, many of the same options as in the routing answer above can be used for transformation.  For example, messages can be transformed via a <a href="/confluence/display/SM/servicemix-script" title="servicemix-script">script</a>, or via a <a href="/confluence/display/SM/servicemix-bean" title="servicemix-bean">Java class</a>, or <a href="/confluence/display/SM/BPEL" title="BPEL">BPEL</a>, etc.</p>

<h3><a name="IsServiceMixtheRightESBforMe%3F-Whichoptionsallowadeclarativeapproachforrouting%2Ftransformation%3F"></a>Which options allow a declarative approach for routing/transformation?</h3>

<p>Pretty much everything except the Java code approach.  Otherwise, the script or configuration typically exists in files outside your Java code, but inside your JBI <a href="/confluence/pages/viewpage.action?pageId=50282" title="What is a JBI SU and how do I create one?">Service Unit</a>.  In other words, it is declarative, but not necessarily editable at runtime without redeploying the service.</p>

<p>Specifically:</p>
<ul>
	<li>JBI routing, when configuration is needed, is configured in an XML file in the Service Unit</li>
	<li>XPath routing uses an entry in the XML file in the Service Unit</li>
	<li>XSLT transformations use an entry in the XML file and a separate XSLT file in the Service Unit</li>
	<li>EIP routing with ServiceMix and/or Camel can be configured with entries in the XML file in the Service Unit</li>
	<li>Drools rules are typically defined in an XML file bundled in the Service Unit</li>
	<li>Script-driven routing and transformation can use scripts in the XML file in the Service Unit</li>
	<li>BPEL process definitions are packaged in the Service Unit</li>
</ul>


<h2><a name="IsServiceMixtheRightESBforMe%3F-Orchestration"></a>Orchestration</h2>

<h3><a name="IsServiceMixtheRightESBforMe%3F-Whatorchestrationoptionsareavailable%3F"></a>What orchestration options are available?</h3>

<p>Is the answer you're looking for <a href="/confluence/display/SM/BPEL" title="BPEL">BPEL</a>?  It is not distributed with ServiceMix, but thanks to the JBI standards, you can drop in a JBI component for a BPEL engine, such as <span class="nobr"><a href="http://ode.apache.org/" title="Visit page outside Confluence" rel="nofollow">Apache Ode<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> (literally &#8211; download the Ode or other JBI component to <tt>servicemix/install</tt>).  So we generally consider BPEL to be a supported orchestration option.</p>

<p>Other options include using <a href="/confluence/display/SM/servicemix-script" title="servicemix-script">Scripting</a> languages such as Groovy, which in addition to routing and transformation, can save state across requests and therefore perform at least some orchestration (though the state is not maintained across server restarts).</p>

<p>You could also write custom <a href="/confluence/display/SM/servicemix-bean" title="servicemix-bean">Java code</a> to perform orchestration.</p>

<p>Finally, while it's not full-fledged orchestration, <a href="/confluence/display/SM/servicemix-camel" title="servicemix-camel">Camel</a> is integrated with ServiceMix and supports many <span class="nobr"><a href="http://activemq.apache.org/camel/enterprise-integration-patterns.html" title="Visit page outside Confluence" rel="nofollow">Enterprise Integration Patterns<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> that might otherwise require an orchestration engine to implement.</p>

<h3><a name="IsServiceMixtheRightESBforMe%3F-Aretransactionssupported%3F"></a>Are transactions supported?</h3>

<p>There is no built-in support for "business transactions" (such as WS-TX BusinessActivity).  ServiceMix can preserve SOAP headers as Normalized Message headers, so individual services might react to them, but we don't really claim support.</p>

<p>It is possible to use transactional delivery on the bus, either encompassing a single message delivery or a flow involving a series of components and response messages.  See, for example, the JMS and JCA <a href="/confluence/display/SM/NMR+Flows" title="NMR Flows">Flows</a>, as well as the page on <a href="/confluence/display/SM/Transactions" title="Transactions">Transactions</a>.  However, to be honest, this is not the easiest to configure and the documentation is liable to give you a headache.</p>

<h2><a name="IsServiceMixtheRightESBforMe%3F-Security"></a>Security</h2>

<h3><a name="IsServiceMixtheRightESBforMe%3F-Whatauthentication%2Fauthorizationoptionsarethere%3F"></a>What authentication/authorization options are there?</h3>

<p>So to begin with, there are several ways for a client to authenticate on a request to a binding component.  For HTTP binding components, this may include HTTP Basic, Client Certs, etc.  SOAP over HTTP and JMS can use WS-Security to authenticate.</p>

<p>Then, there are several ways to validate the client's authentication request.  ServiceMix uses JAAS for this, so you can hook up a JAAS LoginModule supporting properties files, a user database, an LDAP or ActiveDirectory server, or any other user data repository.  Once authenticated, a Subject is populated on the JBI Normalized Message, so authorization can be performed down the line.</p>

<p>Note that with a somewhat more complex JAAS configuration, you may provide additional features such as a lockout after a certain number of login failures, denial-of-service prevention, login auditing, etc.</p>

<p>Finally, to control authorization, ServiceMix uses an XML file that defines which users/groups/etc. can access which services (or which operations on a service).  The standard implementation is not very flexible (there's one XML file for the whole server and it cannot be reloaded at runtime), but it is pluggable, so alternatives are possible.</p>

<p>One option that has been discussed, for example, is to expose the JBI Subject to Spring to allow Spring security to act on service invocations.  Another option would be to support annotations on the service WSDL.  Of course, these have not been implemented at present.</p>

<h3><a name="IsServiceMixtheRightESBforMe%3F-Whatencryptionordigitalsignatureoptionsarethere%3F"></a>What encryption or digital signature options are there?</h3>

<p>For messages in or out of the bus, WS-Security provides the encryption and digital signature options.  For messages within the bus, there are no particular features along these lines.</p>

<h3><a name="IsServiceMixtheRightESBforMe%3F-Whatauditingoptionsarethere%3F"></a>What auditing options are there?</h3>

<p>Logins may be audited using a JAAS module, as mentioned above.</p>

<p>It is also possible to audit message traffic &#8211; one option would be to use the EIP <a href="/confluence/display/SM/servicemix-eip#servicemix-eip-WireTap" title="WireTap on servicemix-eip">WireTap</a> to send each message to both an auditing service and the usual destination (or similarly, the <a href="/confluence/display/SM/servicemix-eip#servicemix-eip-StaticRecipientList" title="StaticRecipientList on servicemix-eip">Static Recipient List</a> pattern).  Another (if using the <a href="/confluence/display/SM/NMR+Flows" title="NMR Flows">JMS Flow</a>) would be to configure a virtual destination in ActiveMQ and audit copies of the message traffic.</p>

<h2><a name="IsServiceMixtheRightESBforMe%3F-Performance"></a>Performance</h2>

<h3><a name="IsServiceMixtheRightESBforMe%3F-DoesServiceMixsupportclusteringorloadbalancing%3F"></a>Does ServiceMix support clustering or load balancing?</h3>

<p>Yes.  Multiple ServiceMix instances can communicate via JMS using ActiveMQ.</p>

<p>As far as how to use a cluster, one way is to use the JMS or JCA <a href="/confluence/display/SM/NMR+Flows" title="NMR Flows">flows</a> to ensure that services deployed on a cluster are aware of each other and requests can be load-balanced across nodes in a cluster.  That is harder to set up but effective without more manual intervention.  An alternative is to manually define JMS endpoints and corresponding routing between machines in the cluster for cases where you need to send requests to a separate machine in the cluster, and otherwise always allow the local copy of a service to handle any request on a clustered machine.  That is not as complex to set up, but requires manual configuration for every communication path between cluster nodes.  In either case, you can deploy services to multiple cluster nodes and put them behind a load balancer.</p>

<h3><a name="IsServiceMixtheRightESBforMe%3F-Arerequestsqueuedinternallyonthebus%3F"></a>Are requests queued internally on the bus?</h3>

<p>Yes, when using the SEDA (default), JMS, or JCA <a href="/confluence/display/SM/NMR+Flows" title="NMR Flows">flows</a>.  The optional Straight Through flow eliminates any queuing.</p>

<h2><a name="IsServiceMixtheRightESBforMe%3F-DevelopmentTools"></a>Development Tools</h2>

<h2><a name="IsServiceMixtheRightESBforMe%3F-Testing"></a>Testing</h2>

<h2><a name="IsServiceMixtheRightESBforMe%3F-ComplexServices"></a>Complex Services</h2>

<h2><a name="IsServiceMixtheRightESBforMe%3F-Publication%2FDiscovery"></a>Publication / Discovery</h2>

<h2><a name="IsServiceMixtheRightESBforMe%3F-Policies"></a>Policies</h2>

</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