<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>RedStack</title>
	<atom:link href="http://redstack.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://redstack.wordpress.com</link>
	<description>Musings on Integration with Oracle Fusion Middleware</description>
	<lastBuildDate>Tue, 14 May 2013 22:38:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='redstack.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>RedStack</title>
		<link>http://redstack.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://redstack.wordpress.com/osd.xml" title="RedStack" />
	<atom:link rel='hub' href='http://redstack.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Getting to know Maven</title>
		<link>http://redstack.wordpress.com/2013/05/09/getting-to-know-maven/</link>
		<comments>http://redstack.wordpress.com/2013/05/09/getting-to-know-maven/#comments</comments>
		<pubDate>Thu, 09 May 2013 03:44:53 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Maven]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2934</guid>
		<description><![CDATA[I have a number of posts that talk about using Maven to automate builds for Fusion Middleware projects.  I know that there are some people who have not used Maven before, or maybe only a little.  So I wanted to &#8230; <a href="http://redstack.wordpress.com/2013/05/09/getting-to-know-maven/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2934&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I have a number of posts that talk about using Maven to automate builds for Fusion Middleware projects.  I know that there are some people who have not used Maven before, or maybe only a little.  So I wanted to post a few short videos that explain the basic concepts and give a real example.</p>
<p>Here is the first installment &#8211; Basic Maven &#8211; you might want to watch fullscreen <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='640' height='390' src='http://www.youtube.com/embed/YRugI6fy634?version=3&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' frameborder='0'></iframe></span>
<p>Coming soon:</p>
<ul>
<li>Intermediate Maven</li>
<li>Advanced Maven</li>
<li>Using the WebLogic Maven Plugin</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2934/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2934/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2934&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2013/05/09/getting-to-know-maven/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>Version Control</title>
		<link>http://redstack.wordpress.com/2013/05/06/version-control/</link>
		<comments>http://redstack.wordpress.com/2013/05/06/version-control/#comments</comments>
		<pubDate>Mon, 06 May 2013 10:32:12 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[SDLC]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Subversion]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2901</guid>
		<description><![CDATA[This article is part of a series on SOA Development and Delivery. Let&#8217;s get started on our SOA Development and Delivery journey by talking about version control.  But before we delve right in, let&#8217;s take a moment to reflect on &#8230; <a href="http://redstack.wordpress.com/2013/05/06/version-control/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2901&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><span style="color:#0000ff;">This article is part of a series on <a title="SOA SDLC" href="http://redstack.wordpress.com/soa/"><span style="color:#0000ff;">SOA Development and Delivery</span></a>.</span></p>
<p>Let&#8217;s get started on our SOA Development and Delivery journey by talking about version control.  But before we delve right in, let&#8217;s take a moment to reflect on this axiom:</p>
<blockquote><p><strong>Axiom 1:</strong> Developing a SOA Composite Application <strong>is</strong> software development.</p></blockquote>
<p>When we sit down to create a SOA Application, i.e. composites, user interfaces, services, etc., we are actually embarking on a software development exercise.  I think that some people don&#8217;t believe (or at least they don&#8217;t admit to themselves) that this is the case.  Why?  Well acknowledging that it is, in fact, software development implies a whole bunch of practices are necessary &#8211; like version control and testing for example.  And those are hard, right?</p>
<p>Well, they are certainly more work.  But its a bit like insurance &#8211; it is a cost you accept in the present to offset or prevent a much more significant potential cost/pain in the future.  In their quintessential book <a href="www.amazon.com/dp/0321601912"><em>Continuous Delivery</em></a>, Dave Farley and Jez Humble say:</p>
<blockquote><p>&#8220;In software, when something is painful, the way to reduce the pain is to do it more frequently, not less.&#8221;</p></blockquote>
<p>Putting in the extra effort upfront will save you from a lot more pain and effort later on.  Using version control fits into this category.  It can be a bit painful, but it is definitely worth it in the end.  Consider this axiom:</p>
<blockquote><p><strong>Axiom 2:</strong> Developing software without version control is like mixing chemicals without reading the labels &#8211; sooner or later, it is going to blow up in your face.</p></blockquote>
<p>Why is this true?  Consider the following questions &#8211; how would you answer these if you are not using version control?</p>
<ul>
<li>What was the content of (some BPEL file) on (some day in the past)?</li>
<li>Who changed (some endpoint URL) in (some BPEL file)?  When?  Why?</li>
<li>We found a problem in production, which version of the source matches this SAR we have in production?</li>
<li>Can I get a copy of that source, with no other changes or updates to any other files?</li>
<li>How come I can&#8217;t build this?  It <em>must have</em> worked before!</li>
<li>Where is the deployment script for this composite?</li>
<li>How did we set up the test environment that we used to test this composite?</li>
<li>Which version of the SOA configuration plans matches this version of the SAR?</li>
<li>Which version of the OSB project and the ADF UI matches this version of the composite?</li>
</ul>
<p>The answer is, of course, that you can&#8217;t answer them.  At least not with any level of confidence.  I would go so far as to say that if  you don&#8217;t have your SOA applications under version control, you should stop whatever you are doing, and go set it up right now!  Sooner or later you are going to encounter a critical problem in your production environment that you simply cannot fix.</p>
<p>That leads us to one more axiom:</p>
<blockquote><p><strong>Axiom 3:</strong> If it is not in version control, it does not exist.</p></blockquote>
<p>If you cannot retrieve a previous revision of an artifact, then it may as well not have ever existed at all &#8211; it is of approximately the same value to you either way.</p>
<p>Now, what do I mean by &#8216;using&#8217; version control?  Well, it is more than just checking in your changes.  That is an excellent start, and it is much better than nothing at all, but really, you should be thinking about a few more advanced ways of using your version control system as well &#8211; like branching and tagging for example.  We will come back and discuss these in some depth later in this article.</p>
<p>For now, let&#8217;s cover some basics.</p>
<h3><em>Which version control system to use?</em></h3>
<p>There are a number excellent version control systems available, both free and commercial.  I have used most of them &#8211; rcs, SCCS, CVS, Subversion, ClearCase, Perforce, Mercurial, and git to name a few, and even some proprietary ones that exist only inside the organizations that use them or are included in a particular operating system (e.g. OpenVMS) or file system (e.g. zfs).</p>
<p>Today I mostly use Subversion, but I am going through a transition to git.  Let&#8217;s talk about these two in a little more detail.</p>
<p>Firstly, both of them are free, and both are widely used.  That means that there is good tool support, a large community of people creating helpful content about how to use them, and a pretty good chance that anyone you get working on your project will have some level of familiarity with them.  They both also have excellent, freely available books to help you get started: <a href="http://svnbook.red-bean.com/"><em>Version Control with Subversion</em></a><strong> </strong>and <a href="http://git-scm.com/book"><em>Pro Git</em></a>.</p>
<p>The other thing that is very useful about these two, specifically in the context of Oracle SOA Suite development, is that they use an <strong>atomic commit</strong> which means that you can change a number of files and commit all of those changes as a single revision.  CVS, for example, does not allow you to do this because it versions each file individually.  This capability is great in a SOA environment, as many of the changes we need to make involve making changes to more than one file.  Having the project in a state where some, but not all, of those file changes are committed, is not useful.</p>
<p>JDeveloper supports Subversion quite well, although you do need to invest a little time to make sure you know how to drive it.  And <a href="http://tompeez.wordpress.com/2012/12/09/jdeveloper-11-1-1-6-0-the-git-experience-part-1/">support for git was added</a> in JDeveloper 11.1.1.6.</p>
<p>There are three key things that are driving my personal migration from Subversion to git:</p>
<ul>
<li>The increasing demand for distributed development, especially when multiple organizations are involved in the development lifecycle &#8211; git is one of the fleet of new distributed version control systems,</li>
<li>The ability to commit, branch, merge, etc., while offline (and away from the watchful eye of the continuous integration server), and</li>
<li>The availability of excellent tools (like <a href="http://gitlab.org/">GitLab</a>) that provide easy visibility into the repository itself, and into the branching and merging over time.</li>
</ul>
<p>I personally find the git workflow more complex than the Subversion one, but for me at least, the time has come to make the move.  I think that moving to distributed version control is pretty much inevitable in the modern world.</p>
<p>I think the most important thing to say about which version control system is the right one to use is this &#8211; <em>any is better than none</em>.  If you want me to recommend one, I would have to say git.</p>
<h3><em>What should we put in version control?</em></h3>
<p>Version control is for source artifacts, not derived artifacts like binaries, deployable packages, etc.  Source artifacts does not just mean source code &#8211; it means anything that is needed to recreate your production environment from scratch.  Craig Barr proposed an excellent list <a href="http://blog.rubiconred.com/2013/05/industrial-soa-where-are-you-part-1.html">in this article</a> which I am quoting here:</p>
<ul>
<li>&#8220;OSB Configuration</li>
<li>SOA Projects</li>
<li>Customization Files</li>
<li>Composite Configuration Plans</li>
<li>WebLogic Deployment Plans</li>
<li>Build Scripts</li>
<li>Test Scripts</li>
<li>Deployment Scripts</li>
<li>Release Scripts</li>
<li>Start-up &amp; Shutdown Scripts</li>
<li>“Health Check” Scripts</li>
<li>Application Server Configuration</li>
<li>Puppet Configuration</li>
<li>(Optionally) The Binaries<br />
Note: This is unnecessary and redundant if you follow good binary management which I’ll discuss in the next blog installment.</li>
<li>And so on….&#8221;</li>
</ul>
<p>Personally, I do not agree with putting your binaries into your version control system.  I think that binaries belong in a separate repository, because they have quite different characteristics and management needs.  We&#8217;ll talk a lot more about this in a future post on binary management, but for now a couple of examples to illustrate the point:</p>
<table border="0">
<tbody>
<tr>
<th>Source</th>
<th>Binaries</th>
</tr>
<tr>
<td>Tend to be relatively small files</td>
<td>Tend to be relatively large files</td>
</tr>
<tr>
<td>Tend to change frequently</td>
<td>Tend to never change after they are created</td>
</tr>
<tr>
<td>Usually we want to keep all revisions</td>
<td>Often we only want to keep important and recent revisions</td>
</tr>
<tr>
<td>Are created by a person</td>
<td>Are (or at least should be) created by some automated/programmatic process</td>
</tr>
<tr>
<td>Cannot easily be recreated it they are lost or damaged</td>
<td>Can be easily recreated if they are lost or damaged (assuming you still have the source, etc.)</td>
</tr>
</tbody>
</table>
<p><em>So what do you put into version control for SOA, OSB, ADF?</em></p>
<p>The simplest answer to this question is &#8216;whatever is left in the <em>project</em> after you have executed the <strong>clean</strong> action on the <em>project</em> in the IDE.&#8217;  Note that you would need to make sure you have disabled automatic builds in eclipse, otherwise it will just go ahead and build again.</p>
<p>We need to be careful about a couple of things here:</p>
<ul>
<li>First, what is a <strong>project</strong>?  For SOA, we really need to be checking in at<strong> </strong>what JDeveloper calls the <strong>SOA Application</strong> level, not at the level of what JDeveloper calls a <strong>SOA Project</strong>.  The reason for this is quite straightforward &#8211; there are a number of circumstances under which it is not possible to build a SOA Project without having access to some of the information (files) in the SOA Application.  For example, the presence of Human Tasks and Business Rules in a composite (SOA Project) are such an occasion.  In both of these cases, you need to be able to access the <strong>adf-config.xml</strong> file in the SOA Application to get the necessary MDS configuration information to build the project.</li>
<li>There are some directories that your version control client may automatically hide, because their names start with a period (&#8216;.&#8217;) &#8211; for example, there is a &#8216;<strong>.adf</strong>&#8216; directory.  These often contain important data and you need to make sure that you check them in.</li>
<li>Depending on what you have done in your project, the out of the box &#8216;clean&#8217; action might not do a proper clean up of your project.  If you have created extra target directories, for example, you might need to make sure that those removed too.  A good example of this is when you use Maven to build a SOA project &#8211; it will create a <strong>target</strong> directory, in addition to the normal <strong>deploy</strong> directory.  You need to make sure that the <strong>mvn clean </strong>also removes the <strong>deploy</strong> directory and/or that the IDE also removes the <strong>target</strong> directory.</li>
</ul>
<p>The same goes for ADF and OSB projects.  Given the flexibility provided by the tools, there is really no &#8216;one size fits all&#8217; answer to this question, you need to invest the time to work out the correct answer for your own projects.</p>
<p>At the end of the day, there are two ways you can get this wrong:</p>
<ul>
<li>You leave out some files that are needed.  This is a problem that you will need to go back and fix.</li>
<li>You include some extra files that are not needed.  This is probably not a big deal.  It could possibly result in some extra files being in your binaries.  That may or may not be a problem.</li>
</ul>
<p>So if you are limited for time, better to opt for too much than too little.</p>
<h3><em>How should we set up the repository?</em></h3>
<p>A question that comes up fairly often, particularly with Subversion, is how to structure the repository.</p>
<p>There are two common approaches here &#8211; one is to have a single Subversion repository with all the projects in the same repository.  The other is to have one repository per project (or development group, or whatever unit).</p>
<p>There are of course advantages and disadvantages to each approach.  Commonly cited issues include: the amount of administration overhead, the time taken to perform backups (which is done by dumping the whole repository), issues with revision numbers (which are shared across the whole repository) and comments (knowing which ones are for a specific project), different security requirements, or code separation requirements for different projects, and different Subversion workflow requirements across projects.</p>
<p>In practice though, I think that these can be handled with approximately the same amount of effort regardless of the approach chosen, assuming a suitably experienced Subversion administrator.</p>
<p>I believe that the one repository approach is easier, and I would recommend taking that approach unless there is some specific reason not to.  The most likely reason is that some project team does not want their code stored with another team&#8217;s code due to some kind of confidentiality or licensing issue (perceived or real).</p>
<p>So, If you are using Subversion, I would recommend a single Subversion repository, shared by all projects for a SOA environment.</p>
<p>Inside the repository, you should create zero or more levels of directories that you use to organise projects into logical groups, then under these, create a directory for each project (i.e. SOA Application, etc.) and under that create the recommended Subversion trunk, tags, and branches directories.  This is also consistent with the approach recommended in <a href="http://svnbook.red-bean.com/en/1.7/svn.reposadmin.planning.html#svn.reposadmin.projects.chooselayout"><em>Version Control with Subversion</em></a>.  So your repository might look like this:</p>
<pre>root
  - businessUnit1
    - project1
      - composites
        - GetCustomerDetails
          - trunk
          - tags
          - branches
        - ProcessOrder
          - trunk
          - tags
          - branches
      - ui-projhects
        - ...
    - ...
  - businessUnit2
    - ...</pre>
<p><strong>git</strong></p>
<p>With git, I am in the habit of creating a git repository for each project, as that is a more natural way to organise things in git.</p>
<h2>Tagging</h2>
<p>Tagging, in the context of a version control system, is essentially making a named copy at a given point in time.  (Though more than likely you will just be copying pointers, not all of the content.)</p>
<p>Why would you want to be able to go back to a given point in time?  There are two excellent reasons:</p>
<ul>
<li>You have found a problem in an older version that is deployed in a production (or other) environment that you need to fix, so you need to get back the exact version of all of the source artifacts that were used to create that particular version, and</li>
<li>Things have gone very bad and you need to go back to a known good point in the past.</li>
</ul>
<p>So, the first one tells us that you must tag whenever you are going to release.  You might also want to tag whenever you reach a significant or meaningful milestone.</p>
<p>The second reason can be addressed with tagging, but you might be better to use a branch in that case.  We will talk about branches in a moment.</p>
<h3><em>What is a version anyway?</em></h3>
<p>Often people ask about the relationship between the &#8216;versions&#8217; in the version control system and the build system, and the runtime versions.  It is important to understand that there is not, and need not really be, any kind of direct relationship between them, other than for releases or release candidates.</p>
<p>Normally you are going to be building the latest version of the code &#8211; this is sometimes called the &#8216;head&#8217;, or &#8216;trunk&#8217; or &#8216;tip&#8217; &#8211; and executing tests against that.  So you don&#8217;t need to know which &#8216;version&#8217; (&#8216;revision&#8217; is a more accurate word from the point of view of the version control system) it is &#8211; you can just refer to it as the latest version.  In Subversion, this is done by ending the URL with &#8216;<strong>/trunk</strong>&#8216;.</p>
<p>The only other revisions that you are likely to build are the latest versions on a particular branch.  Again, this can be done without knowing the revision number.</p>
<p>You would not need to build any tagged/released version again &#8211; you could just go and get the binary from the binary repository.  Although you could easily build it again if you needed to by referring to the tag name in the URL.</p>
<p>And all of the other revisions are essentially old, discarded points in time that you have moved on from.</p>
<p>So you do need to know which tag relates to which binary version, and the easiest way to do this is to just use the binary version number in the tag.  So, for example, you might tag revision 126 as &#8216;<strong>VERSION-2.3</strong>&#8216;.  If you needed to come back later and look at that version, you could just end your Subversion URL with <strong>/tags/VERSION-2.3</strong>.</p>
<p>That brings us to branching&#8230;</p>
<h2>Branching</h2>
<p>Keeping a log of all the changes over time is all very well and good, but projects don&#8217;t always follow a straight line.  What happens when you do find the problem in your old version 2.3, the one you have in production, but you have already done a heap of work on version 2.4?</p>
<p>This is one thing that branches are good for.  A branch lets you start a parallel stream of work from a given point in time (like a tag, but it can be from any revision).  Consider the following diagram:</p>
<p><a href="http://redstack.files.wordpress.com/2013/05/version-control.png"><img class="alignnone size-full wp-image-2921" alt="version-control" src="http://redstack.files.wordpress.com/2013/05/version-control.png?w=640&#038;h=238" width="640" height="238" /></a></p>
<p>Here we can see that development of the next version can continue on the trunk, while another team work on fixing the production bug in version 2.3 in the branch.  The two have no effect on each other.  We can build either the trunk or the branch, depending on what we want to do.</p>
<p>When you finish fixing the bug, let&#8217;s say that is with revision 131.  You should tag that one too, so you have another tag to go back to in case you find a bug in that &#8216;fixed&#8217; version.</p>
<p>The other useful thing about branches, is that you can merge them back into the trunk (or any other branch for that matter).  This provides an ideal way to isolate potentially dangerous work.  If you are trying something new, and you are not sure how it is going to work out, you can do that work in a branch.  If it proves to be ok, you can merge the changes in that branch back into the trunk at some point in the future.  But if it is not ok, you can just forget the branch and go on as if it never happened.</p>
<h3><em>A note on merging</em></h3>
<p>One really important thing to know is that you can merge backwards.  This lets you essentially get rid of a bad commit.  This is definitely something that you should learn how to do in your version control system.</p>
<h2>When to create a version</h2>
<p>Here is another meaningful question &#8211; how often should developers commit their changes to the trunk?</p>
<p>Later on we are going to talk about continuous integration.  The word &#8216;integration&#8217; in &#8216;continuous integration&#8217; refers to the process of merging changes into a trunk.  One of the foundation principles of continuous integration is that all developers must commit regularly to the trunk.  What does regularly mean?  Well no less frequently than once every day.</p>
<p>This drives some desirable behaviors.  How much meaningful work can a developer do in a day?  Not much right?  Right!  That&#8217;s the whole idea!  By forcing developers to work in small iterations, we are minimizing the size of potential integration issues that can occur.  Less code to integrate &#8211; less serious problems integrating.  Less serious problems, easier to fix.  Less problems in the codebase at any given point in time &#8211; better quality!  That is what continuous integration is aiming to achieve.</p>
<p>When we are using continuous integration, we build every time a developer commits to the trunk (or to a branch).  But now the question arises &#8211; do we really want to build all of the developer&#8217;s little intermediate commits, that we know are not going to work anyway, since they are work in progress?</p>
<p>There are two ways we are going to talk about (in future articles) to address this:</p>
<ul>
<li>Many continuous integration servers support the notion of a pre-flight build.  This is a build that is triggered by the developer&#8217;s work in progress commit.  The sole purpose of this build is to see if the have broken anything.  It does not need to go all the way through the build process, running all of the integration tests, getting ready for release.  It is never going to be released.  This gives the developer the freedom to experiment and check the results without bogging down the continuous integration system wasting a whole bunch of time and energy on builds that don&#8217;t matter.</li>
<li>The other option comes with distributed version control.  Here the developer can commit as many times as they like, but the commits will not flow through to the main repository &#8211; the one the continuous integration server is watching &#8211; until the developer does a &#8216;push&#8217;. When the continuous integration server sees a whole bunch of new commits, it is (usually) smart enough to just pick up the newest one and build that.  This approach includes an implicit assumption that the developer is able to build and test the software on their own environment before pushing.</li>
</ul>
<h2>More about version control</h2>
<p>At this point, it starts to become difficult to talk about some of the strategies I want to discuss before we have moved forward a few more steps and talked about a few more topics, especially continuous integration .  So let&#8217;s put version control on hold, and come back to it later.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2901/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2901/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2901&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2013/05/06/version-control/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2013/05/version-control.png" medium="image">
			<media:title type="html">version-control</media:title>
		</media:content>
	</item>
		<item>
		<title>Building OSB projects with Maven and removing the eclipse dependency</title>
		<link>http://redstack.wordpress.com/2013/05/02/building-osb-projects-with-maven-and-removing-the-eclipse-dependency/</link>
		<comments>http://redstack.wordpress.com/2013/05/02/building-osb-projects-with-maven-and-removing-the-eclipse-dependency/#comments</comments>
		<pubDate>Thu, 02 May 2013 06:00:26 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[configjar]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[OSB]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2879</guid>
		<description><![CDATA[In this earlier post, I talked about a way to automate the build and deployment for OSB, but I did not go so far as to get that working in Maven, though you certainly could.  But, OSB PS6 has added &#8230; <a href="http://redstack.wordpress.com/2013/05/02/building-osb-projects-with-maven-and-removing-the-eclipse-dependency/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2879&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>In <a title="Getting started with Continuous Integration for OSB" href="http://redstack.wordpress.com/2011/08/25/getting-started-with-continuous-integration-for-osb/">this earlier post</a>, I talked about a way to automate the build and deployment for OSB, but I did not go so far as to get that working in Maven, though you certainly could.  But, OSB PS6 has added a new tool called <strong>configjar</strong> which lets you build a <strong>sbconfig.jar</strong> file without needing to have eclipse/OEPE/OSB IDE installed on the machine where you are doing the build.  You do still need OSB, but removing that IDE dependency is a big step forward.</p>
<p>You can find <strong>configjar</strong> sitting under your <strong>Oracle_OSB1/tools/configjar</strong> directory in your OSB PS6 installation.  There is a readme file there that tells you how to use it from ANT and WLST.  Here, I want to show you how to use it from Maven, and therefore Hudson, etc. too.</p>
<p>For this post, I went into the OSB IDE and created a simple project called <strong>osbProject1</strong> which contains a single Proxy Service called (imaginatively) <strong>ProxyService1</strong>.  It is just a plain old &#8216;any&#8217; proxy service with essentially no implementation at all.  But it is enough to do what we need to do.</p>
<p><span style="color:#ff0000;">By the way &#8211; I have OSB and the OSB IDE running on Oracle Linux as a 64-bit application &#8211; see how <a title="Installing OSB and its IDE on 64-bit Linux" href="http://redstack.wordpress.com/2012/02/06/installing-osb-and-its-ide-on-64-bit-linux/"><span style="color:#ff0000;">here</span></a>.</span></p>
<p>The <strong>configjar</strong> tools supports building <strong>sbconfig.jar</strong> files for projects and/or resources.  So you should be able to use this same approach for pretty much anything you build in OSB, possibly excepting when you have custom extensions.</p>
<p>If we take a look in my <strong>osbProject1</strong> direction in my eclipse workspace, we see that it contains just a single file, <strong>ProxyService1.proxy</strong>.</p>
<p>We are going to add a few more files:</p>
<ul>
<li>A Maven POM to control the build (<strong>pom.xml</strong>)</li>
<li>A <strong>settings.xml</strong> file that we will pass to <strong>configjar</strong></li>
<li><strong>import.py</strong> and <strong>import.properties</strong> files like we had in that <a title="Getting started with Continuous Integration for OSB" href="http://redstack.wordpress.com/2011/08/25/getting-started-with-continuous-integration-for-osb/">previous post</a></li>
</ul>
<p>Let&#8217;s take a look at them now.  We will start with <strong>settings.xml</strong>.  This is a file we pass to <strong>configjar</strong> to tell it how to build the <strong>sbconfig.jar</strong> for us.  This is a relatively simple file.  Here is an example:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;
&lt;p:configjarSettings xmlns:p=&quot;http://www.bea.com/alsb/tools/configjar/config&quot;&gt;
  &lt;p:source&gt;
    &lt;p:project dir=&quot;/home/oracle/workspace/osbProject1&quot;/&gt;
    &lt;p:fileset&gt;
      &lt;p:exclude name=&quot;*/target/**&quot; /&gt;
      &lt;p:exclude name=&quot;*/security/**&quot; /&gt;
      &lt;p:exclude name=&quot;*/.settings/**&quot; /&gt;
      &lt;p:exclude name=&quot;*/import.*&quot; /&gt;
      &lt;p:exclude name=&quot;*/alsbdebug.xml&quot; /&gt;
      &lt;p:exclude name=&quot;*/configfwkdebug.xml&quot; /&gt;
      &lt;p:exclude name=&quot;*/pom.xml&quot; /&gt;
      &lt;p:exclude name=&quot;*/settings.xml&quot; /&gt;
      &lt;p:exclude name=&quot;*/osbProject1.jar&quot; /&gt;
    &lt;/p:fileset&gt;
  &lt;/p:source&gt;
  &lt;p:configjar jar=&quot;/home/oracle/workspace/osbProject1/osbProject1.jar&quot;&gt;
    &lt;p:projectLevel includeSystem=&quot;false&quot;&gt;
      &lt;p:project&gt;osbProject1&lt;/p:project&gt;
    &lt;/p:projectLevel&gt;
  &lt;/p:configjar&gt;
&lt;/p:configjarSettings&gt;

</pre>
<p>In the <strong>source </strong>element, under <strong>project</strong> we have a <strong>dir </strong>attribute that points to the OSB project directory that was created by the OSB IDE, and we most likely check out of a version control system before starting our build.  All of those <strong>exclude</strong> elements are telling it to ignore these extra files we have added to the project, and the ones that it will generate.  Without those, your <strong>sbconfig.jar</strong> will be polluted with a bunch of unnecessary stuff.  These are all standard from project to project, except for the last one, which is the name of the <strong>sbconfig.jar</strong> itself.</p>
<p>The <strong>jar </strong> attribute on the <strong>configjar</strong> element names the output file.  Finally, we have the <strong>project</strong> element under <strong>projectLevel</strong> that names the projects we want to include in the <strong>sbconfig.jar</strong> that we build.  The other option is to select by resources.  You might want to go check out the OSB documentation to see how to do that.</p>
<p>Next, we have the <strong>import.py</strong> and <strong>import.properties</strong> files.  These are essentially the same as in the <a title="Getting started with Continuous Integration for OSB" href="http://redstack.wordpress.com/2011/08/25/getting-started-with-continuous-integration-for-osb/">previous post</a> so I wont repeat them. The only difference is that we need to update <strong>import.properties</strong> to contain the correct filename:</p>
<pre class="brush: java; title: ; notranslate">
importJar=osbProject1.jar
</pre>
<p>Then we need a POM.  We are going to use the <strong>maven-antrun-plugin </strong>to execute <strong>configjar</strong> through ANT to generate the <strong>sbconfig.jar</strong>, and then the <strong>exec-maven-plugin</strong> to deploy it to our OSB server.  Here is the POM:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;
xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;
  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;

  &lt;groupId&gt;com.redstack.osb&lt;/groupId&gt;
  &lt;artifactId&gt;osbProject1&lt;/artifactId&gt;
  &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;

  &lt;dependencies/&gt;

  &lt;properties&gt;
    &lt;osbHome&gt;/ciroot/product_binaries/osb11.1.1.7/Oracle_OSB1&lt;/osbHome&gt;
  &lt;/properties&gt;

  &lt;build&gt;
    &lt;plugins&gt;
      &lt;plugin&gt;
        &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
        &lt;artifactId&gt;maven-antrun-plugin&lt;/artifactId&gt;
        &lt;version&gt;1.7&lt;/version&gt;
        &lt;executions&gt;
          &lt;execution&gt;
            &lt;id&gt;deafult-cli&lt;/id&gt;
            &lt;phase&gt;package&lt;/phase&gt;
            &lt;configuration&gt;
              &lt;target&gt;
                &lt;echo&gt;
WARNING
-------
You must set the weblogic.home and osb.home environment variables
when you invoke Maven, e.g.:
mvn compile -Dweblogic.home=/osb11.1.1.7/wlserver_10.3
-Dosb.home=/osb11.1.1.7/Oracle_OSB1
                &lt;/echo&gt;
                &lt;taskdef name=&quot;configjar&quot;
                  classname=&quot;com.bea.alsb.tools.configjar.ant.ConfigJarTask&quot;
                  classpathref=&quot;maven.plugin.classpath&quot;/&gt;
                &lt;configjar settingsFile=&quot;${basedir}/settings.xml&quot;
                  debug=&quot;true&quot;&gt;
                &lt;/configjar&gt;
              &lt;/target&gt;
            &lt;/configuration&gt;
            &lt;goals&gt;
              &lt;goal&gt;run&lt;/goal&gt;
            &lt;/goals&gt;
          &lt;/execution&gt;
        &lt;/executions&gt;
        &lt;dependencies&gt;
          &lt;dependency&gt;
            &lt;groupId&gt;org.apache.ant&lt;/groupId&gt;
            &lt;artifactId&gt;ant&lt;/artifactId&gt;
            &lt;version&gt;1.7.1&lt;/version&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
            &lt;groupId&gt;org.apache.ant&lt;/groupId&gt;
            &lt;artifactId&gt;ant-launcher&lt;/artifactId&gt;
            &lt;version&gt;1.7.1&lt;/version&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
            &lt;groupId&gt;org.apache.ant&lt;/groupId&gt;
            &lt;artifactId&gt;ant-nodeps&lt;/artifactId&gt;
            &lt;version&gt;1.7.1&lt;/version&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
            &lt;groupId&gt;org.apache.ant&lt;/groupId&gt;
            &lt;artifactId&gt;ant-apache-bsf&lt;/artifactId&gt;
            &lt;version&gt;1.7.1&lt;/version&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
            &lt;groupId&gt;com.oracle.osb&lt;/groupId&gt;
            &lt;artifactId&gt;configjar&lt;/artifactId&gt;
            &lt;version&gt;11.1.1.7&lt;/version&gt;
            &lt;scope&gt;system&lt;/scope&gt;
            &lt;systemPath&gt;${osbHome}/tools/configjar/configjar.jar&lt;/systemPath&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
            &lt;groupId&gt;com.oracle.osb&lt;/groupId&gt;
            &lt;artifactId&gt;weblogic.server.modules_10.3.6.0&lt;/artifactId&gt;
            &lt;version&gt;11.1.1.7&lt;/version&gt;
            &lt;scope&gt;system&lt;/scope&gt;
            &lt;systemPath&gt;${osbHome}/../modules/features/weblogic.server.modules_10.3.6.0.jar&lt;/systemPath&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
            &lt;groupId&gt;com.oracle.osb&lt;/groupId&gt;
            &lt;artifactId&gt;weblogic&lt;/artifactId&gt;
            &lt;version&gt;11.1.1.7&lt;/version&gt;
            &lt;scope&gt;system&lt;/scope&gt;
            &lt;systemPath&gt;${osbHome}/../wlserver_10.3/server/lib/weblogic.jar&lt;/systemPath&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
            &lt;groupId&gt;com.oracle.osb&lt;/groupId&gt;
            &lt;artifactId&gt;oracle.http_client_11.1.1&lt;/artifactId&gt;
            &lt;version&gt;11.1.1.7&lt;/version&gt;
            &lt;scope&gt;system&lt;/scope&gt;
            &lt;systemPath&gt;${osbHome}/../oracle_common/modules/oracle.http_client_11.1.1.jar&lt;/systemPath&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
            &lt;groupId&gt;com.oracle.osb&lt;/groupId&gt;
            &lt;artifactId&gt;xmlparserv2&lt;/artifactId&gt;
            &lt;version&gt;11.1.1.7&lt;/version&gt;
            &lt;scope&gt;system&lt;/scope&gt;
            &lt;systemPath&gt;${osbHome}/../oracle_common/modules/oracle.xdk_11.1.0/xmlparserv2.jar&lt;/systemPath&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
            &lt;groupId&gt;com.oracle.osb&lt;/groupId&gt;
            &lt;artifactId&gt;orawsdl&lt;/artifactId&gt;
            &lt;version&gt;11.1.1.7&lt;/version&gt;
            &lt;scope&gt;system&lt;/scope&gt;
            &lt;systemPath&gt;${osbHome}/../oracle_common/modules/oracle.webservices_11.1.1/orawsdl.jar&lt;/systemPath&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
            &lt;groupId&gt;com.oracle.osb&lt;/groupId&gt;
            &lt;artifactId&gt;wsm-dependencies&lt;/artifactId&gt;
            &lt;version&gt;11.1.1.7&lt;/version&gt;
            &lt;scope&gt;system&lt;/scope&gt;
            &lt;systemPath&gt;${osbHome}/../oracle_common/modules/oracle.wsm.common_11.1.1/wsm-dependencies.jar&lt;/systemPath&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
            &lt;groupId&gt;com.oracle.osb&lt;/groupId&gt;
            &lt;artifactId&gt;osb.server.modules_11.1.1.7&lt;/artifactId&gt;
            &lt;version&gt;11.1.1.7&lt;/version&gt;
            &lt;scope&gt;system&lt;/scope&gt;
            &lt;systemPath&gt;${osbHome}/modules/features/osb.server.modules_11.1.1.7.jar&lt;/systemPath&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
            &lt;groupId&gt;com.oracle.osb&lt;/groupId&gt;
            &lt;artifactId&gt;oracle.soa.common.adapters&lt;/artifactId&gt;
            &lt;version&gt;11.1.1.7&lt;/version&gt;
            &lt;scope&gt;system&lt;/scope&gt;
            &lt;systemPath&gt;${osbHome}/soa/modules/oracle.soa.common.adapters_11.1.1/oracle.soa.common.adapters.jar&lt;/systemPath&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
            &lt;groupId&gt;com.oracle.osb&lt;/groupId&gt;
            &lt;artifactId&gt;log4j_1.2.8&lt;/artifactId&gt;
            &lt;version&gt;11.1.1.7&lt;/version&gt;
            &lt;scope&gt;system&lt;/scope&gt;
            &lt;systemPath&gt;${osbHome}/lib/external/log4j_1.2.8.jar&lt;/systemPath&gt;
          &lt;/dependency&gt;
          &lt;dependency&gt;
            &lt;groupId&gt;com.oracle.osb&lt;/groupId&gt;
            &lt;artifactId&gt;alsb&lt;/artifactId&gt;
            &lt;version&gt;11.1.1.7&lt;/version&gt;
            &lt;scope&gt;system&lt;/scope&gt;
            &lt;systemPath&gt;${osbHome}/lib/alsb.jar&lt;/systemPath&gt;
          &lt;/dependency&gt;
        &lt;/dependencies&gt;
      &lt;/plugin&gt;
      &lt;plugin&gt;
        &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
        &lt;artifactId&gt;exec-maven-plugin&lt;/artifactId&gt;
        &lt;executions&gt;
          &lt;execution&gt;
            &lt;id&gt;deploy&lt;/id&gt;
            &lt;phase&gt;pre-integration-test&lt;/phase&gt;
            &lt;configuration&gt;
              &lt;executable&gt;/bin/bash&lt;/executable&gt;
              &lt;arguments&gt;
                &lt;argument&gt;${osbHome}/../oracle_common/common/bin/wlst.sh&lt;/argument&gt;
                &lt;argument&gt;${basedir}/import.py&lt;/argument&gt;
                &lt;argument&gt;${basedir}/import.properties&lt;/argument&gt;
              &lt;/arguments&gt;
            &lt;/configuration&gt;
            &lt;goals&gt;
              &lt;goal&gt;exec&lt;/goal&gt;
            &lt;/goals&gt;
          &lt;/execution&gt;
        &lt;/executions&gt;
      &lt;/plugin&gt;
    &lt;/plugins&gt;
  &lt;/build&gt;
&lt;/project&gt;
</pre>
<p>Let&#8217;s take a look at the important parts of the POM that you will need to adjust to suit your environment:</p>
<ul>
<li>We define a <strong>property</strong> called <strong>osbHome</strong> which is then used throughout the POM.  This needs to point to your <strong>Oracle_OSB1</strong> directory.</li>
<li>In the <strong>plugin</strong> section for <strong>maven-antrun-plugin</strong> you can see that we have a <strong>taskdef</strong> to import the <strong>configjar</strong> task from the supplied <strong>configjar-ant.xml </strong>which comes with OSB.  We also have added a bunch of <strong>dependencies</strong> to this plugin so that it has the right OSB libraries in the classpath when it executes.  Note that they all have the <strong>scope</strong> set to <strong>system</strong> which means you don&#8217;t need to import them into a Maven repository first.  You can just specify a path to locate them.  Of course, this ties your build to that one machine effectively.  You can of course just go ahead and put those jars into a Maven repository and then use them normally, though since <strong>configjar</strong> depends on a local OSB install, there is not a lot of benefit right now.</li>
<li>Finally, in the <strong>plugin</strong> entry for <strong>exec-maven-plugin</strong> you can see that we execute <strong>wlst.sh</strong> and pass it our <strong>import.py</strong> script to do the deployment.</li>
</ul>
<p>The <strong>configjar</strong> tool also requires two environment variables to be set, so you need to set these when you run Maven.  Here is an example:</p>
<pre class="brush: plain; title: ; notranslate">

mvn verify -Dweblogic.home=/ciroot/product_binaries/osb11.1.1.7/wlserver_10.3 -Dosb.home=/ciroot/product_binaries/osb11.1.1.7/Oracle_OSB1

</pre>
<p>This will build the <strong>sbconfig.jar</strong> and deploy it to OSB for us.  Here it is:</p>
<p><a href="http://redstack.files.wordpress.com/2013/05/osb.png"><img class="alignnone size-full wp-image-2880" alt="osb" src="http://redstack.files.wordpress.com/2013/05/osb.png?w=640&#038;h=377" width="640" height="377" /></a></p>
<p>Good luck!  Enjoy!  And a big thank you to Dimitri Laloue who helped me get <strong>configjar</strong> working.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2879/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2879/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2879&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2013/05/02/building-osb-projects-with-maven-and-removing-the-eclipse-dependency/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2013/05/osb.png" medium="image">
			<media:title type="html">osb</media:title>
		</media:content>
	</item>
		<item>
		<title>Installing OSB 11.1.1.7 (PS6) and its IDE on 64-bit Linux</title>
		<link>http://redstack.wordpress.com/2013/05/02/installing-osb-11-1-1-7-ps6-and-its-ide-on-64-bit-linux/</link>
		<comments>http://redstack.wordpress.com/2013/05/02/installing-osb-11-1-1-7-ps6-and-its-ide-on-64-bit-linux/#comments</comments>
		<pubDate>Thu, 02 May 2013 05:28:54 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[OSB]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2883</guid>
		<description><![CDATA[Just a quick post to let you know that I have updated this older post with the details for OSB PS6 as well &#8211; still hear a lot of questions about how to set up the OSB IDE on 64-bit &#8230; <a href="http://redstack.wordpress.com/2013/05/02/installing-osb-11-1-1-7-ps6-and-its-ide-on-64-bit-linux/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2883&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Just a quick post to let you know that I have updated <a title="Installing OSB and its IDE on 64-bit Linux" href="http://redstack.wordpress.com/2012/02/06/installing-osb-and-its-ide-on-64-bit-linux/">this older post</a> with the details for OSB PS6 as well &#8211; still hear a lot of questions about how to set up the OSB IDE on 64-bit Linux.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2883/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2883/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2883&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2013/05/02/installing-osb-11-1-1-7-ps6-and-its-ide-on-64-bit-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>BPM PS6 video showing process lifecycle in more detail (30min)</title>
		<link>http://redstack.wordpress.com/2013/05/02/bpm-ps6-video-showing-process-lifecycle-in-more-detail-30min/</link>
		<comments>http://redstack.wordpress.com/2013/05/02/bpm-ps6-video-showing-process-lifecycle-in-more-detail-30min/#comments</comments>
		<pubDate>Thu, 02 May 2013 00:19:57 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[Composer]]></category>
		<category><![CDATA[Player]]></category>
		<category><![CDATA[PS6]]></category>
		<category><![CDATA[Simulation]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2876</guid>
		<description><![CDATA[If the five minute video I shared last week has whet your appetite for more, then this might be just what you are looking for! The same international team that made that video &#8211; Andrew Dorman, Tanya Williams, Carlos Casares, &#8230; <a href="http://redstack.wordpress.com/2013/05/02/bpm-ps6-video-showing-process-lifecycle-in-more-detail-30min/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2876&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>If the <a title="Want a taste of BPM PS6?" href="http://redstack.wordpress.com/2013/04/20/want-a-taste-of-bpm-ps6/">five minute video</a> I shared last week has whet your appetite for more, then this might be just what you are looking for!</p>
<p>The same international team that made that video &#8211; Andrew Dorman, Tanya Williams, Carlos Casares, Joakim Suarez and James Calise &#8211; have also created a thirty minute version that walks through in much more detail and shows you, from the perspective of various business stakeholders involved in process modeling, exactly how BPM PS6 supports the end to end process lifecycle. The video centres around a Retail Leasing use case, and follows how Joakim the Business Analyst, Pablo the Process Owner, and James the Process Analyst take the process from conception to runtime, solely through BPM Composer, without the need for IT or the use of JDeveloper.</p>
<ul>
<li>Joakim, the Business Analyst, models the process, designs the user interaction forms, and creates business rules,</li>
<li>Pablo, the Process Owner, reviews the process documentation and tests the process using the new &#8216;Process Player&#8217;,</li>
<li>James, the Process Analyst, analyses the process and identifies potential bottle necks using &#8216;Process Simulation&#8217;.</li>
</ul>
<p>Showcasing the business-focused advancements in PS6, the video illustrates the ease with which users can collaborate and quickly drive real business optimization.</p>
<p>Watch the video here:</p>
<span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='640' height='390' src='http://www.youtube.com/embed/Tv5M1Qx0QTk?version=3&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' frameborder='0'></iframe></span>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2876/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2876/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2876&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2013/05/02/bpm-ps6-video-showing-process-lifecycle-in-more-detail-30min/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>SOA Development and Delivery</title>
		<link>http://redstack.wordpress.com/2013/05/01/soa-development-and-delivery/</link>
		<comments>http://redstack.wordpress.com/2013/05/01/soa-development-and-delivery/#comments</comments>
		<pubDate>Wed, 01 May 2013 10:57:47 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ADF]]></category>
		<category><![CDATA[Binary Management]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[Build Automation]]></category>
		<category><![CDATA[Chef]]></category>
		<category><![CDATA[Continuous Delivery]]></category>
		<category><![CDATA[Continuous Inspection]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[Hudson]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[MDS]]></category>
		<category><![CDATA[OSB]]></category>
		<category><![CDATA[SDLC]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Sonar]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2865</guid>
		<description><![CDATA[Let&#8217;s start by talking about what I mean by that.  I don&#8217;t think that &#8216;SDLC&#8217; is  the right term to describe the space that I want to talk about, but it is a term that people are familiar with, so &#8230; <a href="http://redstack.wordpress.com/2013/05/01/soa-development-and-delivery/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2865&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Let&#8217;s start by talking about what I mean by that.  I don&#8217;t think that &#8216;SDLC&#8217; is  the right term to describe the space that I want to talk about, but it is a term that people are familiar with, so I think it makes a reasonable place to start.  There are a lot of other terms that cover this space: governance, SDLC, development, version control, continuous integration, binary management, continuous inspection, continuous delivery, automation, virtualization, configuration management, devops, integration testing, and so on.</p>
<p>Also, by &#8216;SOA&#8217; I really mean the broader set of technologies that we use to build &#8216;SOA Applications&#8217; &#8211; whatever they are, and they are more than just composites.  Real applications have many components, e.g. user interface, integration, mediation, rules, code, processes, forms, service definitions, canonical data and service models, and so on.</p>
<p>I don&#8217;t know about you, but I can&#8217;t think up a nice concise way to say that I mean all of those things across all of those technologies, so I am just going to call it &#8216;SOA Development and Delivery&#8217; and I hope you will know what I mean.</p>
<h2>The State of the Art</h2>
<p>Recently, I conducted a survey, and I have spoken individually with many folks from all around the world, about how they do SOA Development and Delivery today, and how they hope to do it in the future.  I think it would be fair to say that most SOA development today is not yet &#8216;industrialized&#8217; &#8211; by that I mean that it is done by people of varying skill levels, working on a best effort basis, doing what they think is the right thing to do, and doing it the way they think is right.</p>
<p>By &#8216;industrialization&#8217; I mean the development of standards, methods, processes, tools, and best practices, and the widespread automation of common tasks.  Doing the right thing, and doing it the right way.</p>
<p>I think that we stand of the verge of a point of inflection in our industry where we will see SOA development and delivery become industrialized.</p>
<p>My feeling is that today, if I can generalize, that in terms of SOA development, people:</p>
<ul>
<li>have adopted some kind of iterative, or possibly agile, development approach,</li>
<li>generally make some basic use of a version control system to manage source artifacts,</li>
<li>sometimes write unit tests, but don&#8217;t always check coverage or information content of those tests,</li>
<li>often try to automate the build process on a project by project basis,</li>
<li>generally do not try to apply any kind of quality control or inspection of their code base,</li>
<li>are maybe playing with or thinking about trying continuous integration,</li>
<li>have not recognized the need for binary management, or have, but gave up because it is too hard with the current state of tools,</li>
<li>generally try to use configuration plans (or equivalent), but often build binaries that contain topological information that is specific to a particular environment,</li>
<li>maybe have a governance process that is sometimes updated and sometimes followed,</li>
<li>don&#8217;t have a good way to manage dependencies between components,</li>
<li>use virtualization in their development and test environments, though perhaps not in concert with any type of automation,</li>
<li>don&#8217;t have a good way to manage test and development data sets,</li>
<li>have not adopted devops practices, and</li>
<li>do not have a repeatable way to execute tests and deploy the application to different environments.</li>
</ul>
<p>The effect of all of this is that:</p>
<ul>
<li>it is hard to estimate and plan SOA development projects,</li>
<li>projects often overrun their constraints,</li>
<li>often the delivered application is of poor or uncertain quality, and</li>
<li>build and deployment processes are very manual, time consuming, and error prone.</li>
</ul>
<p>Pain all around &#8211; architects and project managers <strong>planning</strong>, developers and build engineers <strong>building</strong>, operations <strong>running</strong>, and of course the poor business customer who has to use the thing!  Projects are delivered late, over budget, and erode the confidence of the business in the whole SOA promise and approach.  So naturally, I asked myself, why is this the case?  Well I think there are a number of contributing factors here:</p>
<ul>
<li>the tools have not matured to a point that enables a lot of these things in a simple way,</li>
<li>there really aren&#8217;t any standards or reference architectures to follow,</li>
<li>some people don&#8217;t think of SOA development as &#8216;real&#8217; development, and therefore don&#8217;t think these kind of practices apply to SOA development,</li>
<li>some of these are still maturing in the wild.</li>
</ul>
<p>Conversely, it does not take a lot of time on Google to find a whole bunch of people who are interested in these areas and are clearly experimenting, prototyping, and sharing their experiences.  And talking with folks who are actively engaged in SOA development, the clear, consistent message I hear is that all of this stuff is &#8216;really important stuff&#8217; and we, as an industry, need it.  It is also not hard to find consulting firms around the world that are developing capabilities and offerings in this space too.</p>
<h2>So where do we go now?</h2>
<p>Over a series of posts, I plan to share some thoughts and experiences on a range of topics, taken from those above, and also to share some practical examples of how to apply some of the state of the art tools and techniques from Java development to SOA development.  In particular, specifically in the context of SOA/MDS/BPM/OSB/ADF, I want to talk about:</p>
<ul>
<li>version control,</li>
<li>dependency management,</li>
<li>build automation,</li>
<li>continuous integration,</li>
<li>continuous inspection,</li>
<li>continuous delivery,</li>
<li>unit testing,</li>
<li>integration testing,</li>
<li>binary management,</li>
<li>environment provisioning,</li>
<li>configuration management,</li>
<li>customization (of binary artifacts to particular environments),</li>
<li>the &#8216;correct&#8217; use of MDS, and</li>
<li>the relationship of SOA development and delivery to governance.</li>
</ul>
<p>And I am planning to talk about tools like Subversion/git/gitlab, Maven, Hudson, Archiva/Artifactory, Sonar, Chef and many others.</p>
<p>I hope you join me on this journey, and please let me know your thoughts.</p>
<p><a title="Version Control" href="http://redstack.wordpress.com/2013/05/06/version-control/">Read next post in this series.</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2865/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2865/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2865&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2013/05/01/soa-development-and-delivery/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>Want a taste of BPM PS6?</title>
		<link>http://redstack.wordpress.com/2013/04/20/want-a-taste-of-bpm-ps6/</link>
		<comments>http://redstack.wordpress.com/2013/04/20/want-a-taste-of-bpm-ps6/#comments</comments>
		<pubDate>Fri, 19 Apr 2013 23:06:35 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[BPM]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2844</guid>
		<description><![CDATA[If you want to see some of the new features of BPM PS6 in action, take a look at this video, which was put together by a team of Oracle technical folks from around the world.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2844&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>If you want to see some of the new features of BPM PS6 in action, take a look at this video, which was put together by a team of Oracle technical folks from around the world.</p>
<span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='640' height='390' src='http://www.youtube.com/embed/HXhWpu17N6c?version=3&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' frameborder='0'></iframe></span>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2844/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2844/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2844&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2013/04/20/want-a-taste-of-bpm-ps6/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>What&#8217;s new in BPM 11.1.1.7 (PatchSet 6)</title>
		<link>http://redstack.wordpress.com/2013/04/03/whats-new-in-bpm-11-1-1-7-patchset-6/</link>
		<comments>http://redstack.wordpress.com/2013/04/03/whats-new-in-bpm-11-1-1-7-patchset-6/#comments</comments>
		<pubDate>Tue, 02 Apr 2013 20:00:15 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[11g]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[PS6]]></category>

		<guid isPermaLink="false">https://redstack.wordpress.com/?p=2593</guid>
		<description><![CDATA[Oracle has just released BPM 11.1.1.7 (also known as “PatchSet 6”).  This release adds a lot of new functionality so I wanted to share with you an overview of what’s new. For the rest of this post, I will be &#8230; <a href="http://redstack.wordpress.com/2013/04/03/whats-new-in-bpm-11-1-1-7-patchset-6/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2593&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Oracle has just released BPM 11.1.1.7 (also known as “PatchSet 6”).  This release adds a lot of new functionality so I wanted to share with you an overview of what’s new.</p>
<p>For the rest of this post, I will be assuming that you are familiar with the functionality in previous releases.  If you are new to BPM, you might want to read back over these two earlier posts first:</p>
<ul>
<li><a href="https://redstack.wordpress.com/2011/01/15/what-bpm-adds-to-soa-suite/">What BPM adds to SOA</a></li>
<li><a href="https://redstack.wordpress.com/2011/09/26/bpm-ps4-feature-pack-released/">What’s new in BPM Feature Pack</a></li>
</ul>
<h2>Overview</h2>
<p>This release adds what I like to think of broadly as two major new sets of functionality:</p>
<ul>
<li>First, it adds all of the tools needed for a business user to be able to use BPM extensively and without the need for a developer (assuming that all of the services and integration they need is in place) – browser based modeling, forms design, simulation, a ‘conference room pilot’/walkthrough capability, as well as enhancements to WorkSpace, BAM and Rules to make them easier for business users, and</li>
<li>Secondly, it adds cases as a new first class citizen.  This release has full support for case management in the runtime engine and in JDeveloper, and exposes APIs to allow you to build your own user interface for case management.</li>
</ul>
<p>We&#8217;ll walk through these in a bit more detail in the remainder of this post.  There is also another small new feature that it worth mentioning &#8211; PS6 will add the ability to migrate a running process instance from one revision of the process model to another.  An ANT-based utility will be available that will allow you to find process instances that are eligible for migration, and to actually perform the revision migration for you.  More on this in a later post!</p>
<h2>Composer – Process Modeling</h2>
<p>There are a number of enhancements to BPM Composer, the web based process modeling environment.  Here is the new project screen, let’s discuss some of the new things we see here:</p>
<p><a href="http://redstack.files.wordpress.com/2012/08/image2.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" alt="image" src="http://redstack.files.wordpress.com/2012/08/image_thumb2.png?w=637&#038;h=388" width="637" height="388" border="0" /></a></p>
<ul>
<li>We can now edit (create <strong>and</strong> update) not just processes, but also rules, human tasks, web forms, business objects, data objects, roles, business indicators and activity guides right here in composer.  ‘What are web forms?’ you say – we will come to that shortly.</li>
<li>We can define and run simulations in composer.</li>
<li>We have this new ‘Process Player’ which essentially lets us conduct a test run of a process – to show a business user what it would be like.</li>
</ul>
<p>The process editor is updated and has a few new options including editing data objects, business indicators and viewing the collaboration diagram.</p>
<p><a href="http://redstack.files.wordpress.com/2012/08/image3.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" alt="image" src="http://redstack.files.wordpress.com/2012/08/image_thumb3.png?w=643&#038;h=308" width="643" height="308" border="0" /></a></p>
<p>Here we can see the new data associations editor.</p>
<p><a href="http://redstack.files.wordpress.com/2012/08/image4.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" alt="image" src="http://redstack.files.wordpress.com/2012/08/image_thumb4.png?w=653&#038;h=193" width="653" height="193" border="0" /></a></p>
<p>And with this release, we get the ability for business users to author and modify rules in Composer.  Here we can see a decision table being created in Composer.  You can also define bucket sets, globals, functions, and If/Then rules.</p>
<p><a href="http://redstack.files.wordpress.com/2012/08/image5.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" alt="image" src="http://redstack.files.wordpress.com/2012/08/image_thumb5.png?w=659&#038;h=247" width="659" height="247" border="0" /></a></p>
<p>This is the Human Task editor.  Here you can see that we can define human tasks in Composer, including the data objects in the payload.  We can use the data association editor to map data from process data objects into the human task payload.  We can also set the outcomes, priority, deadlines, etc., and choose whether the presentation (task form) will be an ADF Form or a Web Form.</p>
<p><a href="http://redstack.files.wordpress.com/2012/08/image6.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" alt="image" src="http://redstack.files.wordpress.com/2012/08/image_thumb6.png?w=655&#038;h=371" width="655" height="371" border="0" /></a></p>
<p>This is the Business Objects editor, where we can define and modify business objects directly in Composer, including simple and complex types, and we can also add documentation.</p>
<p><a href="http://redstack.files.wordpress.com/2012/08/image7.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" alt="image" src="http://redstack.files.wordpress.com/2012/08/image_thumb7.png?w=664&#038;h=438" width="664" height="438" border="0" /></a></p>
<p>So, overall we can see that there is a lot of new functionality in Composer, to the extent really that a business analyst could pretty much model all of the process, data and user interface components right here in their browser, without needing any IT or developer support.</p>
<p>Of course, we still need developers to create the business services and publish them into the Business Catalog so that they are available for use in processes!</p>
<h2>Web Forms</h2>
<p>A major new feature in this release is Web Forms.  This feature gives business users the ability to design the user interface for human tasks right here in Composer.  You can of course still use ADF if you prefer, or any other web framework, to design the task forms.  You can choose on a task by task basis, and you can mix and match as needed.</p>
<p>Web Forms are designed in Composer using a simple drag and drop approach.  You drag form components from the palette and drop them on the form, then you can set properties to control things like names, visibility, sizes, colours, and so on.</p>
<p><a href="http://redstack.files.wordpress.com/2012/08/image8.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" alt="image" src="http://redstack.files.wordpress.com/2012/08/image_thumb8.png?w=670&#038;h=478" width="670" height="478" border="0" /></a></p>
<p>You also have the ability to write ‘form rules’ which allow you to do things like set up validation of fields, or to show and hide fields based on previous selections, or to autofill parts of the form.</p>
<p><a href="http://redstack.files.wordpress.com/2012/08/image9.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" alt="image" src="http://redstack.files.wordpress.com/2012/08/image_thumb9.png?w=628&#038;h=541" width="628" height="541" border="0" /></a></p>
<p>You can also call external services from here.  So if you wanted to call a web service to get a list of product codes in order to populate a form on the field for example, this can also be implemented in a ‘form rule’.</p>
<h2>Simulation</h2>
<p>Previously, simulation was only available in JDeveloper.  Now with PS6, we have the ability for a business user to define and run simulations in Composer.</p>
<p>A simulation is made up of two parts:</p>
<ul>
<li>Simulation Models – which provide details for a single process model, like costs, times, resources, etc., and</li>
<li>Simulation Definitions – which group together all of the simulation models that you want to include in a particular simulation.</li>
</ul>
<p>You can have as many different simulation models and definitions as you like, and simulation models can be reused across as many simulation definitions as you like.</p>
<p>When you create a simulation model, you have the option of setting the properties for all of the interactive (human) tasks and automatic tasks in the one go:</p>
<p><a href="http://redstack.files.wordpress.com/2012/08/image10.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" alt="image" src="http://redstack.files.wordpress.com/2012/08/image_thumb10.png?w=501&#038;h=483" width="501" height="483" border="0" /></a></p>
<p>This is a great new feature – it used to be necessary in older versions to set these one by one for each activity, which could take a long time if you have a lot of activities!</p>
<p>You can also define resources, assign them to roles and give them costs and productivity and availability factors:</p>
<p><a href="http://redstack.files.wordpress.com/2012/08/image11.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" alt="image" src="http://redstack.files.wordpress.com/2012/08/image_thumb11.png?w=508&#038;h=218" width="508" height="218" border="0" /></a></p>
<p>When you run a simulation, you can see details right on the process model.  This example is showing the average number of instances that passed through each activity in the process per time unit for example:</p>
<p><a href="http://redstack.files.wordpress.com/2012/08/image12.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" alt="image" src="http://redstack.files.wordpress.com/2012/08/image_thumb12.png?w=638&#038;h=281" width="638" height="281" border="0" /></a></p>
<p>Simulation allows business users to test one or more processes in various circumstances to understand their behaviour, costs and resource utilisation.</p>
<h2>Process Player</h2>
<p>The Process Player is a new feature that is designed to allow a business user to have a test run through a process to see what it would look like.  It is intended that this feature would be used to conduct a ‘conference room pilot’ of a process – to allow business users to see how the process would actually look and run before it is actually deployed to the production environment.</p>
<p>Player allows you to visualise how a process is going to work.  When you start a Player session, you can map some users to each role in the process, and then start an instance of the process to see how it works.</p>
<p><a href="http://redstack.files.wordpress.com/2012/08/image13.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" alt="image" src="http://redstack.files.wordpress.com/2012/08/image_thumb13.png?w=720&#038;h=303" width="720" height="303" border="0" /></a></p>
<p>As you step through the process, you will see the task forms and you can interact with them as if the process were really deployed.</p>
<p><a href="http://redstack.files.wordpress.com/2012/08/image14.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" alt="image" src="http://redstack.files.wordpress.com/2012/08/image_thumb14.png?w=717&#038;h=376" width="717" height="376" border="0" /></a></p>
<p>The process model is coloured in as you move through the process so that you can easily visualise where you are up to in the process – what has happened, and what will happen next.</p>
<p><a href="http://redstack.files.wordpress.com/2012/08/image15.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" alt="image" src="http://redstack.files.wordpress.com/2012/08/image_thumb15.png?w=628&#038;h=508" width="628" height="508" border="0" /></a></p>
<p>This is intended to provide an easy way to &#8216;show&#8217; and &#8216;explain&#8217; the process to the business owners and stakeholders to validate it is correct before moving on to deploy it.</p>
<h2>New Workspace</h2>
<p>The BPM Workspace has been given a facelift to make it better looking and easier to use.  Here is what it looks like:</p>
<p><a href="http://redstack.files.wordpress.com/2012/08/ps6-workspace.png"><img class="alignnone size-full wp-image-2690" alt="ps6-workspace" src="http://redstack.files.wordpress.com/2012/08/ps6-workspace.png?w=640&#038;h=354" width="640" height="354" /></a></p>
<p>Some of the frequently requested features have been added in this release &#8211; for example easily customisable views (including the inbox), a &#8216;next task&#8217; button, simplified wizards for task reassignment and delegation which display more user information, not just the userid, and a simplified vacation rules editor.</p>
<p><a href="http://redstack.files.wordpress.com/2012/08/ps6-reassign.png"><img class="alignnone size-full wp-image-2691" alt="ps6-reassign" src="http://redstack.files.wordpress.com/2012/08/ps6-reassign.png?w=640&#038;h=208" width="640" height="208" /></a></p>
<p>This new release also allows you to navigate from tasks to process instances easily.</p>
<h2>Case Management</h2>
<p>The other main new feature in this release is Case Management.   Cases are added as a new first class citizen &#8211; alongside BPMN, BPEL, Mediators, Rules, Human Tasks, etc.  In this release there is design time support for cases in JDeveloper, and an API to allow you to build your own Case Management applications/user interfaces.</p>
<p>Learn more about Case Management from this series of posts from my colleague Mark Foster:</p>
<ul>
<li><a href="https://blogs.oracle.com/ateamsoab2b/entry/case_management_part_1_an">Part 1: An Introduction</a></li>
<li><a href="https://blogs.oracle.com/ateamsoab2b/entry/case_management_part_2_anatomy">Part 2: Anatomy of a Project</a></li>
<li><a href="https://blogs.oracle.com/ateamsoab2b/entry/case_management_part_3_runtime">Part 3: Runtime Lifecycle of a Project</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2593/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2593/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2593&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2013/04/03/whats-new-in-bpm-11-1-1-7-patchset-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/08/image_thumb2.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/08/image_thumb3.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/08/image_thumb4.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/08/image_thumb5.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/08/image_thumb6.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/08/image_thumb7.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/08/image_thumb8.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/08/image_thumb9.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/08/image_thumb10.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/08/image_thumb11.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/08/image_thumb12.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/08/image_thumb13.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/08/image_thumb14.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/08/image_thumb15.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/08/ps6-workspace.png" medium="image">
			<media:title type="html">ps6-workspace</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/08/ps6-reassign.png" medium="image">
			<media:title type="html">ps6-reassign</media:title>
		</media:content>
	</item>
		<item>
		<title>Log rotation for WebLogic Server (and friends)</title>
		<link>http://redstack.wordpress.com/2013/02/27/log-rotation-for-weblogic-server-and-friends/</link>
		<comments>http://redstack.wordpress.com/2013/02/27/log-rotation-for-weblogic-server-and-friends/#comments</comments>
		<pubDate>Wed, 27 Feb 2013 03:25:58 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[11g]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[WebLogic]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2695</guid>
		<description><![CDATA[If you have a number of WebLogic Server instances running, or applications that write a lot of information into the logs, you might find that your log files, and your stdout files start to eat up a lot of space &#8230; <a href="http://redstack.wordpress.com/2013/02/27/log-rotation-for-weblogic-server-and-friends/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2695&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>If you have a number of WebLogic Server instances running, or applications that write a lot of information into the logs, you might find that your log files, and your <strong>stdout</strong> files start to eat up a lot of space very quickly.</p>
<p>This can be easily managed with log rolling utilities like <strong>logrotate</strong> for Linux or <strong>logadm</strong> for Solaris. These allow you to automate the process of removing old log entries, and they work by moving the log file contents out through a series of files. This means that you will have effectively controlled the amount of space used for logs, plus you have set a time period that logs are kept online before being archived or deleted.</p>
<p>Let&#8217;s look at an example to understand how it works:</p>
<p><a href="http://redstack.files.wordpress.com/2013/02/logrotation.png"><img class="alignnone size-full wp-image-2696" alt="logrotation" src="http://redstack.files.wordpress.com/2013/02/logrotation.png?w=640"   /></a></p>
<p>In this diagram we are looking at the log growth over time, with time being the vertical axis. So at the top we have a single log file – <strong>AdminServer.log</strong> – and it grows over time, as indicated by the blue bars at the top.</p>
<p>Then, when the first log rotation occurs (the top red dotted line), the content of <strong>AdminServer.log</strong> is moved into <strong>AdminServer.log.0</strong>, as indicated by the purple arrow, and <strong>AdminServer.log</strong> is emptied out, so as WebLogic Server continues to write into this file, we have a much smaller file now (the green one).</p>
<p>This process then repeats. At the next log rotation, the lower red dotted line, we get the contents of<strong> AdminServer.log.0</strong> moved into <strong>AdminServer.log.1</strong>, the contents of <strong>AdminServer.log</strong> moved into <strong>AdminServer.log.0</strong>, and <strong>AdminServer.log</strong> emptied out again.</p>
<p>This continues until we get up to eight files, then the oldest one is deleted and the other seven move one to the right.</p>
<p>Here&#8217;s how to set it up:</p>
<p>First, you need to be starting the WebLogic Server instance in a way that the stdout is being appended to a file, (as opposed to just written to a file). To do this, you need to make sure you use the <strong>&gt;&gt;</strong> shell redirection, not <strong>&gt;</strong>. To get <strong>stdout</strong> and <strong>stderr</strong> in the same file, you would use <strong>&amp;&gt;&gt;</strong>.</p>
<p>Here&#8217;s an example:</p>
<pre>/your/fmwhome/user_projects/domains/base_domain/startWebLogicServer.sh &amp;&gt;&gt; /your/logs/adminserver.out &amp;</pre>
<p>This assumes that you have WebLogic installed in the Oracle Home<strong> /your/fmwhome</strong> and that you are storing your <strong>stdout/stderr</strong> log files in <strong>/your/logs</strong>.</p>
<p><strong>Note</strong>: It is important that you use the append redirection (<strong>&gt;&gt;</strong>), otherwise your log files will not actually shrink in size after rotation, they will just keep growing, so that defeats the purpose of rotation in the first place.</p>
<p><strong>Note</strong>: If you use the Node Manager to start WebLogic Server, it will automatically open the log files in append mode.</p>
<p>Next, you need to set up your log rolling utility – <strong>logrotate</strong> (on Linux) or <strong>logadm</strong> (on Solaris). Let&#8217;s look at each of these in turn.</p>
<h2>logrotate (Linux)</h2>
<p>The configuration for <strong>logrotate</strong> is kept in <strong>/etc/logrotate.conf</strong>. You need to add a stanza in there for each of the log files you want to rotate. Here is an example for the <strong>stdout</strong> file from above, and the server log file:</p>
<pre>/your/fmwhome/user_projects/domains/base_domain/servers/AdminServer/logs/AdminServer.log {
  copytruncate
  daily
  rotate 8
}
/your/logs/adminserver.out {
  copytruncate
  daily
  rotate 8
}</pre>
<p>Let&#8217;s explore these. The first line names the log file to rotate. Rotation is essentially going to move that log to a different file and create a new empty log. The line &#8216;<strong>rotate 8</strong>&#8216; tells <strong>logrotate</strong> to keep up to eight log files. The <strong>&#8216;daily&#8217;</strong> means to roll them once a day, and the <strong>&#8216;copytruncate&#8217;</strong> tells it which method to use – in this case to copy the file into a new file, then empty it out (as opposed to the other method which is to rename the file and create a new one – this method will not work with WebLogic Server or other JVM applications).</p>
<p>You can also force <strong>logrotate</strong> to run immediately, which is useful for checking you have everything set up correctly. This is done (as root) by issuing the command:</p>
<pre>logrotate -f /etc/logrotate.conf</pre>
<p><strong>logrotate</strong> has many other options that allow you to specify different time periods, actions to take before and after log rotation, and size limits for when rotation should occur, to name a few. You should take a look at the <strong>logrotate</strong> documentation to see how to use it to best suit your scenario.</p>
<h2>logadm (Solaris)</h2>
<p><strong>logadm</strong> provides essentially the same capabilities as <strong>logrotate,</strong> but the configuration is slightly different. To set up the same example as we saw above with <strong>logadm,</strong> we need to issue the following commands (as root):</p>
<pre>logadm -w /your/fmwhome/user_projects/domains/base_domain/servers/AdminServer/logs/AdminServer.log -P 1d -c
logadm -w /your/logs/adminserver.out -P 1d -c</pre>
<p>These commands will update the <strong>logadm</strong> configuration file (<strong>/etc/logadm.conf</strong>) with the necessary entries – the <strong>-w</strong> option means &#8216;write to configuration file&#8217;. It is not recommended to edit the file directly, but to use the <strong>logadm -w</strong> command to update it – to prevent errors.</p>
<p>After the<strong> -w</strong>, we see the name of the file to rotate, then<strong> -P 1d</strong>, which means period of one day – i.e. daily – and <strong>-c</strong> which tells <strong>logadm</strong> to use the copy and truncate method.</p>
<p>To force <strong>logadm</strong> to run immediately, you need to do two things. First, you need to tell it to assume the last run was some time in the past, this is done by issuing the same command (as root) with a timestamp on it, e.g.:</p>
<pre>logadm -w /your/logs/adminserver.out -P 1d -c -p 'Mon Feb 25 02:00:00 2013'</pre>
<p>This tells <strong>logadm</strong> to assume the last time it ran for this file was on that date, which is more than a day ago.  The last run timestamps are stored in<strong> /var/logadm/timestamps</strong> if you want to take a look.</p>
<p>You can then issue the following command (as root) to force <strong>logadm</strong> to run immediately:</p>
<pre>logadm</pre>
<p>Just like <strong>logrotate, logadm</strong> has a bunch of other options that let you control how often rotation is done, size limts, pre/post actions, etc. Take a look at the documentation to see what you need for your scenario.</p>
<p>Enjoy!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2695/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2695/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2695&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2013/02/27/log-rotation-for-weblogic-server-and-friends/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2013/02/logrotation.png" medium="image">
			<media:title type="html">logrotation</media:title>
		</media:content>
	</item>
		<item>
		<title>BPM 11g Performance Tuning Whitepaper published</title>
		<link>http://redstack.wordpress.com/2013/02/26/bpm-11g-performance-tuning-whitepaper-published/</link>
		<comments>http://redstack.wordpress.com/2013/02/26/bpm-11g-performance-tuning-whitepaper-published/#comments</comments>
		<pubDate>Tue, 26 Feb 2013 00:07:51 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[11g]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2685</guid>
		<description><![CDATA[I am happy to announce our new BPM 11g Performance Tuning whitepaper is now available on OTN (here).  This white paper captures real world best practices from actual performance tuning exercises across many real BPM implementations &#8211; that&#8217;s &#8216;best practices&#8217; &#8230; <a href="http://redstack.wordpress.com/2013/02/26/bpm-11g-performance-tuning-whitepaper-published/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2685&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I am happy to announce our new <strong>BPM 11g Performance Tuning</strong> whitepaper is now available on OTN (<a href="http://www.oracle.com/technetwork/middleware/bpm/learnmore/bpm11gperftuning-1912340.pdf">here</a>).  This white paper captures real world best practices from actual performance tuning exercises across many real BPM implementations &#8211; that&#8217;s &#8216;best practices&#8217; in the sense that these are the things that we have found over time and over many engagements to give the best results.</p>
<p>This whitepaper has been under development for quite a while now, and has been through a heap of reviews and revisions.  So it is great to finally get it out there, and hopefully you will find it useful!</p>
<p>Many people have contributed to this whitepaper &#8211; from reporting on tuning experiences, to writing, reviewing, and testing.  I would like to thank the following folks:</p>
<p>Vikas Anand, Deepak Arora, Partricio Barletta, Heidi Buelow, Christopher Karl Chan, Manoj Das, Andrew Dorman, Pete Farkas, Mark Foster, Simone Geib, Kim LiChong, Ralf Mueller, Bhagat Nainani, Sabha Parameswaran, Robert Patrick, David Read, Derek Sharpe, Sushil Shukla, Kavitha Srinivasan, Meera Srinivasan, Will Stallard and Shumin Zhao.</p>
<p>I sincerely hope that I have not forgotten anyone, but if I have, the error is entirely mine.</p>
<p>This whitepaper is meant to compliment the <a href="http://docs.oracle.com/cd/E23943_01/core.1111/e10108/toc.htm">Performance and Tuning Guide</a> in the Fusion Middleware documentation.  Readers should also consult the excellent whitepaper on purging SOA/BPM 11g databases by Michael Bousamra with Deepak Arora and Sai Sudarsan Pogaru which is available on OTN (<a href="http://www.oracle.com/technetwork/database/features/availability/soa11gstrategy-1508335.pdf">here</a>).</p>
<p>For those with an interest in BPM 10g, I remind you of our previously published BPM 10g Performance Tuning whitepaper, which continues to be available on OTN (<a href="http://www.oracle.com/technetwork/middleware/bpm/learnmore/bpm10gperformancetuning-476208.pdf">here</a>).</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2685/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2685/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2685&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2013/02/26/bpm-11g-performance-tuning-whitepaper-published/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>Thinking of getting certified for SOA Suite?</title>
		<link>http://redstack.wordpress.com/2013/02/19/thinking-of-getting-certified-for-soa-suite/</link>
		<comments>http://redstack.wordpress.com/2013/02/19/thinking-of-getting-certified-for-soa-suite/#comments</comments>
		<pubDate>Tue, 19 Feb 2013 10:15:52 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[11g]]></category>
		<category><![CDATA[certification]]></category>
		<category><![CDATA[exam]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2683</guid>
		<description><![CDATA[If you are thinking of getting your Oracle SOA Suite certification, you may like to check out the new beta release of certification exam 1Z1-478 for the Oracle SOA Suite 11g Certified Implementation Specialist certification.  I was lucky enough to &#8230; <a href="http://redstack.wordpress.com/2013/02/19/thinking-of-getting-certified-for-soa-suite/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2683&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>If you are thinking of getting your Oracle SOA Suite certification, you may like to check out the new beta release of certification exam 1Z1-478 for the <strong>Oracle SOA Suite 11g Certified Implementation Specialist</strong> certification.  I was lucky enough to be able to write some of the questions for this exam.</p>
<p>You can find the beta exam <a href="http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=5001&amp;get_params=p_exam_id:1Z0-478">here</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2683/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2683/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2683&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2013/02/19/thinking-of-getting-certified-for-soa-suite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>Collecting diagnostic information for BPM</title>
		<link>http://redstack.wordpress.com/2013/01/31/collecting-diagnostic-information-for-bpm/</link>
		<comments>http://redstack.wordpress.com/2013/01/31/collecting-diagnostic-information-for-bpm/#comments</comments>
		<pubDate>Thu, 31 Jan 2013 02:21:50 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[Diagnostics]]></category>
		<category><![CDATA[Heap Dump]]></category>
		<category><![CDATA[oracle support]]></category>
		<category><![CDATA[Thread Dump]]></category>
		<category><![CDATA[WebLogic]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2671</guid>
		<description><![CDATA[From time to time, you may experience some kind of issue in your BPM environment. Issues could be caused by a wide variety of reasons – changes to the environment, the pattern of load on the environment, product defects, bad &#8230; <a href="http://redstack.wordpress.com/2013/01/31/collecting-diagnostic-information-for-bpm/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2671&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>From time to time, you may experience some kind of issue in your BPM environment. Issues could be caused by a wide variety of reasons – changes to the environment, the pattern of load on the environment, product defects, bad process design, insufficient resources allocated to the environment, network instability – just to name a few!</p>
<p>When something goes wrong, it is important to know how to collect the diagnostic information that will be needed to analyse the problem, work out the root cause, and come up with a resolution. In some cases, you may be able to do this analysis yourself. In other cases you may need to involve specialists like network engineers, directory administrators, or Oracle Support, for example.</p>
<p>Let&#8217;s take a look at the kinds of diagnostic information that may be needed. Of course, it may not be necessary to collect all of these for any given issue. If you are unsure, then it is a good idea to collect them anyway, just in case you need them.</p>
<p><span style="color:#ff0000;"><b>Note:</b></span> The purpose of this article is to tell you how to <b>collect</b> the data, not how to analyse it. Sometimes that analysis requires specialist skills and experience, but even then, those specialists rely on having access to the data.</p>
<h2>BPM server/cluster configuration files</h2>
<p>The first thing that you will want to collect is the configuration files for your environment. There are many different types of configurations that are possible, and these files contain the information necessary for someone to understand exactly how your particular environment is configured.</p>
<p>These files are located inside your WebLogic domain&#8217;s home directory, in the <b>config</b> directory. You will see files and directories like this:</p>
<pre>config
|-- config.xml
|-- configCache
|-- deployments
|-- diagnostics
|-- fmwconfig
|-- jdbc
|-- jms
|-- nodemanager
|-- security
`-- startup</pre>
<p>You can just zip up this whole directory to collect the files. You might use a command like this for example:</p>
<pre>tar xzvf bpm_config.tar.gz /home/oracle/fmwhome/user_projects/domains/base_domain/config</pre>
<p><span style="color:#ff0000;"><b>Note:</b></span> All of the examples in this post show the Oracle Middleware home as <b>/home/oracle/fmwhome</b> and the WebLogic domain name as <b>base_domain</b>. You will need to adjust these to suit your own environment.</p>
<p>The next useful piece of information to capture is a list of which patches (if any) you have installed in your environment. The best way to collect this information is to capture the output of the <b>opatch lsinventory</b> command. You should run this twice, first with <b>ORACLE_HOME</b> set to the <b>Oracle_SOA1</b> directory under your install directory, and second with it set to the <b>oracle_common</b> directory under your install directory.</p>
<p>The example below shows running the <b>opatch lsinventory </b>command for <b>ORACLE_HOME=/home/oracle/fmwhome/Oracle_SOA1</b> and the output, which in this case shows that no patches have been installed. In this example, you would also run it again with <b>ORACLE_HOME=/home/oracle/fmwhome/oracle_common</b>.</p>
<pre>[oracle@ps5 Oracle_SOA1]$ export ORACLE_HOME=/home/oracle/fmwhome/Oracle_SOA1
[oracle@ps5 Oracle_SOA1]$ export PATH=$ORACLE_HOME/OPatch:$PATH
[oracle@ps5 Oracle_SOA1]$ opatch lsinventory
Oracle Interim Patch Installer version 11.1.0.9.0
Copyright (c) 2011, Oracle Corporation.  All rights reserved.

Oracle Home       : /home/oracle/fmwhome/Oracle_SOA1
Central Inventory : /home/oracle/oraInventory
   from           : /home/oracle/fmwhome/Oracle_SOA1/oraInst.loc
OPatch version    : 11.1.0.9.0
OUI version       : 11.1.0.9.0
OUI location      : /home/oracle/fmwhome/Oracle_SOA1/oui
Log file location : /home/oracle/fmwhome/Oracle_SOA1/cfgtoollogs/opatch/opatch2012-12-20_11-18-33AM_1.log

Patch history file: /home/oracle/fmwhome/Oracle_SOA1/cfgtoollogs/opatch/opatch_history.txt

OPatch detects the Middleware Home as "/home/oracle/fmwhome"

Lsinventory Output file location : /home/oracle/fmwhome/Oracle_SOA1/cfgtoollogs/opatch/lsinv/lsinventory2012-12-20_11-18-33AM.txt

--------------------------------------------------------------------------------
Installed Top-level Products (1): 

Oracle SOA Suite 11g                                                 11.1.1.6.0
There are 1 products installed in this Oracle Home.

There are no Interim patches installed in this Oracle Home.

--------------------------------------------------------------------------------

OPatch succeeded.</pre>
<h2>BPM log files</h2>
<p>The information we have collected already is generic in nature and is used to ensure the domain configuration is correct and there are no obvious problems. From this point on, we are looking at information that is used to analyse a specific problem.</p>
<p>The server log and &#8216;out&#8217; files are often the very first place we will look when there is a problem. These files will usually contain error messages that ,will give some information about the cause of the problem.</p>
<p>You can use a command like this to collect the logs. Remember to collect the logs from your AdminServer and each of your managed servers.</p>
<pre>tar xzvf soa_server1_logs.tar.gz /home/oracle/fmwhome/user_projects/domains/base_domain/servers/soa_server1/logs</pre>
<p>This will also collect the <b>diagnostic_images</b> if there are any available. These provide additional information about certain problems.</p>
<p>It is important to understand that a problem may occur only on one server, or on a number of servers. This is why it is important to collect the logs from all of the servers. Sometimes it is necessary to analyse data from several sources in order to understand what was happening in the environment.</p>
<p>Sometimes, during the analysis of a problem, you may be asked to turn on some debug/trace settings and attempt to recreate the problem. If this happens, the output from those traces almost always end up in these logs.</p>
<h2>Incident logs</h2>
<p>WebLogic collects some data by default when various &#8216;incidents&#8217; occur, for example when a &#8216;stuck thread&#8217; is encountered. The data collected depends on the incident, but it usually contains things like thread dumps, logs, and error messages.</p>
<p>These data are stored inside the server directories in your domain directory. To collect them, you could use a command like the example below. Remember to collect the incident logs for you AdminServer and each of your managed servers.</p>
<pre>tar xzvf incident_logs.tar.gz /home/oracle/fmwhome/user_projects/domains/base_domain/servers/soa_server1/adr/diag/ofm/base_domain/soa_server1/incident</pre>
<h2>Thread dumps</h2>
<p>A <b>thread dump</b> is a snapshot of what is happening in the server at a particular point in time. It allows us to see what each thread in the server process is doing. This information is helpful to understand how the server is behaving and what it is doing.</p>
<p>You can take a thread dump in a variety of ways, and how you do it depends on your operating system, how you started the server, e.g. whether you started it from a command line or the node manager, and if the server has become unresponsive.</p>
<p>Here are some of the common ways to take a thread dump:</p>
<ul>
<li>Pressing <b>Ctrl-Break</b> on Windows, or <b>Ctrl-\</b> on Linux/Solaris/etc. in the window running the WebLogic process (in the foreground),</li>
<li>Sending signal 3 (<b>SIGQUIT</b>) to the process (<b>kill -3 PID</b>),</li>
<li>Connecting to the process with a utility like <b>jvisualvm</b> and pressing the <b>Thread Dump</b> button:<img class="alignnone size-full wp-image-2672" alt="bpmdiag1" src="http://redstack.files.wordpress.com/2013/01/bpmdiag1.png?w=640&#038;h=419" width="640" height="419" /></li>
<li>Requesting a thread dump in the WebLogic Server console by navigating to the server, then the <b>Monitoring</b> tab and the <b>Threads</b> sub-tab and pressing the <b>Dump Thread Stacks</b> button:<img class="alignnone size-full wp-image-2673" alt="bpmdiag2" src="http://redstack.files.wordpress.com/2013/01/bpmdiag2.png?w=640&#038;h=305" width="640" height="305" /></li>
<li>Use <b>jstack PID</b> (or <b>jrcmd PID print_threads</b> for JRockit).</li>
</ul>
<p>Most of the time, more than one thread dump will be required. A series of thread dumps over some time period are needed in order to understand how the server is behaving over time. For example, a thread dump might show that a particular thread is &#8216;stuck&#8217;. Another (later) thread dump will be needed to see if that thread becomes unstuck by itself later on (as commonly happens) or not. Thus the two thread dumps together would be necessary to determine if the stuck thread was a problem or not.</p>
<p>It is also important to take thread dumps on all of the servers that are (or could possibly be) affected by or contributing to the problem. If in doubt, take thread dumps on all of the servers.</p>
<p>As a general rule of thumb, you should take five thread dumps over a period of time. How do you work out a suitable period of time? If you have a specific problem, for example you see some error message and then a minute later all of your servers become unresponsive, then the time period is that minute. Take a thread dump when you first see the error message appear, then one every 20 seconds (or so). If you don&#8217;t have any way to guess the suitable time period, just take them a minute apart.</p>
<p>The example below shows what the output from the thread dump looks like. Note that many lines have been removed from this output.</p>
<pre>2012-12-31 10:26:12
Full thread dump Java HotSpot(TM) 64-Bit Server VM (20.10-b01 mixed mode):

"JMX server connection timeout 48" daemon prio=10 tid=0x00007fabf8006800 nid=0x232f in Object.wait() [0x00007fac330b4000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on &lt;0x00000000f61ad8c0&gt; (a [I)
	at com.sun.jmx.remote.internal.ServerCommunicatorAdmin$Timeout.run(ServerCommunicatorAdmin.java:150)
	- locked &lt;0x00000000f61ad8c0&gt; (a [I)
	at java.lang.Thread.run(Thread.java:662)

(many lines deleted)

"main" prio=10 tid=0x00007facc4008800 nid=0x21db in Object.wait() [0x00007facc9f38000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on &lt;0x00000000e0bb22a0&gt; (a weblogic.t3.srvr.T3Srvr)
	at java.lang.Object.wait(Object.java:485)
	at weblogic.t3.srvr.T3Srvr.waitForDeath(T3Srvr.java:981)
	- locked &lt;0x00000000e0bb22a0&gt; (a weblogic.t3.srvr.T3Srvr)
	at weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:490)
	at weblogic.Server.main(Server.java:71)

"VM Thread" prio=10 tid=0x00007facc406e000 nid=0x21e4 runnable 

"GC task thread#0 (ParallelGC)" prio=10 tid=0x00007facc401b800 nid=0x21dc runnable 

"GC task thread#1 (ParallelGC)" prio=10 tid=0x00007facc401d800 nid=0x21dd runnable 

"VM Periodic Task Thread" prio=10 tid=0x00007facc40ad000 nid=0x21eb waiting on condition 

JNI global references: 1601

Heap
 PSYoungGen      total 111744K, used 71412K [0x00000000f5560000, 0x00000000fdaa0000, 0x0000000100000000)
  eden space 89856K, 76% used [0x00000000f5560000,0x00000000f985f160,0x00000000fad20000)
  from space 21888K, 12% used [0x00000000fc540000,0x00000000fc7fe198,0x00000000fdaa0000)
  to   space 23296K, 0% used [0x00000000fad20000,0x00000000fad20000,0x00000000fc3e0000)
 PSOldGen        total 174784K, used 65947K [0x00000000e0000000, 0x00000000eaab0000, 0x00000000f5560000)
  object space 174784K, 37% used [0x00000000e0000000,0x00000000e4066c60,0x00000000eaab0000)
 PSPermGen       total 131072K, used 125060K [0x00000000d0000000, 0x00000000d8000000, 0x00000000e0000000)
  object space 131072K, 95% used [0x00000000d0000000,0x00000000d7a211b8,0x00000000d8000000)</pre>
<h2>Heap dumps</h2>
<p>Another kind of dump that may be required for some problems is a heap dump. A heap dump is essentially a copy of everything that the JVM has in memory (in the heap) at a particular point in time. These are usually going to be pretty big files – they will be at least as big as the amount of used heap. So if you are running your BPM managed server with an 8GB heap, and it is 75% in use when you take the heap dump, then the heap dump is going to be about 6GB in size.</p>
<p>Heap dumps are used to look at the contents of the JVM&#8217;s memory in detail. They allow us to look at every object in the JVM and see the state of those objects.</p>
<p>Heap dumps are often used to diagnose a class of problems called &#8216;memory leaks&#8217;. While a single heap dump can lead us to suspect a memory leak, two heap dumps (from the same JVM at different times) are needed to confirm that a memory leak actually exists.</p>
<p>Heap dumps are also useful for other kinds of problems, where we need to look at the contents of various objects to understand what the server is doing.</p>
<p>It is a good practice to collect heap dumps when problems occur, but you should not send them to Oracle unless they are requested. Since they are so large, you may also wish to compress them and delete them after the problem they relate to has been resolved.</p>
<p>You can generate a heap dump from a tool like <b>jvisualvm</b> (by pressing the <b>Heap Dump</b> button) as shown below:</p>
<p><a href="http://redstack.files.wordpress.com/2013/01/bpmdiag3.png"><img class="alignnone size-full wp-image-2674" alt="bpmdiag3" src="http://redstack.files.wordpress.com/2013/01/bpmdiag3.png?w=640&#038;h=419" width="640" height="419" /></a></p>
<p>You can also collect a heap dump using <b>jmap</b> using a command like the one below:</p>
<pre>jmap -dump:format=b,file=heap_dump_1.bin pid</pre>
<p>If the problem is suspected to be a memory leak, you may be asked to carry out the following steps:</p>
<ul>
<li>allow the server to come to a steady state after startup,</li>
<li>perform six full garbage collections (by pressing the <b>Perform GC</b> button, next to the <b>Heap Dump</b> button, six times),</li>
<li>take a heap dump,</li>
<li>attempt to reproduce the issue, i.e. do whatever it is you do to make the problem occur,</li>
<li>take another heap dump.</li>
</ul>
<p>Another good practice is to ensure that you have configured WebLogic to automatically take a heap dump if it runs out of memory. This is done by adding the following parameter to the JVM:</p>
<pre>-XX:+HeapDumpOnOutOfMemoryError</pre>
<p>This setting often saves a lot of pain – if your server crashes because it ran out of memory, then this setting is pretty likely to capture the information needed to work out what went wrong. If you do not have this setting, you would need to add it, and wait for the problem to happen again. It is safe to have this setting on all of your production servers. Note that it takes some time to take a heap dump (how long depends on the size of the heap and the speed of your disks) so there is a trade-off here – collecting the information needed to fix the problem will mean that your server restart will take a bit longer, as you will have to wait for the heap dump to finish before you restart the server(s).</p>
<h2>Garbage Collection logs</h2>
<p>Garbage collection logs are very useful for analysing memory related issues. The JVM will not produce these logs by default, you need to tell it to produce them.</p>
<p>These three settings will cause the JVM to print out more detailed information about garbage collection and to produce a log (called <b>gc.log</b> in this example) that contains garbage collection statistics and information that is very useful when trying to do some JVM tuning:</p>
<pre>    -XX:+PrintGCTimeStamps
    -XX:+PrintGCDetails
    -Xloggc:gc.log</pre>
<p>And, as mentioned in the previous section, it is also a good idea to turn on this setting:</p>
<pre>    -XX:+HeapDumpOnOutOfMemoryError</pre>
<p>These settings are safe to leave on all the time in your production environment.</p>
<h2>Database information – AWR reports</h2>
<p>Many performance related issues may have to do with the underlying database. For this reason, it is important to capture some information about the database performance as well. You should collect the AWR reports for the same period during which you observed the problem in BPM. To be on the safe side, start a little earlier and end a little later. For example, if the problem occurred from 10am until noon, you might collect AWR reports from 9am to 1pm.</p>
<p>You can find more information about what AWR reports are and how to collect them in <a title="Getting started with tuning your SOA/BPM database using AWR" href="http://redstack.wordpress.com/2011/11/24/getting-started-with-tuning-your-soabpm-database-using-awr/">this post</a>.</p>
<h2>HTTP Server logs</h2>
<p>For some kinds of problems, it is useful to see the logs from the HTTP Server (if any) which is in front of your BPM server or cluster. These are often useful if you are getting refused connections for example.</p>
<p>You should gather the following logs:</p>
<pre>  access.log  
  error.log</pre>
<p>If you are using Oracle Web Tier (or Oracle HTTP Server), these logs will be located in the following directory, assuming your Oracle Web Tier Home is <b>/home/oracle/httphome</b> and you used the default names for the instance:</p>
<pre>/home/oracle/httphome/Oracle_WT1/instances/instance1/diagnostics/logs/OHS/ohs1</pre>
<p>Debug logs for the WebLogic plugin may also be useful if you are seeing nodes being evicted from the cluster or if you suspect that the cluster is unbalanced – e.g. you can see a different number of sessions on each node in the cluster.</p>
<p>To obtain these, you need to set <b>DEBUG=ALL</b> in the <b>httpd-vhosts.conf </b>file. This will produce a log called <b>wlproxy.log</b>.</p>
<h2>Operating system level information</h2>
<p>Sometimes performance information from the operating system level can be helpful as well. You might want to consider using tools like <b>top</b> or <b>prstat</b> (with thread/&#8217;lightweight process&#8217; support), <b>sar</b>, <b>vmstat</b>, <b>mpstat</b>, <b>iostat</b>, and <b>netstat.</b> If you are have a possibly network-related issue, for example loss of communications between cluster members, then tcpdump may also capture useful information.</p>
<p>Remember, if you are running a cluster, you would need to collect these on all nodes in the cluster at the same time.</p>
<h2>Java information</h2>
<p>There are also several Java tools that can help you to collect additional information. If you are not familiar with these, it might be a good idea to explore what they can do for you. I would suggest looking at <b>jps</b>, <b>jstat</b>, <b>jinfo</b>, <b>jstack</b>, <b>jmap</b>, and <b>jtop</b>.</p>
<h2>How to send information to Oracle Support</h2>
<p>If you need help with the problem, you should contact Oracle Support and open a Service Request (SR). The Oracle Support system will allow you to upload attachments to the SR so that you can provide information you have collected. If the files are large, like a heap dump for example, then you should upload them to Oracle Support&#8217;s FTP server instead. Support will give you instructions on how to access the ftp server and where to put your files.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2671/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2671/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2671&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2013/01/31/collecting-diagnostic-information-for-bpm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2013/01/bpmdiag1.png" medium="image">
			<media:title type="html">bpmdiag1</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2013/01/bpmdiag2.png" medium="image">
			<media:title type="html">bpmdiag2</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2013/01/bpmdiag3.png" medium="image">
			<media:title type="html">bpmdiag3</media:title>
		</media:content>
	</item>
		<item>
		<title>BPMN process editor problems in 11.1.1.6 (update)</title>
		<link>http://redstack.wordpress.com/2012/12/31/bpmn-process-editor-problems-in-11-1-1-6-update/</link>
		<comments>http://redstack.wordpress.com/2012/12/31/bpmn-process-editor-problems-in-11-1-1-6-update/#comments</comments>
		<pubDate>Sun, 30 Dec 2012 22:34:51 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[BPMN]]></category>
		<category><![CDATA[patch]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2668</guid>
		<description><![CDATA[I wrote some time ago (in this post) about a patch for some issues with the layout in the BPMN process editor in 11.1.1.6.  I know that a lot of folks have contacted Support to ask for the patch that &#8230; <a href="http://redstack.wordpress.com/2012/12/31/bpmn-process-editor-problems-in-11-1-1-6-update/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2668&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I wrote some time ago (in <a title="BPMN process editor problems in 11.1.1.6" href="http://redstack.wordpress.com/2012/06/27/bpmn-process-editor-problems-in-11-1-1-6/">this post</a>) about a patch for some issues with the layout in the BPMN process editor in 11.1.1.6.  I know that a lot of folks have contacted Support to ask for the patch that I mentioned in that post, and I know that some of you were told by Support that there was no patch available.</p>
<p>We have worked with Support to fix this problem, and I am happy to say that the patch is available to download from Oracle Support now.  I hope you did not have too much inconvenience.</p>
<p>The Patch number is 13088538: NPE IN O.BPM.UI.LAYOUT.MIGLAYOUT:114.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2668/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2668/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2668&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/12/31/bpmn-process-editor-problems-in-11-1-1-6-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>A review of Oracle SOA Suite 11g Administrator&#8217;s Handbook</title>
		<link>http://redstack.wordpress.com/2012/10/28/a-review-of-oracle-soa-suite-11g-administrators-handbook/</link>
		<comments>http://redstack.wordpress.com/2012/10/28/a-review-of-oracle-soa-suite-11g-administrators-handbook/#comments</comments>
		<pubDate>Sat, 27 Oct 2012 17:40:25 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[11g]]></category>
		<category><![CDATA[Administration]]></category>
		<category><![CDATA[Arun Pareek]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[Book]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[Packt]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[troubleshooting]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2663</guid>
		<description><![CDATA[Highly recommended, a tour de force. Packt&#8217;s new Oracle SOA Suite 11g Administrator&#8217;s Handbook by Ahmed Aboulnaga and Arun Pareek is packed full of essential information for the Oracle SOA administrator, in fact I would go so far as to &#8230; <a href="http://redstack.wordpress.com/2012/10/28/a-review-of-oracle-soa-suite-11g-administrators-handbook/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2663&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><em>Highly recommended, a tour de force.</em></p>
<p>Packt&#8217;s new <a href="http://www.packtpub.com/oracle-soa-suite-11g-administrators-handbook/book">Oracle SOA Suite 11g Administrator&#8217;s Handbook</a> by Ahmed Aboulnaga and <a href="http://beatechnologies.wordpress.com/">Arun Pareek</a> is packed full of essential information for the Oracle SOA administrator, in fact I would go so far as to say that it should be <em>required reading</em> for administrators who are new the the Oracle SOA Suite platform.  I think that reading it would greatly shorten the learning curve and help new administrators avoid many common problems or points of confusion.</p>
<p>More so than any other single piece of content that I have seen on the topic, it provides the information that a SOA administrator needs to know in order to successfully configure, manage, monitor, troubleshoot and backup an Oracle SOA environment.</p>
<p>It is clear and to the point, it presents just the information that you need, and the information is easy to find.  It is not cluttered up with a whole bunch of extra information you don&#8217;t need.  It is detailed and technical &#8211; providing information that you can use.  I think the book is not only a great introduction for a new administrator who needs to get a feel for Oracle SOA Suite, but it is also a great <em>reference volume</em> to keep on hand, even for experienced administrators.</p>
<p>It is obvious when reading the book that the authors have extensive experience and that they know what is important to their audience.  I have been working with Oracle SOA Suite for several years now, since 10g days, and I am one of the authors of the official Oracle SOA Suite Certification question base, and even I learned things from this book that I did not know.</p>
<p>The book covers topics like managing the SOA infrastructure, managing composite applications, monitoring SOA Suite, tuning, configuration and administration, troubleshooting, security policies, managing MDS and the dehydrations store and backup and recovery.</p>
<p>The bonus <em>online chapter</em> covers important issues like patching, upgrading from 10g, cluster configuration and silent (scripted) installation.</p>
<p>I for one will be keeping this book on my book shelf and I highly recommend it to anyone interested in or working with Oracle SOA Suite, in an administration capacity, or who just wants to know more about the product in general.</p>
<address>Packt Publishing provides reviewers with a free copy of the e-book.</address>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2663/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2663/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2663&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/10/28/a-review-of-oracle-soa-suite-11g-administrators-handbook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>New ADF Mobile released</title>
		<link>http://redstack.wordpress.com/2012/10/24/new-adf-mobile-released/</link>
		<comments>http://redstack.wordpress.com/2012/10/24/new-adf-mobile-released/#comments</comments>
		<pubDate>Tue, 23 Oct 2012 14:03:08 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ADF]]></category>
		<category><![CDATA[ADF Mobile]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2661</guid>
		<description><![CDATA[Oracle has just released the new Oracle ADF Mobile which allows you to build native applications that will install and run on both iOS and Android devices from the same ADF source code. Development is done with JDeveloper and ADF &#8230; <a href="http://redstack.wordpress.com/2012/10/24/new-adf-mobile-released/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2661&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Oracle has just released the new <a href="http://www.oracle.com/technetwork/developer-tools/adf/overview/adf-mobile-096323.html">Oracle ADF Mobile</a> which allows you to build <strong>native</strong> applications that will install and run on both iOS and Android devices from the same ADF source code.</p>
<p>Development is done with JDeveloper and ADF and leverages Java and HTML 5 technologies, while keeping the same visual and declarative approach ADF is known for.</p>
<p>You can read more about the Oracle ADF Mobile release <a href="https://blogs.oracle.com/mobile/entry/adf_mobile_released">here</a> and learn more on its OTN page <a href="http://www.oracle.com/technetwork/developer-tools/adf/overview/adf-mobile-096323.html">here</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2661/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2661/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2661&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/10/24/new-adf-mobile-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>Oracle releases ADF Essentials</title>
		<link>http://redstack.wordpress.com/2012/10/17/oracle-releases-adf-essentials/</link>
		<comments>http://redstack.wordpress.com/2012/10/17/oracle-releases-adf-essentials/#comments</comments>
		<pubDate>Wed, 17 Oct 2012 03:07:09 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ADF]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2658</guid>
		<description><![CDATA[In case you missed it, Oracle has released a new free version of ADF called ADF Essentials.  You can find more information in the press release or the online demo.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2658&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>In case you missed it, Oracle has released a new <span style="color:#ff0000;">free</span> version of ADF called <strong>ADF Essentials</strong>.  You can find more information <a href="http://www.oracle.com/us/corporate/press/1851249?msgid=3-7297471460">in the press release</a> or the <a href="http://download.oracle.com/otn_hosted_doc/jdeveloper/11gdemos/ADFEssentials/adfEssentialsFull.html">online demo</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2658/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2658/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2658&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/10/17/oracle-releases-adf-essentials/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>Reading Oracle SOA Suite 11g Administrator&#8217;s Handbook</title>
		<link>http://redstack.wordpress.com/2012/10/16/reading-oracle-soa-suite-11g-administrators-handbook/</link>
		<comments>http://redstack.wordpress.com/2012/10/16/reading-oracle-soa-suite-11g-administrators-handbook/#comments</comments>
		<pubDate>Tue, 16 Oct 2012 08:30:53 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2655</guid>
		<description><![CDATA[I am reading the new Oracle SOA Suite 11g Administrator&#8217;s Handbook by Ahmed Aboulnaga and Arun Pareek.  I am half way through it and I have to say &#8211; it is just great!  Will post some detailed comments soon!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2655&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I am reading the new <a href="http://www.packtpub.com/oracle-soa-suite-11g-administrators-handbook/book">Oracle SOA Suite 11g Administrator&#8217;s Handbook</a> by Ahmed Aboulnaga and Arun Pareek.  I am half way through it and I have to say &#8211; it is just great!  Will post some detailed comments soon!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2655/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2655/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2655&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/10/16/reading-oracle-soa-suite-11g-administrators-handbook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>Packt celebrating 1,000th title</title>
		<link>http://redstack.wordpress.com/2012/09/28/packt-celebrating-1000th-title/</link>
		<comments>http://redstack.wordpress.com/2012/09/28/packt-celebrating-1000th-title/#comments</comments>
		<pubDate>Fri, 28 Sep 2012 11:08:44 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2609</guid>
		<description><![CDATA[As many of you will know from my last post, we are very happy to have released our first book with Packt &#8211; quite an achievement for us.  But Packt is celebrating an achievement of their own &#8211; they are &#8230; <a href="http://redstack.wordpress.com/2012/09/28/packt-celebrating-1000th-title/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2609&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>As many of you will know from my last post, we are very happy to have released our first book with Packt &#8211; quite an achievement for us.  But Packt is celebrating an achievement of their own &#8211; they are just about to publish their 1,000th title!</p>
<p>To celebrate, Packt are inviting anyone already registered to <a href="http://www.packtpub.com">www.packtpub.com</a>, or who registers before <strong>30th September 2012</strong>, to download any one of their eBooks for free. Packt is also opening its online library for a week for free to members, offering customers an easy to way to research their choice of free eBook.</p>
<p>Further details of the event can be found in the <a href="http://www.packtpub.com/news/packt-publishing-reaches-1000-it-titles-and-celebrates-open-invitation">Press Release. </a></p>
<p>If you think a free eBook sounds like a good idea, head over to this link: <a href="http://www.packtpub.com/login">http://www.packtpub.com/login</a>.</p>
<span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='560' height='315' src='http://www.youtube.com/embed/9zapDI_3R3U?version=3&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' frameborder='0'></iframe></span>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2609/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2609/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2609&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/09/28/packt-celebrating-1000th-title/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>New Book: Oracle BPM Suite 11g: Advanced BPMN Topics</title>
		<link>http://redstack.wordpress.com/2012/09/19/new-book-oracle-bpm-suite-11g-advanced-bpmn-topics/</link>
		<comments>http://redstack.wordpress.com/2012/09/19/new-book-oracle-bpm-suite-11g-advanced-bpmn-topics/#comments</comments>
		<pubDate>Wed, 19 Sep 2012 09:39:30 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[Book]]></category>
		<category><![CDATA[boundary event]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[BPMN]]></category>
		<category><![CDATA[cardinality]]></category>
		<category><![CDATA[Collection]]></category>
		<category><![CDATA[conversation]]></category>
		<category><![CDATA[correlation]]></category>
		<category><![CDATA[event sub-process]]></category>
		<category><![CDATA[exception]]></category>
		<category><![CDATA[message]]></category>
		<category><![CDATA[Packt]]></category>
		<category><![CDATA[parallel]]></category>
		<category><![CDATA[scope]]></category>
		<category><![CDATA[sequentail]]></category>
		<category><![CDATA[signal]]></category>
		<category><![CDATA[sub-process]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2603</guid>
		<description><![CDATA[In all the fanfare of the iPhone 5 launch this week, you may have missed a much lower key announcement of another new product which is also now available to pre-order. Two of your humble RedStack bloggers are proud to &#8230; <a href="http://redstack.wordpress.com/2012/09/19/new-book-oracle-bpm-suite-11g-advanced-bpmn-topics/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2603&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.packtpub.com/oracle-advanced-business-process-management-suite-11g/book"><img class="wp-image-2602 alignright" title="book1" src="http://redstack.files.wordpress.com/2012/09/book1.png?w=269&#038;h=344" alt="" width="269" height="344" /></a>In all the fanfare of the iPhone 5 launch this week, you may have missed a much lower key announcement of another new product which is also <a href="http://www.packtpub.com/oracle-advanced-business-process-management-suite-11g/book">now available to pre-order</a>.</p>
<p>Two of your humble RedStack bloggers are proud to announce our very first book &#8211; <a href="http://www.packtpub.com/oracle-advanced-business-process-management-suite-11g/book"><strong>Oracle BPM Suite 11g: Advanced BPMN Topics</strong> </a>with Packt Publishing.</p>
<p>This is a concise presentation of both theory and practical examples of the areas of BPMN where we have encountered the most widespread confusion and misunderstanding.  So we hope this book will help in some small way.</p>
<p>Here is a quick overview of the book:</p>
<p><em>Chapter 1, Inter-process Communication</em> introduces us to the theory of how processes<br />
can communicate with each other and with other components. A number of topics<br />
are covered such as: conversations—what they are, the default and advanced<br />
conversations. We discuss correlation—automatic and message based, correlation<br />
sets and keys, and correlation inside loops and when there are multiple calls. Throw<br />
and catch events, send and receive tasks, and when to use each are examined. We<br />
compare messages, signals, and errors. Sub-processes are explored—embedded,<br />
multi-instance, and reusable, and when to use each.</p>
<p><em>Chapter 2, Inter-process Communication in Practice</em> presents a series of practical<br />
exercises to help you to explore the theory present in <em>Chapter 1, Inter-process</em><br />
<em>Communication</em>. The examples include communicating between processes using<br />
messages and correlation, using correlation inside loops, communication between<br />
processes using signals, and reusable sub-processes.</p>
<p><em>Chapter 3, Working with Arrays</em> presents both theory and several practical exercises on<br />
handling arrays in BPM. Topics include data association, creating an empty array,<br />
creating an array with empty elements, creating an initialized array, getting an element<br />
from an array, setting an element in an array, appending elements to an array, joining<br />
arrays, removing elements from an array, and iterating over arrays—cardinality and<br />
collections, sequential and parallel, completion conditions, and scope.</p>
<p><em>Chapter 4, Handling Exceptions</em> discusses the theory behind handling exceptions in<br />
BPM. Topics include business and system exceptions, boundary events, event subprocesses, exception propagation with embedded sub-processes, call, throw and<br />
send, and how BPM exceptions affect the SCA composite.</p>
<p><em>Chapter 5, Handling Exceptions in Practice</em> will guide us through a number of<br />
practical examples that help to reinforce the theory in <em>Chapter 4, Handling Exceptions.</em><br />
The examples include implementing a timeout use case with boundary events,<br />
implementing a &#8220;cancel message&#8221; use case, using event sub-processes, and exploring<br />
exception propagation in peer processes.</p>
<p>We hope you enjoy it!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2603/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2603/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2603&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/09/19/new-book-oracle-bpm-suite-11g-advanced-bpmn-topics/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/09/book1.png" medium="image">
			<media:title type="html">book1</media:title>
		</media:content>
	</item>
		<item>
		<title>The curious case of SOA Human Tasks&#8217; auto-completion</title>
		<link>http://redstack.wordpress.com/2012/09/13/the-curious-case-of-soa-human-tasks-auto-completion/</link>
		<comments>http://redstack.wordpress.com/2012/09/13/the-curious-case-of-soa-human-tasks-auto-completion/#comments</comments>
		<pubDate>Wed, 12 Sep 2012 18:28:35 +0000</pubDate>
		<dc:creator>Kavitha Srinivasan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2599</guid>
		<description><![CDATA[Hello, I have elaborated on the above subject here. Hope this helps. Kavitha  <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2599&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Hello,</p>
<p>I have elaborated on the above subject <a title="here" href="https://blogs.oracle.com/ateamsoab2b/entry/the_curious_case_of_soa" target="_blank">here</a>.</p>
<p>Hope this helps.</p>
<p>Kavitha</p>
<p> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2599/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2599/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2599&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/09/13/the-curious-case-of-soa-human-tasks-auto-completion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0f7100ed4cb8ebf2cb582bc9a8d96f88?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">kasriniv</media:title>
		</media:content>
	</item>
		<item>
		<title>ADF is getting mobile&#8230;</title>
		<link>http://redstack.wordpress.com/2012/08/14/adf-is-getting-mobile/</link>
		<comments>http://redstack.wordpress.com/2012/08/14/adf-is-getting-mobile/#comments</comments>
		<pubDate>Tue, 14 Aug 2012 01:49:40 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ADF]]></category>
		<category><![CDATA[ADF Mobile]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2561</guid>
		<description><![CDATA[There&#8217;s a new ADF Mobile on the way &#8211; one that will allow you to build native iOS and Android applications using ADF &#8211; not just browser based application. You can get a preview from these slides and video on &#8230; <a href="http://redstack.wordpress.com/2012/08/14/adf-is-getting-mobile/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2561&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>There&#8217;s a new ADF Mobile on the way &#8211; one that will allow you to build <strong><span style="color:#ff0000;">native</span> iOS</strong> and <strong>Android</strong> applications using ADF &#8211; not just browser based application.</p>
<p>You can get a preview from these <a href="http://download.oracle.com/otndocs/otnvdd-fusiondev-june-2012/ADF_Mobile.pdf">slides</a> and <a href="http://download.oracle.com/otndocs/otnvdd-fusiondev-june-2012/ADF_Mobile/ADF_Mobile.html">video</a> on OTN.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2561/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2561/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2561&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/08/14/adf-is-getting-mobile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>Exploring MDS Explorer</title>
		<link>http://redstack.wordpress.com/2012/08/10/exploring-mds-explorer/</link>
		<comments>http://redstack.wordpress.com/2012/08/10/exploring-mds-explorer/#comments</comments>
		<pubDate>Fri, 10 Aug 2012 10:34:10 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[MDS]]></category>

		<guid isPermaLink="false">https://redstack.wordpress.com/?p=2558</guid>
		<description><![CDATA[Recently, I posted about my colleague Olivier’s MDS Explorer tool, which is a great way to get a look inside your MDS repository.  I have been playing around with it a little bit, nothing much really, just some cosmetic stuff, &#8230; <a href="http://redstack.wordpress.com/2012/08/10/exploring-mds-explorer/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2558&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Recently, I posted about my colleague Olivier’s <a href="https://redstack.wordpress.com/2012/07/18/mds-explorer-or-what-is-in-my-mds/">MDS Explorer</a> tool, which is a great way to get a look inside your MDS repository.  I have been playing around with it a little bit, nothing much really, just some cosmetic stuff, but you might like to take a look at it.</p>
<p>I made it format the documents nicely with proper indentation, and with line numbers and a nicer editor.  It also will warn you if you are about to open a large document so that you know it has not crashed, but that you just have to be patient.  And I added some icons and stuff.  There is even a nice Dora the Explorer picture hiding in there for those who care to look for it <img class="wlEmoticon wlEmoticon-smile" style="border-style:none;" src="http://redstack.files.wordpress.com/2012/08/wlemoticon-smile.png?w=640" alt="Smile" /></p>
<p>Here is an example of looking at a composite (Arrays).  You can see all the files in the composite on the left hand side, and I have a BPMN process open in the editor pane on the right.  This is connected to a database MDS under BPM 11.1.1.6.  It also allows you to connect to a file-based MDS.</p>
<p><a href="http://redstack.files.wordpress.com/2012/08/image1.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border:0;" title="image" src="http://redstack.files.wordpress.com/2012/08/image_thumb1.png?w=651&#038;h=418" alt="image" width="651" height="418" border="0" /></a></p>
<p>Note that you can go ahead and edit the files directly in here and save the changes to MDS – if you are game!</p>
<p>If you want to play with this, you can grab it from <a href="https://svn.java.net/svn/mds-explorer~source-code-repository/branches/mark/MDSExplorer">my branch</a> in Olivier’s Subversion repository on java.net &#8211; it has IDE files for NetBeans 7.2 in that branch.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2558/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2558/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2558&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/08/10/exploring-mds-explorer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/08/wlemoticon-smile.png" medium="image">
			<media:title type="html">Smile</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/08/image_thumb1.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>Automating creation of JMS Queues and JmsAdapter plan updates and redeployment</title>
		<link>http://redstack.wordpress.com/2012/08/10/automating-creation-of-jms-queues-and-jmsadapter-plan-updates-and-redeployment/</link>
		<comments>http://redstack.wordpress.com/2012/08/10/automating-creation-of-jms-queues-and-jmsadapter-plan-updates-and-redeployment/#comments</comments>
		<pubDate>Fri, 10 Aug 2012 10:06:58 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[11g]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[WLST]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2544</guid>
		<description><![CDATA[Following on from my recent post on automation of creation of JDBC resources, I am happy to report I now have a script which can be used for JMS Queues! Again, this is not as wonderful as I would like &#8230; <a href="http://redstack.wordpress.com/2012/08/10/automating-creation-of-jms-queues-and-jmsadapter-plan-updates-and-redeployment/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2544&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Following on from my recent post on <a title="Automating creation of JDBC Data Sources and DbAdapter plan updates and redeployment" href="http://redstack.wordpress.com/2012/08/09/automating-creation-of-jdbc-data-sources-and-dbadapter-plan-updates-and-redeployment/">automation of creation of JDBC resources</a>, I am happy to report I now have a script which can be used for JMS Queues!</p>
<p>Again, this is not as wonderful as I would like it to be, but here it is, in case it may help someone.  It is also in <a href="https://svn.java.net/svn/ci4fmw~ci4fmw/trunk/resourceScripts/createQueue.py">Subversion</a> on java.net (may be newer).</p>
<pre class="brush: python; title: ; notranslate">
# Copyright 2012 Oracle Corporation.
# All Rights Reserved.
#
# Provided on an 'as is' basis, without warranties or conditions of any kind,
# either express or implied, including, without limitation, any warranties or
# conditions of title, non-infringement, merchantability, or fitness for a
# particular purpose. You are solely responsible for determining the
# appropriateness of using and assume any risks. You may not redistribute.
#
# Please refer to http://redstack.wordpress.com/continous-integration for details.
#
# This WLST script can be used as part of a continuous integration build process
# before deploying a SCA composite, to create any necessary JMS Queues
# on the WebLogic Server.
#
# In addition to creating the queue, this script will also update the
# resource adapter and redeploy it.
#
# Parts of this script were adapted from Richard van den Berg's post at
# https://forums.oracle.com/forums/message.jspa?messageID=10131949#10131949

import time

#
# These are the parameters that you need to edit before running this script
#

# admin server url
url                  = 't3://localhost:7001'
# username to connect to the admin server
username             = 'weblogic'
# password to connect to the admin server
password             = 'welcome1'
# the name for the EIS - as defined in the JMS Adapter wizard in JDEV
eisName              = 'eis/wls/redstackQueue'
# the admin or managed server to target where the JmsAdapter is deployed
serverName           = 'soa_server1'
nmServerName         = 'soa_server1'
# the name for the queue
qName               = 'redstackQueue'
# the JNDI name for the queue
jndiName             = 'jms/redstackQueue'
# the JMS Module for the queue
jmsModule            = 'SOAJMSModule'
# the Subdeployment for the queue
jmsSubDeployment     = 'SOASubDeployment'
# the host where node manager is running
nmHost               = 'localhost'
# the port to connect to node manager (5556 is default for plain mode)
nmPort               = '5556'
# the user to connect to node manager
nmUser               = 'weblogic'
# the password to connection to node manager
nmPassword           = 'welcome1'
# the name of the weblogic domain
domain               = 'base_domain'

# don't change these ones
uniqueString         = ''
appName              = 'JmsAdapter'
moduleOverrideName   = appName+'.rar'
moduleDescriptorName = 'META-INF/weblogic-ra.xml'

#
# method definitions
#

def makeDeploymentPlanVariable(wlstPlan, name, value, xpath, origin='planbased'):
  &quot;&quot;&quot;Create a varaible in the Plan.
  This method is used to create the variables that are needed in the Plan in order
  to add an entry for the outbound connection pool for the new data source.
  &quot;&quot;&quot;

  try:
    variableAssignment = wlstPlan.createVariableAssignment(name, moduleOverrideName, moduleDescriptorName)
    variableAssignment.setXpath(xpath)
    variableAssignment.setOrigin(origin)
    wlstPlan.createVariable(name, value)

  except:
    print('--&gt; was not able to create deployment plan variables successfully')

def main():

  print ' Copyright 2012 Oracle Corporation. '
  print ' All Rights Reserved. '
  print ''
  print ' Provided on an ''as is'' basis, without warranties or conditions of any kind, '
  print ' either express or implied, including, without limitation, any warranties or '
  print ' conditions of title, non-infringement, merchantability, or fitness for a '
  print ' particular purpose. You are solely responsible for determining the '
  print ' appropriateness of using and assume any risks. You may not redistribute.'
  print ''
  print ' Please refer to http://redstack.wordpress.com/continous-integration for details.'
  print ''
  print ' This WLST script can be used as part of a continuous integration build process'
  print ' before deploying a SCA composite, to create any necessary JMS queues'
  print ' on the WebLogic Server.'
  print ''
  print ' In addition to creating the queue, this script will also update the '
  print ' resource adapter and redeploy it.'
  print ''
  print ' !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!!'
  print ''
  print ' This script will make changes to your WebLogic domain.  Make sure you know '
  print ' what you are doing.  There is no support for this script.  If something bad '
  print ' happens, you are on your own!  You have been warned.'

  #
  # generate a unique string to use in the names
  #

  uniqueString = str(int(time.time()))

  #
  # Create a JDBC Data Source.
  #

  try:
    print('--&gt; about to connect to weblogic')
    connect(username, password, url)
    print('--&gt; about to create a queue ' + qName)
    edit()
    startEdit()
    cd('/JMSSystemResources/' + jmsModule + '/JMSResource/' + jmsModule)
    cmo.createQueue(qName)
    cd('/JMSSystemResources/' + jmsModule + '/JMSResource/' + jmsModule + '/Queues/' + qName)
    set('JNDIName', jndiName)
    set('SubDeploymentName', jmsSubDeployment)
    save()
    print('--&gt; activating changes')
    activate()
    print('--&gt; done')

#
# update the deployment plan
#
    print('--&gt; about to update the deployment plan for the DbAdapter')
    startEdit()
    planPath = get('/AppDeployments/JmsAdapter/PlanPath')
    appPath = get('/AppDeployments/JmsAdapter/SourcePath')
    print('--&gt; Using plan ' + planPath)
    plan = loadApplication(appPath, planPath)
    print('--&gt; adding variables to plan')

    makeDeploymentPlanVariable(plan, 'ConnectionInstance_eis/wls/' + qName + '_JNDIName_' + uniqueString, eisName, '/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface=&quot;oracle.tip.adapter.jms.IJmsConnectionFactory&quot;]/connection-instance/[jndi-name=&quot;' + eisName + '&quot;]/jndi-name')
    makeDeploymentPlanVariable(plan, 'ConfigProperty_ConnectionFactoryLocation' + uniqueString, eisName, '/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface=&quot;oracle.tip.adapter.jms.IJmsConnectionFactory&quot;]/connection-instance/[jndi-name=&quot;' + eisName + '&quot;]/connection-properties/properties/property/[name=&quot;ConnectionFactoryLocation&quot;]/value')
    print('--&gt; saving plan')
    plan.save();
    save();
    print('--&gt; activating changes')
    activate(block='true');
    cd('/AppDeployments/JmsAdapter/Targets');
    print('--&gt; redeploying the JmsAdapter')
    print(appName, planPath)
    redeploy(appName, planPath, targets=cmo.getTargets());
    print('--&gt; done')

  except:
    print('--&gt; something went wrong, bailing out')
    stopEdit('y')
    raise SystemExit

  #
  # disconnect from the admin server
  #

  print('--&gt; disconnecting from admin server now')
  disconnect()

  #
  # Restart the managed server using the node manager.
  #

  try:
    print('--&gt; about to restart server ' + nmServerName)
    nmConnect(nmUser, nmPassword, nmHost, nmPort, domain)
    print('--&gt; stopping server...')
    nmKill(nmServerName)
    print('--&gt; starting server')
    nmStart(nmServerName)
    print('--&gt; done')
    nmDisconnect()

  except:
    print('--&gt; was not able to restart server successfully')

#
#  this is the main entry point
#

main()
</pre>
<p>Enjoy!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2544/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2544/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2544&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/08/10/automating-creation-of-jms-queues-and-jmsadapter-plan-updates-and-redeployment/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>Automating creation of JDBC Data Sources and DbAdapter plan updates and redeployment</title>
		<link>http://redstack.wordpress.com/2012/08/09/automating-creation-of-jdbc-data-sources-and-dbadapter-plan-updates-and-redeployment/</link>
		<comments>http://redstack.wordpress.com/2012/08/09/automating-creation-of-jdbc-data-sources-and-dbadapter-plan-updates-and-redeployment/#comments</comments>
		<pubDate>Thu, 09 Aug 2012 06:03:54 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[11g]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[WLST]]></category>

		<guid isPermaLink="false">https://redstack.wordpress.com/?p=2534</guid>
		<description><![CDATA[That’s a long title… anyway, as part of the desire to have a fully automated continuous integration environment for SOA and BPM, there is another bridge that we need to cross. SOA/BPM Composites can contain dependencies on resources in the &#8230; <a href="http://redstack.wordpress.com/2012/08/09/automating-creation-of-jdbc-data-sources-and-dbadapter-plan-updates-and-redeployment/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2534&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>That’s a long title… anyway, as part of the desire to have a fully automated continuous integration environment for SOA and BPM, there is another bridge that we need to cross.</p>
<p>SOA/BPM Composites can contain dependencies on resources in the runtime environment, like JDBC Data Sources and JMS Queues for example.  This poses a challenge for us, as we need to ensure that these resources exist, are properly configured, and are available before we attempt to run our SCA Tests in our composite.</p>
<p>So this means we need a way to automate the creation of these resources, so that we can do this as part of our build process.</p>
<p>This post presents a first step in that direction – a WLST script that can automate the process for JDBC.  I say ‘first step’ for a couple of reasons:</p>
<ul>
<li>It only handles JDBC, nothing else yet,</li>
<li>It is a bit delicate – I am not really happy with the error handling (which is almost non-existent, but you have to excuse me on that point, this is my very first Python program ever), and</li>
<li>I have not made it handle parameters yet, or integrated it into Maven, although this should just be ‘a small matter of programming’ as the saying goes.</li>
</ul>
<p>It also implements a restart of the managed server, and I am not 100% sure we actually need to do that.</p>
<p>Anyway, here it is in all its glory &#8211; also available from <a href="https://svn.java.net/svn/ci4fmw~ci4fmw/trunk/resourceScripts/createDS.py">Subversion</a> on java.net (may be newer):</p>
<pre class="brush: python; title: ; notranslate">
# Copyright 2012 Oracle Corporation.
# All Rights Reserved.
#
# Provided on an 'as is' basis, without warranties or conditions of any kind,
# either express or implied, including, without limitation, any warranties or
# conditions of title, non-infringement, merchantability, or fitness for a
# particular purpose. You are solely responsible for determining the
# appropriateness of using and assume any risks. You may not redistribute.
#
# Please refer to http://redstack.wordpress.com/continous-integration for details.
#
# This WLST script can be used as part of a continuous integration build process
# before deploying a SCA composite, to create any necessary Java EE data sources
# on the WebLogic Server.
#
# In addition to creating the data source, this script will also update the
# resource adapter and redeploy it.
#
# Parts of this script were adapted from Richard van den Berg's post at
# https://forums.oracle.com/forums/message.jspa?messageID=10131949#10131949

import time

#
# These are the parameters that you need to edit before running this script
#

# admin server url
url                  = 't3://localhost:7001'
# username to connect to the admin server
username             = 'weblogic'
# password to connect to the admin server
password             = 'welcome1'
# the name for the EIS - as defined in the DB Adapter wizard in JDEV
eisName              = 'eis/db/myDS'
# the admin or managed server to target where the DbAdapter is deployed
serverName           = 'soa_server1'
nmServerName         = 'soa_server1'
# the name for the data source
dsName               = 'myDS'
# the JNDI name for the data source
jndiName             = 'jbdc/myDS'
# the database url for the data source
dbUrl                = 'jdbc:oracle:thin:@localhost:1521:orcl'
# the database user
dbUser               = 'mark'
# the database password
dbPassword           = 'welcome1'
# the database driver to use
dbDriver             = 'oracle.jdbc.xa.client.OracleXADataSource'
# the host where node manager is running
nmHost               = 'localhost'
# the port to connect to node manager (5556 is default for plain mode)
nmPort               = '5556'
# the user to connect to node manager
nmUser               = 'weblogic'
# the password to connection to node manager
nmPassword           = 'welcome1'
# the name of the weblogic domain
domain               = 'base_domain'

# don't change these ones
uniqueString         = ''
appName              = 'DbAdapter'
moduleOverrideName   = appName+'.rar'
moduleDescriptorName = 'META-INF/weblogic-ra.xml'

#
# method definitions
#

def makeDeploymentPlanVariable(wlstPlan, name, value, xpath, origin='planbased'):
  &quot;&quot;&quot;Create a varaible in the Plan.
  This method is used to create the variables that are needed in the Plan in order
  to add an entry for the outbound connection pool for the new data source.
  &quot;&quot;&quot;

  try:
    variableAssignment = wlstPlan.createVariableAssignment(name, moduleOverrideName, moduleDescriptorName)
    variableAssignment.setXpath(xpath)
    variableAssignment.setOrigin(origin)
    wlstPlan.createVariable(name, value)

  except:
    print('--&gt; was not able to create deployment plan variables successfully')

def main():

  print ' Copyright 2012 Oracle Corporation. '
  print ' All Rights Reserved. '
  print ''
  print ' Provided on an ''as is'' basis, without warranties or conditions of any kind, '
  print ' either express or implied, including, without limitation, any warranties or '
  print ' conditions of title, non-infringement, merchantability, or fitness for a '
  print ' particular purpose. You are solely responsible for determining the '
  print ' appropriateness of using and assume any risks. You may not redistribute.'
  print ''
  print ' Please refer to http://redstack.wordpress.com/continous-integration for details.'
  print ''
  print ' This WLST script can be used as part of a continuous integration build process'
  print ' before deploying a SCA composite, to create any necessary Java EE data sources'
  print ' on the WebLogic Server.'
  print ''
  print ' In addition to creating the data source, this script will also update the '
  print ' resource adapter and redeploy it.'
  print ''
  print ' !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!!'
  print ''
  print ' This script will make changes to your WebLogic domain.  Make sure you know '
  print ' what you are doing.  There is no support for this script.  If something bad '
  print ' happens, you are on your own!  You have been warned.'

  #
  # generate a unique string to use in the names
  #

  uniqueString = str(int(time.time()))

  #
  # Create a JDBC Data Source.
  #

  try:
    print('--&gt; about to connect to weblogic')
    connect(username, password, url)
    print('--&gt; about to create a data source ' + dsName)
    edit()
    startEdit()
    cmo.createJDBCSystemResource(dsName)
    cd('/JDBCSystemResources/' + dsName + '/JDBCResource/' + dsName)
    cmo.setName(dsName)
    cd('/JDBCSystemResources/' + dsName + '/JDBCResource/' + dsName + '/JDBCDataSourceParams/' + dsName)
    set('JNDINames',jarray.array([String(jndiName)], String))
    cd('/JDBCSystemResources/' + dsName + '/JDBCResource/' + dsName + '/JDBCDriverParams/' + dsName)
    cmo.setUrl(dbUrl)
    cmo.setDriverName(dbDriver)
    cmo.setPassword(dbPassword)
    cd('/JDBCSystemResources/' + dsName + '/JDBCResource/' + dsName + '/JDBCConnectionPoolParams/' + dsName)
    cmo.setTestTableName('DUAL')
    cd('/JDBCSystemResources/' + dsName + '/JDBCResource/' + dsName + '/JDBCDriverParams/' + dsName + '/Properties/' + dsName)
    cmo.createProperty('user')
    cd('/JDBCSystemResources/' + dsName + '/JDBCResource/' + dsName + '/JDBCDriverParams/' + dsName + '/Properties/' + dsName + '/Properties/user')
    cmo.setValue(dbUser)
    cd('/JDBCSystemResources/' + dsName + '/JDBCResource/' + dsName + '/JDBCDataSourceParams/' + dsName)
    cmo.setGlobalTransactionsProtocol('TwoPhaseCommit')
    cd('/JDBCSystemResources/' + dsName)
    set('Targets',jarray.array([ObjectName('com.bea:Name=' + serverName + ',Type=Server')], ObjectName))
    save()
    print('--&gt; activating changes')
    activate()
    print('--&gt; done')

#
# update the deployment plan
#
    print('--&gt; about to update the deployment plan for the DbAdapter')
    startEdit()
    planPath = get('/AppDeployments/DbAdapter/PlanPath')
    appPath = get('/AppDeployments/DbAdapter/SourcePath')
    print('--&gt; Using plan ' + planPath)
    plan = loadApplication(appPath, planPath)
    print('--&gt; adding variables to plan')
    makeDeploymentPlanVariable(plan, 'ConnectionInstance_eis/DB/' + dsName + '_JNDIName_' + uniqueString, eisName, '/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface=&quot;javax.resource.cci.ConnectionFactory&quot;]/connection-instance/[jndi-name=&quot;' + eisName + '&quot;]/jndi-name')
    makeDeploymentPlanVariable(plan, 'ConfigProperty_xADataSourceName_Value_' + uniqueString, eisName, '/weblogic-connector/outbound-resource-adapter/connection-definition-group/[connection-factory-interface=&quot;javax.resource.cci.ConnectionFactory&quot;]/connection-instance/[jndi-name=&quot;' + eisName + '&quot;]/connection-properties/properties/property/[name=&quot;xADataSourceName&quot;]/value')
    print('--&gt; saving plan')
    plan.save();
    save();
    print('--&gt; activating changes')
    activate(block='true');
    cd('/AppDeployments/DbAdapter/Targets');
    print('--&gt; redeploying the DbAdapter')
    redeploy(appName, planPath, targets=cmo.getTargets());
    print('--&gt; done')

  except:
    print('--&gt; something went wrong, bailing out')
    stopEdit('y')
    raise SystemExit

  #
  # disconnect from the admin server
  #

  print('--&gt; disconnecting from admin server now')
  disconnect()

  #
  # Restart the managed server using the node manager.
  #

  try:
    print('--&gt; about to restart server ' + nmServerName)
    nmConnect(nmUser, nmPassword, nmHost, nmPort, domain)
    print('--&gt; stopping server...')
    nmKill(nmServerName)
    print('--&gt; starting server')
    nmStart(nmServerName)
    print('--&gt; done')
    nmDisconnect()

  except:
    print('--&gt; was not able to restart server successfully')

#
#  this is the main entry point
#

main()

</pre>
<p>To use this script, you need to go edit those parameters at the top of the program, save it somewhere, e.g. <strong>createDS.py</strong>, and then run it with WLST, for example:</p>
<pre>cd /your/fmwhome/wlserver_10.3/common/bin/
wlst.sh /path/to/createDS.py</pre>
<p>Please let me know if you have any success, or comments, I would love to hear them.</p>
<p>I must also acknowledge the following folks from whom I borrowed code and ideas: <a href="https://forums.oracle.com/forums/message.jspa?messageID=10131949#10131949">Richard van den Berg</a> and <a href="http://technology.amis.nl/2012/02/16/wlst-script-to-add-datasource-and-dbadapter-eis-connection-factory/">Michel Schildmeijer</a> and in turn those who they borrowed from, and so on.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2534/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2534/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2534&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/08/09/automating-creation-of-jdbc-data-sources-and-dbadapter-plan-updates-and-redeployment/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>Making Coherence play nice in your test environment</title>
		<link>http://redstack.wordpress.com/2012/08/09/making-coherence-play-nice-in-your-test-environment/</link>
		<comments>http://redstack.wordpress.com/2012/08/09/making-coherence-play-nice-in-your-test-environment/#comments</comments>
		<pubDate>Wed, 08 Aug 2012 23:45:37 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Coherence]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Tricks]]></category>

		<guid isPermaLink="false">https://redstack.wordpress.com/?p=2530</guid>
		<description><![CDATA[This issue has popped up a couple of times for me recently, so I thought I would do a quick post on it. When you are running a number of Fusion Middleware environments in the same IP subnet, as you &#8230; <a href="http://redstack.wordpress.com/2012/08/09/making-coherence-play-nice-in-your-test-environment/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2530&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>This issue has popped up a couple of times for me recently, so I thought I would do a quick post on it.</p>
<p>When you are running a number of Fusion Middleware environments in the same IP subnet, as you might be in a test environment for example, the default Coherence startup parameters can cause you some issues.</p>
<p>A quick and easy way to avoid these issues, is to change the Coherence <strong>clusterport</strong> setting, and add the Coherence <strong>ttl </strong>setting, as shown in the example below.  You can do this by updating the <strong>EXTRA_JAVA_PROPERTIES</strong> variable in the <strong>setDomainEnv.sh</strong> script inside your domain&#8217;s <strong>bin</strong> directory.</p>
<pre class="brush: plain; title: ; notranslate">
EXTRA_JAVA_PROPERTIES=&quot;${EXTRA_JAVA_PROPERTIES}
  -Dsoa.archives.dir=${SOA_ORACLE_HOME}/soa
  -Dsoa.oracle.home=${SOA_ORACLE_HOME}
  -Dsoa.instance.home=${DOMAIN_HOME}
  -Djava.net.preferIPv4Stack=true
  -Dweblogic.security.SSL.ignoreHostnameVerification=true
  -Dhttp.nonProxyHosts=localhost|10.240.37.80|slc01ats|*.oracle.com
  -Dtangosol.coherence.clusteraddress=227.7.7.9
  -Dtangosol.coherence.clusterport=9838
  -Dtangosol.coherence.ttl=0
  -Dtangosol.coherence.log=jdk
  -Djavax.xml.soap.MessageFactory=oracle.j2ee.ws.saaj.soap.MessageFactoryImpl
  -Dweblogic.transaction.blocking.commit=true
  -Dweblogic.transaction.blocking.rollback=true
  -Djavax.net.ssl.trustStore=${WL_HOME}/server/lib/DemoTrust.jks&quot;
export EXTRA_JAVA_PROPERTIES
</pre>
<p>Ideally, you want to set <strong>tangosol.coherence.clusterport</strong> to a different value for each separate cluster.  Set <strong>tangosol.coherence.ttl</strong> to <strong>0</strong> as shown above.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2530/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2530/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2530&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/08/09/making-coherence-play-nice-in-your-test-environment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>What happened to oracle-validated?</title>
		<link>http://redstack.wordpress.com/2012/08/07/what-happened-to-oracle-validated/</link>
		<comments>http://redstack.wordpress.com/2012/08/07/what-happened-to-oracle-validated/#comments</comments>
		<pubDate>Tue, 07 Aug 2012 09:56:29 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">https://redstack.wordpress.com/?p=2526</guid>
		<description><![CDATA[I am not a big fan of renaming things for the sake of renaming things, and to be fair, I am not sure that this is a case of that, but the much loved oracle-validated package that existed on Oracle &#8230; <a href="http://redstack.wordpress.com/2012/08/07/what-happened-to-oracle-validated/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2526&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I am not a big fan of renaming things for the sake of renaming things, and to be fair, I am not sure that this is a case of that, but the much loved <strong>oracle-validated</strong> package that existed on Oracle (Enterprise) Linux up to version 5 has now got a new name.&nbsp; </p>
<p>I don’t particularly like the new name, since it implies that this package is only useful for installing the Oracle Database 11gR2, and that is not really the case – this package is also very useful to install before you attempt to install many Fusion Middleware products on Linux, so I must say that I like the old name better.</p>
<p>But, you can’t stop progress! </p>
<p>Anyway, the new name is as follows:</p>
<p><code>oracle-rdbms-server-11gR2-preinstall</code></p>
<p>You should install this package (using yum) before you try to install any Fusion Middleware products on Oracle Linux – it will save you a lot of trouble.&nbsp; You can find more information about the package <a href="https://blogs.oracle.com/linux/entry/oracle_rdbms_server_11gr2_pre">here</a>.</p>
<p>Also, in case you were not aware, there is now a public yum repository for Oracle Linux – you can find config files and details <a href="http://public-yum.oracle.com">here</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2526/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2526/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2526&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/08/07/what-happened-to-oracle-validated/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>Getting Oracle artifacts into a Maven environment</title>
		<link>http://redstack.wordpress.com/2012/08/07/getting-oracle-artifacts-into-a-maven-environment/</link>
		<comments>http://redstack.wordpress.com/2012/08/07/getting-oracle-artifacts-into-a-maven-environment/#comments</comments>
		<pubDate>Mon, 06 Aug 2012 23:27:50 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Maven]]></category>

		<guid isPermaLink="false">https://redstack.wordpress.com/?p=2522</guid>
		<description><![CDATA[If you want to build an application to run on the Fusion Middleware platform, you may find that you want to use some Oracle provided JAR files in your build process.  These may be things like API’s (interfaces) that are &#8230; <a href="http://redstack.wordpress.com/2012/08/07/getting-oracle-artifacts-into-a-maven-environment/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2522&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>If you want to build an application to run on the Fusion Middleware platform, you may find that you want to use some Oracle provided JAR files in your build process.  These may be things like API’s (interfaces) that are needed to compile, or client libraries that need to be bundled into the deployable application, or perhaps tools that are needed during build time, e.g. WLST or appc.</p>
<p>If you are using Maven to manage your build, it would be ideal to be able to use Maven coordinates to reference these Oracle artifacts, just like you do for any other kind of dependency.  But Oracle does not provide POM files for these artifacts – so what can we do?</p>
<p>Maven provides the ability to load any artifact into a Maven repository and to give it a set of coordinates.  This means that you can easily add the Oracle provided artifacts to your own Maven repository, or to a shared repository in your environment (e.g. a <a href="https://redstack.wordpress.com/2012/08/07/maven-repository-managers/">Maven Repository Manager</a>) so that they can be used by yourself and other developers.</p>
<p>Maven will even generate the POM file for you, so all you need to do is create the coordinates.  Normally coordinates follow the same reverse URL scheme that Java packages uses, but it might be a good idea not to use com.oracle in this case – as it is possible that Oracle might one day release their own POMs, and then you could have some name clashes.  So it is probably better to use a different name, you might add ‘custom’ for example.</p>
<p>Suppose you want to add the wlthint3client.jar into your Maven environment, and give it the following coordinates:</p>
<ul>
<li>groupId: custom.com.oracle</li>
<li>artifactId: wlthint3client</li>
<li>versionId: 10.3.6</li>
</ul>
<p>You could use a command like this (which would be entered all on one line):</p>
<pre>mvn install:install-file 
    -Dfile=/fmwhome/wlserver_10.3/server/lib/wlthint3client.jar
    -DgeneratePom=true
    -DgroupId=custom.com.oracle
    -DartifactId=wlthint3client
    -DversionId=10.3.6
    -Dpackaging=jar</pre>
<p>This will install the JAR into your local Maven repository.  You can use a different goal to install into a remote repository (like a Maven Repository Manager for example).  In this command you either need to give the repository URL in the <strong>url</strong> property, or specify the <strong>repositoryId</strong> the matches the repository definition in your Maven <strong>settings.xml</strong>.</p>
<pre>mvn deploy:deploy-file
    -Dfile=/fmwhome/wlserver_10.3/server/lib/wlthint3client.jar
    -DgeneratePom=true
    -DrepositoryId=internal
    -DgroupId=custom.com.oracle
    -DartifactId=wlthint3client
    -DversionId=10.3.6
    -Dpackaging=jar</pre>
<p>After running these commands, you will have this artifact in your Maven repository and you will be able to use it like any other artifact.  For example, to include it in a project as a dependency, you can just refer to it using its coordinates:</p>
<pre>&lt;dependency&gt;
  &lt;groupId&gt;custom.com.oracle&lt;/groupId&gt;
  &lt;artifactId&gt;wlthint3client&lt;/artifactId&gt;
  &lt;version&gt;10.3.6&lt;/version&gt;
  &lt;packaging&gt;jar&lt;/packaging&gt;
&lt;/dependency&gt;</pre>
<p>Armed with this knowledge you could go and create POMs for any Oracle (or other) artifacts that you want to use in your build.  You could also create dependency hierarchies between them if you wanted or needed to.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2522/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2522/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2522&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/08/07/getting-oracle-artifacts-into-a-maven-environment/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>Maven Repository Managers</title>
		<link>http://redstack.wordpress.com/2012/08/07/maven-repository-managers/</link>
		<comments>http://redstack.wordpress.com/2012/08/07/maven-repository-managers/#comments</comments>
		<pubDate>Mon, 06 Aug 2012 23:02:00 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Maven]]></category>

		<guid isPermaLink="false">https://redstack.wordpress.com/?p=2518</guid>
		<description><![CDATA[In this post I just want to share a couple of thoughts on Maven Repository Managers – what they are, and why you would want to use one.  Let’s start out with a couple of definitions: A Maven Repository is &#8230; <a href="http://redstack.wordpress.com/2012/08/07/maven-repository-managers/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2518&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>In this post I just want to share a couple of thoughts on Maven Repository Managers – what they are, and why you would want to use one.  Let’s start out with a couple of definitions:</p>
<p>A <strong>Maven Repository</strong> is a collection of artifacts and metadata stored in a defined hierarchy.  It could be as simple as just a collection of files in a file system with a particular directory structure, or on a simple web server.  This might work well for a single developer’s local repository (in the case of the files), or for read only artifacts (in the case of the web server) but it is not so ideal for a group of developers who are both consuming and producing artifacts.</p>
<p>A <strong>Maven Repository Manager</strong> is a piece of software that allows you to host and manage a number of Maven Repositories.  Why would you want more than one?  Usually people like to keep their work in progress in a separate repository to their completed artifacts – perhaps they have different backup policies or access controls.  Also, you can use a Maven Repository Manager as a proxy for external Maven Repositories (like Maven Central for example).  This allows you to cache artifacts and share them among your developers – reducing the build times and reducing your download costs too.  It is also handy if you need to be able to build without a connection to the Internet.</p>
<p><a href="http://redstack.files.wordpress.com/2012/08/image.png"><img style="background-image:none;padding-left:0;padding-right:0;display:block;float:none;margin-left:auto;margin-right:auto;padding-top:0;border-width:0;" title="image" src="http://redstack.files.wordpress.com/2012/08/image_thumb.png?w=214&#038;h=282" alt="image" width="214" height="282" border="0" /></a></p>
<p>The diagram above shows the relationship between the various repositories.  Maven Central is the main repository.  It contains mostly free and open source artifacts.  It is basically read only to the normal Maven user.  There are also other Maven repositories on the Internet that hold both open source and commercial artifacts.</p>
<p>The box labeled ‘Internal Repository Manager’ represents a Maven Repository Manager deployed inside an organization.  Each developer will also have their own local repository.</p>
<p>There are a number of open source and commercial products available that can act as the Maven Repository Manager.  Here are a few of the common ones:</p>
<ul>
<li><a href="http://archiva.apache.org/">Apache Archiva</a>,</li>
<li><a href="http://www.jfrog.com/home/v_artifactory_opensource_overview/">Artifactory</a>from JFrog, and</li>
<li><a href="http://www.sonatype.org/nexus/">Nexus</a> from Sonatype.</li>
</ul>
<p>Typically you would set up a number of repositories, for example you might have repositories for:</p>
<ul>
<li>Mirrors/proxies/caches of external repositories like Maven Central, java.net, etc.,</li>
<li>Artifacts that are being developed by your organization, this is often called a ‘snapshot’ repository, and</li>
<li>Finished artifacts that were developed by your organization, this is often called an ‘internal’ repository.</li>
</ul>
<p>You may also want to create a repository that holds artifacts that developers can use as dependencies when working on projects.  If you want to keep tight control over the artifacts that can be used, for example to ensure your project does not use third party components with incompatible license terms, or to ensure everyone is using the same version of an important dependency, then forcing dependencies to come from your internal repository is a good approach to exercise this control.</p>
<p>When you are using continuous integration, you may end up with a lot of builds going on, and the built artifacts will typically be stored in your snapshot repository.  This can lead to a large amount of data in a fairly short time, even in a relatively modest development organization.  So snapshot maintenance is important.  Most of the Maven Repository Managers will allow you to configure how many snapshot versions of an artifact to keep, and will automatically purge old snapshots to conserve space.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2518/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2518/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2518&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/08/07/maven-repository-managers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/08/image_thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>MDS Explorer -or- What is in my MDS?</title>
		<link>http://redstack.wordpress.com/2012/07/18/mds-explorer-or-what-is-in-my-mds/</link>
		<comments>http://redstack.wordpress.com/2012/07/18/mds-explorer-or-what-is-in-my-mds/#comments</comments>
		<pubDate>Wed, 18 Jul 2012 00:49:12 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[11g]]></category>
		<category><![CDATA[MDS]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2513</guid>
		<description><![CDATA[My colleague Olivier LeDiouris has published a utility that allows you to connect to your MDS and see what is inside there, as well us uploading and downloading contents.  You might like to take a look at it over on &#8230; <a href="http://redstack.wordpress.com/2012/07/18/mds-explorer-or-what-is-in-my-mds/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2513&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>My colleague Olivier LeDiouris has published a utility that allows you to connect to your MDS and see what is inside there, as well us uploading and downloading contents.  You might like to take a look at it over on <a title="java.net" href="http://java.net/projects/mds-explorer/pages/Home">java.net</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2513/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2513/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2513&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/07/18/mds-explorer-or-what-is-in-my-mds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>BAM design pointers</title>
		<link>http://redstack.wordpress.com/2012/06/30/bam-design-pointers/</link>
		<comments>http://redstack.wordpress.com/2012/06/30/bam-design-pointers/#comments</comments>
		<pubDate>Fri, 29 Jun 2012 18:47:56 +0000</pubDate>
		<dc:creator>Kavitha Srinivasan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/2012/06/30/bam-design-pointers/</guid>
		<description><![CDATA[Hello, I have blogged about some BAM best practices here.. Hope that helps.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2512&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Hello,</p>
<p>I have blogged about some <a href="https://blogs.oracle.com/ateamsoab2b/entry/bam_design_pointers">BAM best practices here..</a></p>
<p>Hope that helps.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2512/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2512/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2512&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/06/30/bam-design-pointers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0f7100ed4cb8ebf2cb582bc9a8d96f88?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">kasriniv</media:title>
		</media:content>
	</item>
		<item>
		<title>BPMN process editor problems in 11.1.1.6</title>
		<link>http://redstack.wordpress.com/2012/06/27/bpmn-process-editor-problems-in-11-1-1-6/</link>
		<comments>http://redstack.wordpress.com/2012/06/27/bpmn-process-editor-problems-in-11-1-1-6/#comments</comments>
		<pubDate>Wed, 27 Jun 2012 03:14:56 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[JDeveloper]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2509</guid>
		<description><![CDATA[A small number of people have been seeing an error when using the BPMN process editor in JDeveloper 11.1.1.6 (PS5).  The symptom is a NullPointerException, as seen in the log, an example below, and a dialog box telling you an &#8230; <a href="http://redstack.wordpress.com/2012/06/27/bpmn-process-editor-problems-in-11-1-1-6/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2509&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>A small number of people have been seeing an error when using the BPMN process editor in JDeveloper 11.1.1.6 (PS5).  The symptom is a NullPointerException, as seen in the log, an example below, and a dialog box telling you an unexpected error has occurred (see image below).</p>
<p>If you hit this issue, you should log a service request with Oracle Support and ask for a patch for bug number 13088538.  You will need to provide details about your JDeveloper environment, versions of plugins, etc.</p>
<pre class="brush: plain; title: ; notranslate">

Performing action Save[ from oracle.bpm.fusion.studio.editor.ProcessEditor ]
 Invoking command: [ from oracle.bpm.fusion.studio.editor.ProcessEditor ]
 Performing action Rebuild BoundaryEvents.jpr[ from oracle.bpm.fusion.studio.editor.ProcessEditor ]
 Invoking command: modify adf-config for soa
 Invoking command: [ from oracle.bpm.fusion.studio.editor.ProcessEditor ]
 Invoking command:
 Invoking command:
 Invoking command:
 Invoking command:
 Uncaught exception
 java.lang.NullPointerException
   net.miginfocom.layout.Grid.addLinkIDs()
   net.miginfocom.layout.Grid.&lt;init&gt;()
   net.miginfocom.swing.MigLayout.checkCache()
   net.miginfocom.swing.MigLayout.getSizeImpl()
   net.miginfocom.swing.MigLayout.preferredLayoutSize()
   o.bpm.ui.layout.MigLayout.preferredLayoutSize(MigLayout.java:114)

</pre>
<p><a href="http://redstack.files.wordpress.com/2012/06/bpmerror.png"><img class="alignnone  wp-image-2510" title="bpmerror" src="http://redstack.files.wordpress.com/2012/06/bpmerror.png?w=548&#038;h=308" alt="" width="548" height="308" /></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2509/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2509/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2509&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/06/27/bpmn-process-editor-problems-in-11-1-1-6/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/06/bpmerror.png" medium="image">
			<media:title type="html">bpmerror</media:title>
		</media:content>
	</item>
		<item>
		<title>BPM &#8211; Disable DBMS job to refresh B2B Materialized View</title>
		<link>http://redstack.wordpress.com/2012/06/26/bpm-disable-dbms-job-to-refresh-b2b-materialized-view/</link>
		<comments>http://redstack.wordpress.com/2012/06/26/bpm-disable-dbms-job-to-refresh-b2b-materialized-view/#comments</comments>
		<pubDate>Mon, 25 Jun 2012 23:34:19 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[B2B]]></category>
		<category><![CDATA[BPM]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2507</guid>
		<description><![CDATA[If you are running BPM and you are not using B2B, you might want to disable the DBMS job that refreshes the B2B materialized view.  This job runs every minute by default. To find the job, use a query like &#8230; <a href="http://redstack.wordpress.com/2012/06/26/bpm-disable-dbms-job-to-refresh-b2b-materialized-view/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2507&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>If you are running BPM and you are not using B2B, you might want to disable the DBMS job that refreshes the B2B materialized view.  This job runs every minute by default.</p>
<p>To find the job, use a query like the one below.  Update the schema user to match the environment:</p>
<pre>select
  job
, schema_user
, broken
, what
, interval
from
  dba_jobs
where
  schema_user = “DEV_SOAINFRA”</pre>
<p>Look for the job which contains something like the following in the <strong>WHAT</strong> column.  Note that it may be different if a different schema prefix was used in the environment.</p>
<pre>dbms_refresh.refresh('"DEV_SOAINFRA"."B2B_SYSTEM_MV"');</pre>
<p>To remove the job, take note of the job number from the <strong>JOB</strong> column and then use a command like the following, substituting in the correct job number in place of <strong>24</strong>:</p>
<pre>begin
dbms_job.remove(24);
end;</pre>
<p>Alternatively, alter the materialized view to be refreshed on demand, using a command similar to this:</p>
<pre>alter materialized view dev_soainfra.b2b_system_mv refresh on demand;</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2507/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2507/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2507&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/06/26/bpm-disable-dbms-job-to-refresh-b2b-materialized-view/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>Starting a cluster</title>
		<link>http://redstack.wordpress.com/2012/06/21/starting-a-cluster/</link>
		<comments>http://redstack.wordpress.com/2012/06/21/starting-a-cluster/#comments</comments>
		<pubDate>Thu, 21 Jun 2012 06:21:52 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[Coherence]]></category>
		<category><![CDATA[Exalogic]]></category>
		<category><![CDATA[OSB]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2501</guid>
		<description><![CDATA[Recently, I have been involved in a number of discussions with people who are setting up clusters of various Fusion Middleware products, often on an Exalogic machine.  These discussions have led me to feel that it would be worth sharing &#8230; <a href="http://redstack.wordpress.com/2012/06/21/starting-a-cluster/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2501&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Recently, I have been involved in a number of discussions with people who are setting up clusters of various Fusion Middleware products, often on an Exalogic machine.  These discussions have led me to feel that it would be worth sharing some views on the ‘right’ way to design a cluster for different products.  These views are by no means meant to be canonical, but I wanted to share them anyway as an example and a conversation starter.</p>
<p>I want to consider three products that are commonly clustered, and which have somewhat different requirements – SOA (or BPM), OSB and Coherence.  Let’s take each one in turn.</p>
<h3>SOA and/or BPM</h3>
<p>SOA and BPM support a domain with either exactly one (managed) server or exactly one cluster.  You cannot have two (or more) SOA/BPM clusters in a single WebLogic domain.  The SOA/BPM cluster is largely defined by the database schema, in particular the SOAINFRA schema, that each server is pointing too.  All servers/nodes in a cluster must be pointing to the same SOAINFRA schema.  And a SOAINFRA schema can only be used by nodes in a single cluster.</p>
<p>As an aside, if you were to point nodes from two SOA ‘clusters’ to the same SOAINFRA schema for some reason, you would basically end up with just one cluster – although it would be an unsupported configuration and a lot of things would break.</p>
<p>SOA/BPM clusters are usually created for one of two reasons – to add extra capacity, or to improve availability.  It is important to understand that SOA and BPM do not support dual site active/active deployment, i.e. you cannot have two clusters, each with their own SOAINFRA across two data centres with any kind of database level replication.  Within a single site though, all of the nodes are active and all share work between them.</p>
<p>To have a cluster, you need to have a load balancer in front of the SOA servers.  This could be a hardware or software load balancer.  It needs to be capable of distributing work across all of the nodes in the cluster.  Ideally, it should also be able to collect heartbeats or response times and use that information to route new sessions to servers which seem to be least busy.</p>
<p>When a BPEL or BPMN process is executing in a cluster, any time there is a point of asynchronicity, e.g. an invoke, onAlarm, onMessage, wait, catch event, receive task, explicit call to checkpoint(), etc., the process instance will be dehydrated.  It is possible, and even likely, that the process will be rehydrated later on a different node in the cluster.  The design of SOA/BPM means that any node can pick up any process instance and continue from where it last dehydrated. This makes it easy to dynamically resize the cluster, by adding and removing nodes, which will automatically take their share of the work.  It also makes handling the failure of a node in a cluster particularly straightforward, as the load balancer will notice that node has failed and stop routing it work.</p>
<p>You also need to make sure that all of your callbacks are using the (virtual) IP address of the load balancer, not of any particular server in the cluster.  This means that all callbacks can be handled by any node in the cluster.</p>
<p>As your SOA/BPM workload grows, you basically want to scale up your cluster by adding more nodes.  Any decision to split the cluster would most likely be based on separation of different business workloads, perhaps for reasons of maintainability – different release cycles, timing of patches, etc., rather than any technical reason to split the cluster.</p>
<p>I think the most important factor here is to realize that when you run multiple SOA clusters, they will each be in a different WebLogic domain, they will each have their own SOAINFRA (and other) schemas, they will have different addresses, and they will be running different workload, i.e. different composites.</p>
<p>It is really important to understand that it is not possible to have a particular process instance run part way on one cluster, and then complete on a different cluster – as the two clusters would have two totally separate SOAINFRA databases, and things like callbacks, process instance ID’s, messages, etc., would all be different.</p>
<p>So I think from the point of view of starting a clustered deployment, the simplest approach is to just build a single SOA cluster.  This will greatly reduce the administrative overhead of dealing with multiple clusters.</p>
<h3>OSB</h3>
<p>Now let’s consider OSB.  It is a little different to SOA/BPM.  It does not use a database to store state, as it is designed to handle stateless, short lived operations, so we don’t need to worry about sharing database schemas.</p>
<p>It turns out what we do need to worry about is how many artifacts we are deploying in the OSB cluster.  When you start up OSB, it goes through a process of ‘compiling’ all of the artifacts – that is the WSDLs, XSDs and all that – essentially into objects in memory.  If there are a lot of artifacts, or if they are particular complicated – they have a lot of attributes for example – or if they contain nested references, this ‘compilation’ can start to take a long time.  And the resulting data in memory can start to take up a lot of the heap.</p>
<p>A good rule of thumb is to say you probably want no more than 500 or so artifacts in a single OSB cluster.  Otherwise, the startup times become so long that outages to restart are prohibitively long.  Imagine if you had to wait an hour to start up your OSB cluster for example – would that be too long?  The amount of memory in the heap required to store all of these also grows, so you would end up with a whole bunch of memory hungry servers that take forever to start – not ideal at all.</p>
<p>So the best approach, in my opinion, is to split up your OSB workload into several OSB clusters – with each one having a reasonable amount of artifacts on it.  You can work out what is reasonable for you by looking at the startup time and the memory needs.</p>
<p>Now the next logical question is how do they talk to each other?  What if a proxy services on cluster A needs to talk to a business service on cluster B?  I have heard various approaches including departmental and enterprise service buses (hierarchical), and deploying all business services on all clusters, but splitting up the proxy services, or vice versa, and so on.</p>
<p>I think the best approach here is to have all request to OSB route through a load balancer, and use a simple set of rules on the load balancer to route to the correct cluster based on the service URL.  If you create small enough groups of services under different URL paths, this also makes it easy for you to relocate services between OSB clusters if necessary for any reason, without any impact to any of your service consumers.  This also makes it easy for services to talk to each other regardless of which cluster they are deployed on.</p>
<p>A good way to split things across the clusters, in my opinion, is to put critical things on their own clusters first, then basically divide up everything else across other clusters.  Having critical things on their own clusters helps you to manage their availability, patching, performance, etc., individually and prevents the situation of being unable to update something because it is in an environment shared with a critical component that cannot tolerate the update.</p>
<h3>Coherence</h3>
<p>Now we come to Coherence, which is different again.  As a general rule of thumb, it is ideal to have Coherence nodes have no more than 4GB of heap.  The data in Coherence clusters tends to stay around, so they are tuned differently to SOA/BPM (for example) where most of the data is short lived and rarely tenured.</p>
<p>For Coherence, having more nodes in the cluster is usually a good thing.  The other question is whether to split up Coherence clusters.  Again, I think the (most) right answer here is to make that decision in terms of separating logic business functionality when it makes sense.  Unless of course you get a really big cluster, then you might start to have some technical reasons to look at splitting it up.  But I only know of a couple of organizations who have Coherence clusters anywhere near big enough for that to be a concern.</p>
<h3>A word about the Exalogic Enterprise Deployment Guide</h3>
<p>A lot of Exalogic customers refer to the example topology in the Enterprise Deployment Guide.  That example is well suited to a large Java EE application deployed across a cluster of WebLogic Servers and Coherence nodes.  I think the EDG makes it pretty clear that this example is not meant to be for all scenarios, and I think when we consider SOA/BPM, OSB and Coherence, there are some compelling reasons why we might choose to go with a slightly different approach.</p>
<p>For example, if we just blindly followed that same approach for SOA and OSB clusters, we would probably end up with resource contention issues &#8211; not enough memory available and not enough cores available to run the number of JVMs we might come up with.</p>
<h3>Recommended approach</h3>
<p>Let’s pretend we have six machines on which to build our environment.  This could equally be six compute nodes in an Exalogic, or just six normal machines, it does not really matter for our purposes here.  For arguments sake, let’s say each one has 12 cores and 96GB of memory.</p>
<p>I think now is a good time for a picture!</p>
<p><a href="http://redstack.files.wordpress.com/2012/06/cluster.png"><img class="alignnone size-full wp-image-2502" title="cluster" src="http://redstack.files.wordpress.com/2012/06/cluster.png?w=640&#038;h=531" alt="" width="640" height="531" /></a></p>
<p>Here are some important things to note about this approach:</p>
<ul>
<li>It does not make a lot of sense to have more JVMs than cores because they will just end up competing with each other for system resources.  So in the approach above we have no more than 9 JVMs on any compute node (1 SOA, 1 AdminServer, 2 OSB, 4 Coherence and 1 NodeManager (not shown but running on every compute node).  We could probably fit more, but as we will see later memory is also an important consideration.  Also, keep in mind that the operating system is going to use some of those cores as well, so you can’t really afford to allocate them all to JVMs.</li>
<li>Let’s say we allocate 16GB of heap to each SOA and OSB managed server and 4GB to each Coherence server.  That means that with just these JVMs, we are potentially consuming 64GB of memory on each compute node.  This is two thirds of the available memory, a good rule of thumb high water mark.  Remember that there is also going to be other processes using memory, including the operating system, and of course, unless you are running JRockit, the JVM is going to have a permanent generation too, which will take up more memory.  Maybe 16GB is too high – you don’t have to use up all the memory you have of course, but I guess this is really going to depend on the nature of the workload, and as I said at the beginning, I am not trying to make a one size fits all recommendation here.</li>
<li>The AdminServers for the various clusters are striped across the compute nodes.  The cluster can of course survive the loss of the AdminServer and it can be restarted by a NodeManager on another compute node.  But it just makes good sense to put them on different machines, so that in the event of the failure of one compute node, you would only lose one or zero of them, not all of them at once.</li>
<li>All of the URLs that consumers use point to the load balancer – whether those consumers are on these compute nodes or external.  The load balancer decides where traffic is routed.  If we found that our payments and core services could no longer fit in a single OSB cluster, we could move one to the other cluster, or to a new cluster altogether without any impact on consumers.  All we would need to do is update the routing rule in the load balancer.</li>
<li>All clusters are stretched across all compute nodes.  The idea here is to be able to get the best possible use of the available resources.  Of course this could be tuned to suit the actual workload and nodes may be added or removed.  Some managed servers may not be running, but the point is that each cluster (product) has the ability to run across all nodes.  So if any node were lost, it would not matter, all nodes are essentially equal.</li>
</ul>
<p>Let’s consider for a moment an alternative.  Suppose we rearranged the OSB clusters so that all of the managed servers in OSB Cluster A are on compute nodes CN01, CN02 and CN03, and all the managed server in OSB Cluster B are on the other three.  What would happen if we needed OSB Cluster A to have more capacity?  Or what would happen if we lost CN01, or, god forbid, CN01, CN02 and CN03 all at once?  OSB Cluster A would be under-resourced in the former case, or completely unavailable in the latter.  We could not easily just start up OSB Cluster A on the remaining nodes, or add another server on one of those nodes.  This would require some manual effort – reconfiguration at the least, and possibly redeployment as well.</p>
<p>I think a key measure of the quality of an architecture is its simplicity.  The simplest architectures are the best.  No need to make things any more complicated than they need to be.  Complex architectures just introduce more opportunity for error and more management cost and inflexibility.</p>
<p>Another good test is flexibility.  This approach does not impose any arbitrary limits on how you could deploy your applications.</p>
<p>Availability is another factor to consider, and I think the approach described provides the best possible availability across the whole system from the available hardware &#8211; and the best hardware utilization as well.</p>
<h3>What about patching?</h3>
<p>Patching is a very important consideration, that should not be backed away from when designing your architecture.  How do you patch a cluster like this?  Especially if you cannot afford a long outage.</p>
<p>My suggested approach here is to have two sets of binaries, the active and the standby binaries, for each cluster.  The clusters would be running on the active binaries.  When you need to apply a patch to your production environment, after you have completed testing of the patch in non-production environments, of course, you should apply the patch to the standby binaries, and therefore to those domains created from the standby binaries, the standby domains.</p>
<p>Now, both the active domain and the standby domain (in the case of SOA) should be pointing to the same SOAINFRA database.  You would never run them both at the same time of course.  When the patching is completed, shut down the active domain and start up the (newly patched) standby domain, which is pointing at the same SOAINFRA and therefore will start up as logically the same cluster.  Now it is the active cluster, and the other one is the standby.  If it goes bad, just swap back.  When you are ready, go patch the standby too, to keep them in sync.</p>
<p>[If there are any other 'old mainframe guys' reading this, you might note the similarity to the zones in SMP/E.]</p>
<p><span style="color:#ff0000;">Update:  It seems that this approach still has some challenges, when you think about the fact that many patches might require running a database schema update, or a script (like a WLST script for example) which may require you to start up the server(s).  So I think for now we really need to take full backups before applying patches so that we can roll back if needed.  Although even then we need to make sure that we don&#8217;t let any messages come through when we are testing the patched domain, otherwise, we might loose work if we need to roll back! </span></p>
<p>What about patches that change the database schema?  In this case you are going to have to schedule an outage to do the patching, so that you have the opportunity to backup the database before applying the patch.  Trying to do it by just swapping would deprive you of the ability to roll back the patch by just swapping domains again.</p>
<p>Another important consideration is that there may be some files that need to be shared/moved/copied between the active and standby domains.  It would be important to keep a tight grasp on all configuration changes to make sure that any changes made since the last swap are applied to the other domain when a swap occurs.  It might be a good idea to swap weekly, just to make sure there is a formalized process around this, and things don’t get lost.</p>
<h3>Summary</h3>
<p>Well, that’s it.  I would like to acknowledge that most of this was built up over the course of many conversations with many people.  I certainly do not claim that all of this is my own original ideas, but rather a summary of the position I now hold based on many conversations with a bunch of smart folks.  I would especially like to thank Robert Patrick for his ideas and many discussions on this topic.  Also a special mention to Jon Purdy for his input on Coherence</p>
<p>As I said in the beginning, this is just my views and I would certainly be very interested to hear your feedback and to continue the discussion.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2501/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2501/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2501&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/06/21/starting-a-cluster/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/06/cluster.png" medium="image">
			<media:title type="html">cluster</media:title>
		</media:content>
	</item>
		<item>
		<title>How to know that a method was run, when you didn&#8217;t write that method</title>
		<link>http://redstack.wordpress.com/2012/06/19/method-run/</link>
		<comments>http://redstack.wordpress.com/2012/06/19/method-run/#comments</comments>
		<pubDate>Tue, 19 Jun 2012 02:08:53 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ADF]]></category>
		<category><![CDATA[Diagnostics]]></category>
		<category><![CDATA[pointcut]]></category>
		<category><![CDATA[WebLogic]]></category>
		<category><![CDATA[WLDF]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2492</guid>
		<description><![CDATA[Recently, I was posed with a situation where I needed to ensure that a particular method was being run by an application, but that method was part of the framework (ADF in this case) not a method that I had &#8230; <a href="http://redstack.wordpress.com/2012/06/19/method-run/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2492&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Recently, I was posed with a situation where I needed to ensure that a particular method was being run by an application, but that method was part of the framework (ADF in this case) not a method that I had written myself.  Since Java does not let me go and open up a framework class and add more code to it (like Scala&#8217;s &#8216;pimp my library&#8217; pattern does), I could not really use the good old reliable System.out.println() approach to debugging &#8211; so what to do?</p>
<p>Asking around, I discovered something called a pointcut, a feature of aspect oriented programming.  This is a little out of my area of experience, but I like to think of it essentially as a mechanism that lets you define a piece of code to run when some particular thing happens.</p>
<p>So for example, I can say something like &#8216;whenever method X on object Y is executed, do Z&#8217; which is great &#8211; that lets me solve my exact problem.</p>
<p>So let&#8217;s look at a simple example.  Let&#8217;s say for the sake of an example that I want to ensure that a particular ADF view is causing the method <strong>addPartialTriggerListeners()</strong> <strong></strong>on object <strong>org.apache.myfaces.trinidadinternal.context.RequestContextImpl </strong>to be invoked.  This ought to be invoked when we have a partial page refresh on a view.</p>
<p>Let&#8217;s start by building a simple ADF application.</p>
<p>First, we will create a managed bean that we can use as a simple data source.  Here is the code:</p>
<pre class="brush: java; title: ; notranslate">
package test;

import java.util.ArrayList;
import java.util.List;

import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;

public class TestBean {

    private List&lt;SelectItem&gt; suggestions = new ArrayList&lt;SelectItem&gt;();
    private String theValue;

    public TestBean() {
        super();
        System.out.println(&quot;TestBean init&quot;);

        //initialise list of choices
        suggestions.add(new SelectItem(&quot;Sydney&quot;));
        suggestions.add(new SelectItem(&quot;Melbourne&quot;));
        suggestions.add(new SelectItem(&quot;Singapore&quot;));
        suggestions.add(new SelectItem(&quot;Tokyo&quot;));
        suggestions.add(new SelectItem(&quot;Beijing&quot;));
        suggestions.add(new SelectItem(&quot;San Francisco&quot;));
        suggestions.add(new SelectItem(&quot;New York&quot;));
        suggestions.add(new SelectItem(&quot;Houston&quot;));
        suggestions.add(new SelectItem(&quot;Seattle&quot;));
        suggestions.add(new SelectItem(&quot;London&quot;));
        suggestions.add(new SelectItem(&quot;Paris&quot;));
    }

    public List&lt;SelectItem&gt; getSuggestions() {
        return suggestions;
    }

    public void setSuggestions(List&lt;SelectItem&gt; suggestions) {}

    public String getTheValue() { return this.theValue; }

    public void setTheValue(String value) { this.theValue = value; }

    public void selectValueChangeListener(ValueChangeEvent valueChangeEvent) {
        theValue = (String) valueChangeEvent.getNewValue();
    }
}
</pre>
<p>Then we can create our view.  To make it easier, you can copy the source from here:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version='1.0' encoding='UTF-8'?&gt;
&lt;jsp:root xmlns:jsp=&quot;http://java.sun.com/JSP/Page&quot; version=&quot;2.1&quot;
          xmlns:f=&quot;http://java.sun.com/jsf/core&quot;
          xmlns:h=&quot;http://java.sun.com/jsf/html&quot;
          xmlns:af=&quot;http://xmlns.oracle.com/adf/faces/rich&quot;&gt;
  &lt;jsp:directive.page contentType=&quot;text/html;charset=UTF-8&quot;/&gt;
  &lt;f:view&gt;
    &lt;af:document id=&quot;d1&quot;&gt;
      &lt;af:form id=&quot;f1&quot;&gt;
        &lt;af:outputText value=&quot;This is a test page&quot; id=&quot;ot1&quot;&gt;
          &lt;span style='font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D'&gt;3-5705908791&lt;/span&gt;
        &lt;/af:outputText&gt;
        &lt;af:selectOneChoice label=&quot;Pick a city&quot; id=&quot;soc1&quot;
                            valueChangeListener=&quot;#{TestBean.selectValueChangeListener}&quot;
                            autoSubmit=&quot;true&quot;&gt;
          &lt;f:selectItems value=&quot;#{TestBean.suggestions}&quot; id=&quot;si1&quot;/&gt;
        &lt;/af:selectOneChoice&gt;
        &lt;af:outputText value=&quot;you choose #{TestBean.theValue}&quot; id=&quot;ot2&quot;
                       partialTriggers=&quot;soc1&quot;/&gt;
      &lt;/af:form&gt;
    &lt;/af:document&gt;
  &lt;/f:view&gt;
&lt;/jsp:root&gt;
</pre>
<p>Now open up the <strong>adf-config.xml</strong> and add the managed bean as shown below:</p>
<p><a href="http://redstack.files.wordpress.com/2012/06/wldf1.png"><img class="alignnone size-full wp-image-2493" title="wldf1" src="http://redstack.files.wordpress.com/2012/06/wldf1.png?w=640&#038;h=153" alt="" width="640" height="153" /></a></p>
<p>Now you can deploy the ADF application to your WebLogic Server and make sure it works.</p>
<p>Next, we want to enable the WebLogic Diagnostic Framework on the managed server.  This is a one off activity.  You do this in the WebLogic Console, under the <strong>Diagnostics</strong> &#8211; <strong>Diagnostic Modules</strong> menu.</p>
<p>There should be a module definition there that was created when you installed WebLogic, if there is not, just go ahead and create one.  You just need to give it a name and then target it to the appropriate managed server.  Then open it up and go to the <strong>Configuration</strong> &#8211; <strong>Instrumentation</strong> tab and click on the <strong>Enabled </strong> check box to turn it on.</p>
<p>Now we need to tell it what to monitor.  Go to the <strong>Deployments</strong> menu item and open up your ADF application that you just deployed.</p>
<p>Go to the <strong>Configuration</strong> &#8211; <strong>Instrumentation</strong> tab and again check the <strong>Enabled</strong> check box for this application.  Then go back in there again and click on the <strong>Add Custom Monitor</strong> button (down the bottom).</p>
<p>Give your monitor a name, e.g. <strong>listener</strong>, and enter the pointcut as shown below (all on one line):</p>
<pre>execution ( * 
org.apache.myfaces.trinidadinternal.context.RequestContextImpl 
addPartialTriggerListeners(...) )</pre>
<p>Now click on the <strong>Save</strong> button and then open up your new monitor again.  Go down to the <strong>Actions</strong> section and make sure that the <strong>TraceAction</strong> is moved across to the <strong>Ch</strong>osen list.  Also make sure that the <strong></strong>Enabled check box is selected.  Now <strong>Save</strong> your monitor.</p>
<p>When you are prompted, create a new Plan for the application.</p>
<p>Then go and update your application (select it in <strong>Deployments</strong> and click on the <strong>Update</strong> button).</p>
<p>If this is the very first time you have turned on WLDF, you may need to restart your managed server as well.</p>
<p>Now go run your application and choose something from the drop down list.</p>
<p>Now we can check to see if that method was run.   Go to the <strong>Diagnostics</strong> &#8211; <strong>Log Files</strong> menu and open the <strong>EventsDataArchive</strong><strong> </strong>log.  You should see the output from your monitor right there, confirming that the method in question was in fact run.  The image below shows an example.  It also shows output from a second custom monitor.  If you are feeling adventureous, you may want to try to create that monitor too.</p>
<p><a href="http://redstack.files.wordpress.com/2012/06/wldf2.png"><img class="alignnone size-full wp-image-2494" title="wldf2" src="http://redstack.files.wordpress.com/2012/06/wldf2.png?w=640&#038;h=149" alt="" width="640" height="149" /></a></p>
<p>Well I am sure that this is only just scratching the surface of what WebLogic Diagnostic Framework can do, but I for one am inspired to go and learn more.  I hope you enjoyed this post!</p>
<p>Thanks to Robert Patrick and Sabha Parameswaran for teaching me about pointcuts!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2492/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2492/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2492&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/06/19/method-run/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/06/wldf1.png" medium="image">
			<media:title type="html">wldf1</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/06/wldf2.png" medium="image">
			<media:title type="html">wldf2</media:title>
		</media:content>
	</item>
		<item>
		<title>Using Oracle Service Registry in an automated (Maven) SOA/BPM build</title>
		<link>http://redstack.wordpress.com/2012/05/22/using-oracle-service-registry-in-an-automated-maven-soabpm-build/</link>
		<comments>http://redstack.wordpress.com/2012/05/22/using-oracle-service-registry-in-an-automated-maven-soabpm-build/#comments</comments>
		<pubDate>Tue, 22 May 2012 03:33:53 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[11g]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[OSR]]></category>
		<category><![CDATA[Service Registry]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[UDDI]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2486</guid>
		<description><![CDATA[Today, I feel very privileged to share with you a post from one of my readers, Phani Khrisna, who was kind enough to allow me to post this updated Maven POM which allows you to use resources in the Oracle &#8230; <a href="http://redstack.wordpress.com/2012/05/22/using-oracle-service-registry-in-an-automated-maven-soabpm-build/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2486&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Today, I feel very privileged to share with you a post from one of my readers, <strong>Phani Khrisna</strong>, who was kind enough to allow me to post this updated Maven POM which allows you to use resources in the Oracle Service Registry during the build.</p>
<p>Phani has also tidied up a small omission from earlier POMs, which a number of you have commented on.  This POM copies the SAR file into the <strong>target</strong> directory so that it will be published into the Maven repository as part of the build, rather than an almost empty file with the POM in it.  While we may not be able to use it as a dependency in another composite using just the Maven coordinates (like we can with Java artifacts for example), it at least makes it available to other developers.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;windows-1252&quot; ?&gt;
&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot;&gt;
  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
  &lt;groupId&gt;org.phani..AgentDataService&lt;/groupId&gt;
  &lt;artifactId&gt;GetAgentData&lt;/artifactId&gt;
  &lt;packaging&gt;jar&lt;/packaging&gt;
  &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
  &lt;scm&gt;
    &lt;connection&gt;scm:svn://x.x.x.x/repo/AgentService/trunk/SOAComposite&lt;/connection&gt;
    &lt;developerConnection&gt;scm:svn://x.x.x.x/repo/AgentService/trunk/SOAComposite&lt;/developerConnection&gt;
  &lt;/scm&gt;
  &lt;build&gt;
    &lt;sourceDirectory&gt;src/&lt;/sourceDirectory&gt;
    &lt;plugins&gt;
      &lt;plugin&gt;
        &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
        &lt;artifactId&gt;build-helper-maven-plugin&lt;/artifactId&gt;
        &lt;version&gt;1.1&lt;/version&gt;
        &lt;executions&gt;
          &lt;execution&gt;
            &lt;id&gt;add-source&lt;/id&gt;
            &lt;phase&gt;generate-sources&lt;/phase&gt;
            &lt;goals&gt;
              &lt;goal&gt;add-source&lt;/goal&gt;
            &lt;/goals&gt;
            &lt;configuration&gt;
              &lt;sources&gt;
                &lt;source&gt;SCA-INF/src&lt;/source&gt;
              &lt;/sources&gt;
            &lt;/configuration&gt;
          &lt;/execution&gt;
        &lt;/executions&gt;
      &lt;/plugin&gt;
      &lt;plugin&gt;
        &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
        &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;
        &lt;version&gt;2.0.2&lt;/version&gt;
        &lt;configuration&gt;
          &lt;source&gt;1.6&lt;/source&gt;
          &lt;target&gt;1.6&lt;/target&gt;
        &lt;/configuration&gt;
      &lt;/plugin&gt;
      &lt;plugin&gt;
        &lt;artifactId&gt;maven-antrun-plugin&lt;/artifactId&gt;
        &lt;version&gt;1.6&lt;/version&gt;
        &lt;executions&gt;
          &lt;execution&gt;
            &lt;id&gt;sca-compile&lt;/id&gt;
            &lt;phase&gt;compile&lt;/phase&gt;
            &lt;configuration&gt;
              &lt;target&gt;
                &lt;property name=&quot;parent&quot; location=&quot;..&quot; /&gt;
                &lt;property name=&quot;scac.input&quot; value=&quot;composite.xml&quot; /&gt;
                &lt;property name=&quot;oracle.soa.uddi.registry.inquiryUrl&quot; value=&quot;http://gh123:7101/registry/uddi/inquiry&quot; /&gt;
                &lt;ant antfile=&quot;${scriptsdir}/ant-sca-compile.xml&quot;
                     dir = &quot;${scriptsdir}&quot;
                     target=&quot;scac&quot; /&gt;
              &lt;/target&gt;
            &lt;/configuration&gt;
            &lt;goals&gt;
              &lt;goal&gt;run&lt;/goal&gt;
            &lt;/goals&gt;
          &lt;/execution&gt;
          &lt;execution&gt;
            &lt;id&gt;sca-package&lt;/id&gt;
            &lt;phase&gt;package&lt;/phase&gt;
            &lt;configuration&gt;
              &lt;target&gt;
                &lt;property name=&quot;parent&quot; location=&quot;..&quot; /&gt;
                &lt;property name=&quot;oracle.soa.uddi.registry.inquiryUrl&quot; value=&quot;http://gh123:7101/registry/uddi/inquiry&quot; /&gt;
                &lt;property name=&quot;build.compiler&quot; value=&quot;extJavac&quot;/&gt;
                &lt;property name=&quot;compositeName&quot; value=&quot;${project.artifactId}&quot; /&gt;
                &lt;property name=&quot;compositeDir&quot; value=&quot;${basedir}&quot; /&gt;
                &lt;property name=&quot;revision&quot; value=&quot;${project.version}&quot; /&gt;
                &lt;ant antfile=&quot;${scriptsdir}/ant-sca-package.xml&quot;
                     dir = &quot;${scriptsdir}&quot;
                     target=&quot;package&quot; /&gt;
              &lt;/target&gt;
            &lt;/configuration&gt;
            &lt;goals&gt;
              &lt;goal&gt;run&lt;/goal&gt;
            &lt;/goals&gt;
          &lt;/execution&gt;
		  &lt;execution&gt;
            &lt;id&gt;sca-copy-jar&lt;/id&gt;
            &lt;phase&gt;package&lt;/phase&gt;
            &lt;configuration&gt;
              &lt;target&gt;
                 &lt;copy file=&quot;${basedir}/deploy/sca_${project.artifactId}_rev${project.version}.jar&quot; tofile=&quot;${basedir}/target/${project.artifactId}-${project.version}.jar&quot;/&gt;
              &lt;/target&gt;
            &lt;/configuration&gt;
            &lt;goals&gt;
              &lt;goal&gt;run&lt;/goal&gt;
            &lt;/goals&gt;
          &lt;/execution&gt;
          &lt;execution&gt;
            &lt;id&gt;sca-deploy&lt;/id&gt;
            &lt;phase&gt;deploy&lt;/phase&gt;
            &lt;configuration&gt;
              &lt;target&gt;
                &lt;property name=&quot;serverURL&quot; value=&quot;http://gh345:7011&quot; /&gt;
                &lt;property name=&quot;user&quot; value=&quot;weblogic&quot; /&gt;
                &lt;property name=&quot;password&quot; value=&quot;password1&quot; /&gt;
                &lt;property name=&quot;sarLocation&quot; value=&quot;${basedir}/deploy/sca_${project.artifactId}_rev${project.version}.jar&quot; /&gt;
                &lt;property name=&quot;overwrite&quot; value=&quot;true&quot; /&gt;
                &lt;property name=&quot;forceDefault&quot; value=&quot;true&quot; /&gt;
                &lt;property name=&quot;partition&quot; value=&quot;default&quot; /&gt;
                &lt;ant antfile=&quot;${scriptsdir}/ant-sca-deploy.xml&quot;
                     dir=&quot;${scriptsdir}&quot;
                     target=&quot;deploy&quot; /&gt;
              &lt;/target&gt;
            &lt;/configuration&gt;
            &lt;goals&gt;
              &lt;goal&gt;run&lt;/goal&gt;
            &lt;/goals&gt;
          &lt;/execution&gt;
          &lt;execution&gt;
            &lt;id&gt;sca-test&lt;/id&gt;
            &lt;phase&gt;deploy&lt;/phase&gt;
            &lt;configuration&gt;
              &lt;target&gt;
                &lt;property name=&quot;parent&quot; location=&quot;..&quot; /&gt;
                &lt;property name=&quot;jndi.properties.input&quot; value=&quot;sca-test.jndi.properties&quot; /&gt;
                &lt;property name=&quot;scatest.input&quot; value=&quot;AgentData&quot; /&gt;
                &lt;property name=&quot;scatest.format&quot; value=&quot;junit&quot; /&gt;
                &lt;property name=&quot;scatest.result&quot; value=&quot;reports&quot; /&gt;
                &lt;ant antfile=&quot;${scriptsdir}/ant-sca-test.xml&quot;
                     dir=&quot;${scriptsdir}&quot;
                     target=&quot;test&quot; /&gt;
              &lt;/target&gt;
            &lt;/configuration&gt;
            &lt;goals&gt;
              &lt;goal&gt;run&lt;/goal&gt;
            &lt;/goals&gt;
          &lt;/execution&gt;
        &lt;/executions&gt;
      &lt;/plugin&gt;
    &lt;/plugins&gt;
    &lt;outputDirectory&gt;SCA-INF\classes/&lt;/outputDirectory&gt;
    &lt;resources/&gt;
  &lt;/build&gt;
  &lt;distributionManagement&gt;
    &lt;!-- use the following if you're not using a snapshot version. --&gt;
    &lt;!--&lt;repository&gt;
      &lt;id&gt;local&lt;/id&gt;
      &lt;name&gt;local repository&lt;/name&gt;
      &lt;url&gt;file:///C:/Documents and Settings/Phani/.m2/repository&lt;/url&gt;
    &lt;/repository&gt; --&gt;
    &lt;snapshotRepository&gt;
      &lt;id&gt;artifactory&lt;/id&gt;
      &lt;name&gt;artifactory-snapshots&lt;/name&gt;
      &lt;url&gt;http://portalserver:8081/artifactory/libs-snapshot-local&lt;/url&gt;
    &lt;/snapshotRepository&gt;
  &lt;/distributionManagement&gt;
&lt;/project&gt;

&lt;/project&gt;

</pre>
<p>Thank you Phani.  Enjoy!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2486/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2486/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2486&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/05/22/using-oracle-service-registry-in-an-automated-maven-soabpm-build/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>Identity Virtualization for BPM &#8211; or Using Multiple Directories</title>
		<link>http://redstack.wordpress.com/2012/05/03/identity-virtualization-for-bpm-or-using-multiple-directories/</link>
		<comments>http://redstack.wordpress.com/2012/05/03/identity-virtualization-for-bpm-or-using-multiple-directories/#comments</comments>
		<pubDate>Thu, 03 May 2012 01:46:28 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[identity]]></category>
		<category><![CDATA[libOVD]]></category>
		<category><![CDATA[OVD]]></category>
		<category><![CDATA[virtualization]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2484</guid>
		<description><![CDATA[We often get questions about how to configure BPM to use multiple identity providers (directories, database, etc.) so that users of BPM Workspace (for example) can be authenticated against different providers. A little known fact about BPM is that it &#8230; <a href="http://redstack.wordpress.com/2012/05/03/identity-virtualization-for-bpm-or-using-multiple-directories/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2484&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>We often get questions about how to configure BPM to use multiple identity providers (directories, database, etc.) so that users of BPM Workspace (for example) can be authenticated against different providers.</p>
<p>A little known fact about BPM is that it includes identity virtualization support through <strong>libOVD</strong>.  It is not necessary to install a full blown OVD or to set up custom DB authenticators, etc.  You can just use libOVD.</p>
<p>My colleague Christopher Karl Chan from Denmark has a good introduction to this topic <a href="https://blogs.oracle.com/bpmbestpractice/entry/setting_up_active_directory_lightweight">here</a> which I would encourage you to read if you are looking at this kind of requirement.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2484/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2484/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2484&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/05/03/identity-virtualization-for-bpm-or-using-multiple-directories/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>How to disable B2B</title>
		<link>http://redstack.wordpress.com/2012/04/30/how-to-disable-b2b/</link>
		<comments>http://redstack.wordpress.com/2012/04/30/how-to-disable-b2b/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 04:02:16 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[11g]]></category>
		<category><![CDATA[B2B]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2476</guid>
		<description><![CDATA[That&#8217;s a provocative title!  Let&#8217;s start by talking about why you might want to disable B2B! If you are using BPM (or SOA) and you are not using any of the B2B functionality, then you might want to consider disabling &#8230; <a href="http://redstack.wordpress.com/2012/04/30/how-to-disable-b2b/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2476&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>That&#8217;s a provocative title!  Let&#8217;s start by talking about why you might want to disable B2B!</p>
<p>If you are using BPM (or SOA) and you are not using any of the B2B functionality, then you might want to consider disabling B2B on your SOA managed servers.  There are a few good reasons for doing this:</p>
<ul>
<li>You will save some memory,</li>
<li>You will reduce your managed server start (and restart) time, and</li>
<li>You avoid any potential problems that may be introduced by running unnecessary modules &#8211; think security.</li>
</ul>
<p>So how do we do it?  There are two steps that you need to take.</p>
<p>First, log on the WebLogic Console and go to <strong>Deployments.</strong>  Find the <strong>b2b</strong> application and stop it.</p>
<p>The second step is a little more involved &#8211; we need to set the <strong>b2b.donot_initialize</strong> property to <strong>true.</strong>  But first, we need to define this property.</p>
<p>Log on the Enterprise Manager and navigate to <strong>soa-infra</strong>.  Then open the <strong>SOA Infrastructure</strong> menu, then <strong>SOA Administration</strong>, then <strong>B2B Server Properties</strong>.</p>
<p><a href="http://redstack.files.wordpress.com/2012/04/soainfra.png"><img class="alignnone size-full wp-image-2477" title="soainfra" src="http://redstack.files.wordpress.com/2012/04/soainfra.png?w=640" alt=""   /></a></p>
<p>Click on the <strong>More B2B Configuration Properties</strong><strong>&#8230;</strong> link.</p>
<p><a href="http://redstack.files.wordpress.com/2012/04/more.png"><img class="alignnone size-full wp-image-2478" title="more" src="http://redstack.files.wordpress.com/2012/04/more.png?w=640" alt=""   /></a></p>
<p>Go to the <strong>Operations</strong> tab.</p>
<p><a href="http://redstack.files.wordpress.com/2012/04/ops.png"><img class="alignnone  wp-image-2479" title="ops" src="http://redstack.files.wordpress.com/2012/04/ops.png?w=623&#038;h=178" alt="" width="623" height="178" /></a></p>
<p>Click on the <strong>addProperty</strong> operation to define a new property.</p>
<p><a href="http://redstack.files.wordpress.com/2012/04/preaddprop.png"><img class="alignnone  wp-image-2480" title="preAddProp" src="http://redstack.files.wordpress.com/2012/04/preaddprop.png?w=602&#038;h=179" alt="" width="602" height="179" /></a></p>
<p>In the <strong>key</strong> field, enter <strong>b2b.donot_initialize</strong>.  In the value field, enter <strong>true</strong>.  Add a comment if you wish.</p>
<p><a href="http://redstack.files.wordpress.com/2012/04/addprop.png"><img class="alignnone  wp-image-2481" title="addProp" src="http://redstack.files.wordpress.com/2012/04/addprop.png?w=605&#038;h=168" alt="" width="605" height="168" /></a></p>
<p>Click on the <strong>Invoke </strong>button to add the property.</p>
<p>Now restart your managed servers.  Viola!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2476/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2476/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2476&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/04/30/how-to-disable-b2b/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/04/soainfra.png" medium="image">
			<media:title type="html">soainfra</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/04/more.png" medium="image">
			<media:title type="html">more</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/04/ops.png" medium="image">
			<media:title type="html">ops</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/04/preaddprop.png" medium="image">
			<media:title type="html">preAddProp</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/04/addprop.png" medium="image">
			<media:title type="html">addProp</media:title>
		</media:content>
	</item>
		<item>
		<title>Testing Business Rules</title>
		<link>http://redstack.wordpress.com/2012/04/18/testing-business-rules/</link>
		<comments>http://redstack.wordpress.com/2012/04/18/testing-business-rules/#comments</comments>
		<pubDate>Wed, 18 Apr 2012 12:10:26 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[business rules]]></category>
		<category><![CDATA[obr]]></category>
		<category><![CDATA[Rules]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2474</guid>
		<description><![CDATA[Today I learned about a really neat utility that was developed by my colleague, Olivier Lediouris, which allows you to test Business Rules in a standalone/offline fashion &#8211; without the need to deploy them to a SOA/BPM server and build &#8230; <a href="http://redstack.wordpress.com/2012/04/18/testing-business-rules/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2474&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Today I learned about a really neat utility that was developed by my colleague, Olivier Lediouris, which allows you to test Business Rules in a standalone/offline fashion &#8211; without the need to deploy them to a SOA/BPM server and build a whole composite around them.</p>
<p>Olivier describes it as:</p>
<blockquote><p>A graphical user interface to test OBR without having to deploy anything anywhere.</p></blockquote>
<p>You can find details and download the tool <a href="http://code.google.com/p/oracle-business-rules-tester/">here</a>.  If you are using Business Rules, I would highly recommend checking this out.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2474/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2474/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2474&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/04/18/testing-business-rules/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>List all BPM Processes for a user</title>
		<link>http://redstack.wordpress.com/2012/04/18/list-all-bpm-processes-for-a-user/</link>
		<comments>http://redstack.wordpress.com/2012/04/18/list-all-bpm-processes-for-a-user/#comments</comments>
		<pubDate>Tue, 17 Apr 2012 22:37:01 +0000</pubDate>
		<dc:creator>Kavitha Srinivasan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2469</guid>
		<description><![CDATA[Hello again, I have blogged (this time) on bpmtech on the above topic. Happy coding.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2469&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Hello again,</p>
<p>I have blogged (this time) on <a title="bpmtech" href="https://blogs.oracle.com/bpmtech/entry/bpm_api_usage_list_all">bpmtech</a> on the above topic.</p>
<p>Happy coding.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2469/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2469/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2469&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/04/18/list-all-bpm-processes-for-a-user/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0f7100ed4cb8ebf2cb582bc9a8d96f88?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">kasriniv</media:title>
		</media:content>
	</item>
		<item>
		<title>Where our readers come from</title>
		<link>http://redstack.wordpress.com/2012/03/13/where-our-readers-come-from/</link>
		<comments>http://redstack.wordpress.com/2012/03/13/where-our-readers-come-from/#comments</comments>
		<pubDate>Tue, 13 Mar 2012 07:43:42 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2457</guid>
		<description><![CDATA[Just a curiosity for those interested in such things &#8211; WordPress has just given us bloggers the ability to see where our readers are coming from.  Hopefully they will provide a widget so that we can put this on our &#8230; <a href="http://redstack.wordpress.com/2012/03/13/where-our-readers-come-from/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2457&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Just a curiosity for those interested in such things &#8211; WordPress has just given us bloggers the ability to see where our readers are coming from.  Hopefully they will provide a widget so that we can put this on our site with up to date data, but for now, here is a snapshot of where our readers come from, covering all visits since the blog was set up until today:</p>
<p><a href="http://redstack.files.wordpress.com/2012/03/where-readers-are-from.png"><img class="alignnone size-full wp-image-2458" title="where-readers-are-from" src="http://redstack.files.wordpress.com/2012/03/where-readers-are-from.png?w=640&#038;h=337" alt="" width="640" height="337" /></a></p>
<p>Let us take this opportunity again to thank you all for visiting and we hope you found something useful here!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2457/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2457/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2457&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/03/13/where-our-readers-come-from/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/03/where-readers-are-from.png" medium="image">
			<media:title type="html">where-readers-are-from</media:title>
		</media:content>
	</item>
		<item>
		<title>Using Oracle BPM Activity Guide APIs</title>
		<link>http://redstack.wordpress.com/2012/03/10/using-oracle-bpm-activity-guide-apis-8/</link>
		<comments>http://redstack.wordpress.com/2012/03/10/using-oracle-bpm-activity-guide-apis-8/#comments</comments>
		<pubDate>Fri, 09 Mar 2012 15:17:22 +0000</pubDate>
		<dc:creator>Kavitha Srinivasan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2443</guid>
		<description><![CDATA[We have recently heard of the usage of the &#8216;Process Driven UI&#8217; pattern fairly often (particularly with Oracle BPM 11 banking customers). I hope to be able to write up more about this pattern in a later blog. But the crux of &#8230; <a href="http://redstack.wordpress.com/2012/03/10/using-oracle-bpm-activity-guide-apis-8/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2443&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>We have recently heard of the usage of the &#8216;Process Driven UI&#8217; pattern fairly often (particularly with Oracle BPM 11 banking customers). I hope to be able to write up more about this pattern in a later blog. But the crux of the pattern is: BPM processes drive what UI screen needs to be painted next. As you can imagine, latency is all too important a criterion along with back-end processing for successful implementation of that pattern.</p>
<p>For now, my endeavour was to use the Activity Guide APIs to generate the data seen on the workspace Activity Guide tab. This is hopefully useful for customers who want to write their custom UI equivalent to the default Activity Guide tab off the default BPM workspace.  The screenshot is below. Please notice that my BPM process has two milestones and one Human Task under each milestone.</p>
<p><a href="http://redstack.files.wordpress.com/2012/03/ag2.gif"><img class="alignleft size-medium wp-image-2452" title="AG2" src="http://redstack.files.wordpress.com/2012/03/ag2.gif?w=300&#038;h=114" alt="" width="300" height="114" /></a></p>
<p><span style="font-style:normal;line-height:18px;">Assuming you have gotten the workflow context etc., fa</span>stforwarding to the meat of the issue: Using the PS4FP Activity Guide APIs, one needs to:</p>
<ul>
<li>Get all Activity Guide instances for a given user (API call: agQuerySvc.queryAGDisplayInfos)</li>
<li>Iterate through the list of AGDisplayInfos and get an AGInstanceId</li>
<li>For each AGInstance Id, get the agDisplayInfo (agQuerySvc.getAGDisplayInfoDetailsById)</li>
<li>For each AGInstance Id, get the corresponding milestone (agDisplayInfo.getMilestoneDisplayInfo)</li>
<li>For each Milestone, get the taskList in that milestone (milestoneDisplayInfo.getTaskDisplayInfo)</li>
<li>For each task, fetch details, say status and title in this example (taskDisp1.getTask)</li>
</ul>
<p><strong>I have used the standard workflow java sample in Authenticate.java and enhanced it for this purpose. That is an easy starting point!</strong><br />
Please note the following in that context:<br />
1. The build.xml needs another few jar files other than the one that is packaged with workflow java samples<br />
2. As usual, the wf_client_config has connection details.<br />
3. The bpm project MultipleTasks Project has 2 human tasks have been created, 2 milestones and each of these tasks belong to 1 milestone. The Process.Owner role is granted to jstein after deployment.</p>
<p>While the AGAPIs for PS4FP have been documented, please note that there are a few documentation bugs currently being worked on, including on the sample therein.<br />
Caveat: Some code refactoring in terms of moving some constants to different jar files is expected. And so, the jars referenced here are likely to change in PS5 and beyond.</p>
<p>I am going to try putting the source code: The BPM Process and the java code on java.net..(If for whatever reason I cant, I will be sure to blog source code here soon&#8230;)</p>
<p><span style="font-style:normal;line-height:18px;">Happy exploring AG APIs.</span></p>
<p>(Editing post for source code etc. below)</p>
<pre class="brush: java; title: ; notranslate">

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.*;
import java.util.List;
import oracle.bpel.services.workflow.WorkflowException;
import oracle.bpel.services.workflow.client.IWorkflowServiceClient;
import oracle.bpel.services.workflow.client.IWorkflowServiceClientConstants;
import oracle.bpel.services.workflow.client.WorkflowServiceClientFactory;
import oracle.bpel.services.workflow.query.ITaskQueryService;
import oracle.bpel.services.workflow.task.impl.TaskUtil;
import oracle.bpel.services.workflow.task.model.Task;
import oracle.bpel.services.workflow.verification.IWorkflowContext;

import oracle.bpel.services.bpm.common.IBPMContext;

import oracle.bpel.services.workflow.IWorkflowConstants;
import oracle.bpel.services.workflow.task.model.Task;
import oracle.bpel.services.workflow.verification.IWorkflowContext;
import oracle.bpel.services.workflow.query.impl.TaskQueryService;
import oracle.bpel.services.workflow.client.WorkflowServiceClientContext;
import oracle.bpel.services.workflow.metadata.config.ResourceBundleInfo;
import oracle.bpel.services.workflow.activityguide.query.IAGQueryService;
import oracle.bpel.services.workflow.activityguide.query.impl.AGQueryUtil;
import oracle.bpel.services.workflow.activityguide.query.*;
//import oracle.bpel.services.workflow.activityguide.query.impl.AGQueryService;
import oracle.bpel.services.workflow.activityguide.query.model.AGDisplayInfo;
import oracle.bpel.services.workflow.activityguide.query.model.MilestoneDisplayInfo;
import oracle.bpel.services.workflow.activityguide.metadata.IAGMetadataService;
import oracle.bpel.services.workflow.activityguide.metadata.impl.AGMetadataService;
import com.oracle.bpel.activityguide.instance.model.MilestoneInstanceType;
import oracle.bpel.services.workflow.activityguide.query.model.TaskDisplayInfoType;
import sun.security.util.Password;

import oracle.bpel.services.workflow.repos.Ordering;
import oracle.bpel.services.workflow.repos.Predicate;
import oracle.bpel.services.workflow.repos.TableConstants;

import oracle.bpel.services.workflow.IWorkflowConstants;
import oracle.bpel.services.workflow.client.IWorkflowServiceClient;
import oracle.bpel.services.workflow.client.IWorkflowServiceClientConstants;
import oracle.bpel.services.workflow.client.WorkflowServiceClientFactory;
import oracle.bpel.services.workflow.repos.Ordering;
import oracle.bpel.services.workflow.repos.Predicate;
import oracle.bpel.services.workflow.repos.TableConstants;

import oracle.bpel.services.workflow.repos.PredicateConstants;

import oracle.bpel.services.workflow.task.model.Task;
import oracle.bpel.services.workflow.verification.IWorkflowContext;
import oracle.bpel.services.workflow.activityguide.query.model.AGDisplayInfo;
import oracle.bpel.services.workflow.activityguide.query.model.MilestoneDisplayInfoType;
import com.oracle.bpel.activityguide.instance.model.MilestoneInstanceTypeImpl;
import oracle.bpel.services.workflow.task.model.Task;
import oracle.bpel.services.workflow.task.model.TaskType;

public class Authenticate
{

private static IWorkflowContext ctx;
 private static ITaskQueryService querySvc ;
 private static IWorkflowServiceClient wfSvcClient;
 public static void main(String[] args) throws Exception {
 if (args.length != 3 || !(&quot;SOAP&quot;.equals(args[0]) || &quot;REMOTE&quot;.equals(args[0]))) {
   System.out.print(&quot;Usage java Authenticate protocol(SOAP/REMOTE) user(jcooper) password(welcome1)&quot;);
   return;
 }
 authenticate(args[0], args[1], args[2]);
}

public static void authenticate(String protocol, String user, String password)
 throws WorkflowException {

System.out.println(&quot;Authenticating user &quot; + user + &quot;.....&quot;);

Map&lt;IWorkflowServiceClientConstants.CONNECTION_PROPERTY, String&gt; properties =
 new HashMap&lt;IWorkflowServiceClientConstants.CONNECTION_PROPERTY, String&gt;();
 //added below and commented out from wfclientconfig.xml
 properties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.EJB_SECURITY_PRINCIPAL, &quot;weblogic&quot;);//weblogic username
 properties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.EJB_SECURITY_CREDENTIALS, &quot;welcome1&quot;);//plain pwd

 // get the client
 //IWorkflowServiceClient wfSvcClient = WorkflowServiceClientFactory.getWorkflowServiceClient(protocol, properties, Util.getLogger());
 wfSvcClient = WorkflowServiceClientFactory.getWorkflowServiceClient(protocol, properties, Util.getLogger());
 querySvc = wfSvcClient.getTaskQueryService();
 // IWorkflowContext ctx = querySvc.authenticate(user, password.toCharArray(), &quot;jazn.com&quot;);
 IWorkflowContext ctx = querySvc.authenticate(user, password.toCharArray(), &quot;jazn.com&quot;);
 if (ctx == null)
 {
   System.out.println(&quot;ctx is null&quot;);
 } else {
   System.out.println(&quot;Authenticated successfully&quot;);
   System.out.println(&quot;Authenticated user info from IWorkflowContext:&quot;);
   System.out.println(&quot;Context created time: &quot; + (new Date(ctx.getStartDateTime())));
   System.out.println(&quot;User: &quot; + ctx.getUser());
   System.out.println(&quot;User Time Zone: &quot; + ctx.getTimeZone().getDisplayName());
   System.out.println(&quot;User Locale: &quot; + ctx.getLocale());
 }

 try{
   //calling testquery
   testQueryAGDisplayInfos();
 }
 catch (Exception eee){
   System.out.println(&quot;error&quot;);
   eee.printStackTrace();
 }

 }

private static void testQueryAGDisplayInfos()
 throws Exception
 {
   List agQueryColumns = new ArrayList();
   // agQueryColumns.add(&quot;MILESTONE_STATE&quot;);
   // agQueryColumns.add(&quot;DEFINITION_ID&quot;);
   //List agQueryColumns = new ArrayList();
   agQueryColumns.add(&quot;IDENTIFICATION_KEY&quot;);
   agQueryColumns.add(&quot;TITLE&quot;);
   agQueryColumns.add(&quot;CREATOR&quot;);
   agQueryColumns.add(&quot;CREATION_DATE&quot;);
   agQueryColumns.add(&quot;STATUS&quot;);
   IAGQueryService agQuerySvc = wfSvcClient.getAGQueryService();
   System.out.println(&quot;after AGQuerySVC&quot;);
   //Ordering order = new Ordering(TableConstants.WFTASK_INSTANCEID_COLUMN, false, true);

   // Query for all AG instances belonging to user say jstein
   List agDisplayInfoList =
   agQuerySvc.queryAGDisplayInfos(IAGQueryService.AG_PROCESS_TYPE_BPM, ctx,
   new ArrayList(),
   IAGQueryService.AGAssignmentFilter.ADMIN,
   null, //agPredicate,
   null, //ordering,
   0,
   0);

   List taskList=null;
   for (int a=0; a&lt;agDisplayInfoList.size();a++)
   {
     String instanceId = ((AGDisplayInfo) agDisplayInfoList.get(a)).getInstanceId();
     //AGDisplayInfo agDisplayInfo = (AGDisplayInfo) agDisplayInfoList.get(a);
     AGDisplayInfo agDisplayInfo = agQuerySvc.getAGDisplayInfoDetailsById(IAGQueryService.AG_PROCESS_TYPE_BPM,
     ctx,
     new Long(instanceId), new ArrayList(),
     IAGQueryService.AGASSIGNMENT_FILTER_ADMIN);
     System.out.println(&quot;******for AGInstancID :&quot;+instanceId+&quot;********&quot;);

     System.out.println(&quot;AG title:&quot; + agDisplayInfo.getTitle());

     System.out.println(&quot;milestone display info list size:&quot; + agDisplayInfo.getMilestoneDisplayInfo().size());
     //MilestoneDisplayInfo msDisplayInfo = (MilestoneDisplayInfo)agDisplayInfo.getMilestoneDisplayInfo();

     for (int i=0; i&lt; agDisplayInfo.getMilestoneDisplayInfo().size(); i++)
     {
       MilestoneDisplayInfo milestoneDisplayInfo = ((MilestoneDisplayInfo) agDisplayInfo.getMilestoneDisplayInfo().get(i));
       System.out.println(&quot;-----------------for milestone name :&quot;+milestoneDisplayInfo.getTitle()+&quot;---------&quot;);

       System.out.println(&quot;Milestone title: &quot; + milestoneDisplayInfo.getTitle());
       System.out.println(&quot;Milestone Name: &quot; + milestoneDisplayInfo.getName());

       List&lt;TaskDisplayInfoType&gt; taskDisplayInfoList = milestoneDisplayInfo.getTaskDisplayInfo();
       System.out.println(&quot;Total number of tasks: &quot; + taskDisplayInfoList.size());
       for(int j=0; j&lt; taskDisplayInfoList.size();j++)
       {

         TaskDisplayInfoType taskDisp1 = taskDisplayInfoList.get(j);
         TaskType task1 = taskDisp1.getTask();
         System.out.println(&quot;^^^^^^^^^^^^^^^^^^for task Id:&quot;+task1.getSystemAttributes().getTaskNumber()+&quot;^^^^^^^^^^^^^^^^^^&quot;);
         System.out.println(&quot;Task Status: &quot;+task1.getSystemAttributes().getState());
         System.out.println(&quot;Task Title: &quot;+task1.getTitle());

       } //taskDisplayInfoList

     } //MilestoneDisplayInfoList
   } //agDisplayInfoList
 } //method
} //class
</pre>
<p>Note: the classes in build.xml (for the most part the same as in the Workflow Java samples)</p>
<pre class="brush: xml; title: ; notranslate">

&lt;path id=&quot;client.classpath&quot;&gt;
 &lt;pathelement path=&quot;${bea.home}/wlserver_10.3/server/lib/wlfullclient.jar&quot;/&gt;
 &lt;pathelement path=&quot;${bea.home}/wlserver_10.3/server/lib/wlclient.jar&quot;/&gt;
 &lt;pathelement path=&quot;${bea.home}/oracle_common/webservices/wsclient_extended.jar&quot;/&gt;
 &lt;pathelement path=&quot;${bea.home}/Oracle_SOA1/soa/modules/oracle.soa.fabric_11.1.1/bpm-infra.jar&quot;/&gt;
 &lt;pathelement path=&quot;${bea.home}/Oracle_SOA1/soa/modules/oracle.soa.fabric_11.1.1/fabric-runtime.jar&quot;/&gt;
 &lt;pathelement path=&quot;${bea.home}/Oracle_SOA1/soa/modules/oracle.soa.workflow_11.1.1/bpm-services.jar&quot;/&gt;
 &lt;pathelement path=&quot;${bea.home}/Oracle_SOA1/soa/modules/soa-startup.jar&quot;/&gt;
 &lt;pathelement path=&quot;${bea.home}/Oracle_SOA1/soa/modules/oracle.soa.bpel_11.1.1/orabpel.jar&quot;/&gt;

&lt;pathelement path=&quot;./config&quot;/&gt;
 &lt;/path&gt;

</pre>
<p>Note: wf_client_config.xml</p>
<pre class="brush: xml; title: ; notranslate">

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&gt;
 &lt;workflowServicesClientConfiguration xmlns=&quot;http://xmlns.oracle.com/bpel/services/client&quot;&gt;
 &lt;server default=&quot;true&quot; name=&quot;default&quot;&gt;
 &lt;localClient&gt;
 &lt;participateInClientTransaction&gt;false&lt;/participateInClientTransaction&gt;
 &lt;/localClient&gt;
 &lt;remoteClient&gt;
 &lt;serverURL&gt;t3://localhost:7001&lt;/serverURL&gt;
 &lt;!--userName&gt;jstein&lt;/userName&gt;
 &lt;password encrypted=&quot;true&quot;&gt;4tORP+F+3jNupTEwSeZj3A==&lt;/password--&gt;
 &lt;initialContextFactory&gt;weblogic.jndi.WLInitialContextFactory&lt;/initialContextFactory&gt;
 &lt;participateInClientTransaction&gt;false&lt;/participateInClientTransaction&gt;
 &lt;/remoteClient&gt;
 &lt;/server&gt;
 &lt;/workflowServicesClientConfiguration&gt;

</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2443/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2443/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2443&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/03/10/using-oracle-bpm-activity-guide-apis-8/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0f7100ed4cb8ebf2cb582bc9a8d96f88?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">kasriniv</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/03/ag2.gif?w=300" medium="image">
			<media:title type="html">AG2</media:title>
		</media:content>
	</item>
		<item>
		<title>Worklist build for 11.1.1.6 (PatchSet 5) released</title>
		<link>http://redstack.wordpress.com/2012/03/09/worklist-build-for-11-1-1-6-patchset-5-released/</link>
		<comments>http://redstack.wordpress.com/2012/03/09/worklist-build-for-11-1-1-6-patchset-5-released/#comments</comments>
		<pubDate>Fri, 09 Mar 2012 02:24:26 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[11g]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[Worklist]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2423</guid>
		<description><![CDATA[Have just uploaded a build of the custom BPM worklist sample which is built against BPM 11.1.1.6.  You can find the download links and JavaDoc on the main worklist page.  The code is available in the subversion trunk (for now) &#8230; <a href="http://redstack.wordpress.com/2012/03/09/worklist-build-for-11-1-1-6-patchset-5-released/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2423&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Have just uploaded a build of the <a title="Worklist" href="http://redstack.wordpress.com/worklist/">custom BPM worklist sample</a> which is built against BPM 11.1.1.6.  You can find the download links and JavaDoc on the<a title="Worklist" href="http://redstack.wordpress.com/worklist/"> main worklist page</a>.  The code is available in the subversion trunk (for now) or tag VERSION-1.6.</p>
<p>This is basically the same as the last version of the sample, just recompiled for the new release of BPM.  I am planning to add some significant new functionality to the sample to coincide with BPM 11.1.1.7.</p>
<p>I am also working on a C#/.Net version of the worklist.  See some details <a title="in .Net" href="http://redstack.wordpress.com/worklist/in-net/">here</a> if you are interested.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2423/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2423/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2423&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/03/09/worklist-build-for-11-1-1-6-patchset-5-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>Oracle Fusion Middleware on JDK 7</title>
		<link>http://redstack.wordpress.com/2012/03/08/oracle-fusion-middleware-on-jdk-7/</link>
		<comments>http://redstack.wordpress.com/2012/03/08/oracle-fusion-middleware-on-jdk-7/#comments</comments>
		<pubDate>Thu, 08 Mar 2012 06:14:32 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[11g]]></category>
		<category><![CDATA[ADF]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[Java 7]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[WebLogic]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2416</guid>
		<description><![CDATA[In case you did not notice, you may be interested to know that most of the Oracle Fusion Middleware 11g platform is now supported on Java 7.  This is effective from WebLogic Server 10.3.6 and Oracle Fusion Middleware 11.1.1.6.  You &#8230; <a href="http://redstack.wordpress.com/2012/03/08/oracle-fusion-middleware-on-jdk-7/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2416&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>In case you did not notice, you may be interested to know that most of the Oracle Fusion Middleware 11g platform is now supported on Java 7.  This is effective from WebLogic Server 10.3.6 and Oracle Fusion Middleware 11.1.1.6.  You can check the details for your particular product and operating system <a href="http://www.oracle.com/technetwork/middleware/ias/downloads/fusion-certification-100350.html">here</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2416/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2416&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/03/08/oracle-fusion-middleware-on-jdk-7/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>Step by step instructions on building a SOA cluster &#8211; with video</title>
		<link>http://redstack.wordpress.com/2012/02/28/step-by-step-instructions-on-building-a-soa-cluster-with-video/</link>
		<comments>http://redstack.wordpress.com/2012/02/28/step-by-step-instructions-on-building-a-soa-cluster-with-video/#comments</comments>
		<pubDate>Tue, 28 Feb 2012 04:15:49 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AIA]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2405</guid>
		<description><![CDATA[Just came across this and wanted to share &#8211; step by step video instructions on building a two node SOA (and AIA Foundation Pack) cluster!  Cool!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2405&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Just came across <a href="http://www.oracle.com/technetwork/middleware/foundation-pack/learnmore/soafpclusterupk-1499792.html">this </a>and wanted to share &#8211; step by step video instructions on building a two node SOA (and AIA Foundation Pack) cluster!  Cool!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2405/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2405/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2405&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/02/28/step-by-step-instructions-on-building-a-soa-cluster-with-video/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>Unit Testing Asynchronous BPEL Processes Using soapUI</title>
		<link>http://redstack.wordpress.com/2012/02/28/unit-testing-asynchronous-bpel-processes-using-soapui/</link>
		<comments>http://redstack.wordpress.com/2012/02/28/unit-testing-asynchronous-bpel-processes-using-soapui/#comments</comments>
		<pubDate>Tue, 28 Feb 2012 04:11:42 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[soapUI]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2402</guid>
		<description><![CDATA[This is a topic I have been interested in for a while.  I have seen it done by some of my colleagues, especially in AIA environments, and I have been waiting to get an opportunity to work on it and &#8230; <a href="http://redstack.wordpress.com/2012/02/28/unit-testing-asynchronous-bpel-processes-using-soapui/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2402&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>This is a topic I have been interested in for a while.  I have seen it done by some of my colleagues, especially in AIA environments, and I have been waiting to get an opportunity to work on it and document it.</p>
<p>But I recently found a great article from Daniel Amadei <a href="http://www.oracle.com/technetwork/articles/soa/bpel-amadei-1518001.html">here</a>.  I strongly encourage you to take a look at it if you are at all interested in test automation and/or continuous integration.</p>
<p>I am planning to build this kind of testing into my continuous integration project <a title="Continuous Integration" href="http://redstack.wordpress.com/continuous-integration/">here</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2402/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2402/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2402&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/02/28/unit-testing-asynchronous-bpel-processes-using-soapui/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>Be aware of JDK 1.6.0_30 with BPM or SOA on Windows Server</title>
		<link>http://redstack.wordpress.com/2012/02/28/be-aware-of-jdk-1-6-0_30-with-bpm-or-soa-on-windows-server/</link>
		<comments>http://redstack.wordpress.com/2012/02/28/be-aware-of-jdk-1-6-0_30-with-bpm-or-soa-on-windows-server/#comments</comments>
		<pubDate>Tue, 28 Feb 2012 04:04:10 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[11g]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[crash]]></category>
		<category><![CDATA[JDK]]></category>
		<category><![CDATA[memory]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2400</guid>
		<description><![CDATA[Have not done extensive testing of this, but I have noticed on a few BPM 11.1.1.6 installs on Windows Server 2008 R2 and also on Windows 7 &#8211; both 64-bit &#8211; that BPM is very unstable with JDK 1.6.0_30 (64-bit).  &#8230; <a href="http://redstack.wordpress.com/2012/02/28/be-aware-of-jdk-1-6-0_30-with-bpm-or-soa-on-windows-server/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2400&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Have not done extensive testing of this, but I have noticed on a few BPM 11.1.1.6 installs on Windows Server 2008 R2 and also on Windows 7 &#8211; both 64-bit &#8211; that BPM is very unstable with JDK 1.6.0_30 (64-bit).  By unstable I mean slow and crashes with an OutOfMemory or similar after 10-15 minutes of use.</p>
<p>I have found on these systems that changing to 1.6.0_26 fixed all problems and dramatically improved performance.  So that is what I did!  As I said, this is not scientific, I did not do extensive testing or work out why it was having problems &#8211; at the time I did not have the time to spare, I just needed it fixed.  But I am posting it anyway just in case it helps someone out.</p>
<p>Note that I have not seen this issue on any other operating system.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2400/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2400/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2400&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/02/28/be-aware-of-jdk-1-6-0_30-with-bpm-or-soa-on-windows-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>PS5 released</title>
		<link>http://redstack.wordpress.com/2012/02/28/ps5-released/</link>
		<comments>http://redstack.wordpress.com/2012/02/28/ps5-released/#comments</comments>
		<pubDate>Tue, 28 Feb 2012 03:58:59 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group1]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[11g]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2396</guid>
		<description><![CDATA[In case you missed it &#8211; Oracle Fusion Middleware 11.1.1.6 (the long awaited &#8216;PatchSet 5&#8242;) has been released.  You can find some info about new features in BPM here and SOA here. The documentation is here &#8211; note that we &#8230; <a href="http://redstack.wordpress.com/2012/02/28/ps5-released/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2396&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>In case you missed it &#8211; Oracle Fusion Middleware 11.1.1.6 (the long awaited &#8216;PatchSet 5&#8242;) has been released.  You can find some info about new features in BPM <a href="http://soacommunity.wordpress.com/2012/02/22/bpm-suite-ps5-11-1-1-6-available-for-download/">here</a> and SOA <a href="http://soacommunity.wordpress.com/2012/02/22/soa-suite-ps5-11-1-1-6-available-for-download/">here</a>.</p>
<p>The documentation is <a href="http://docs.oracle.com/cd/E23943_01/index.htm">here</a> &#8211; note that we have the new <strong>docs.oracle.com</strong> site which is also being indexed properly by Google now (so I&#8217;m told) &#8211; addressing a long time complaint about searchability of the Oracle documentation.</p>
<p>And of course you can download it all from OTN.</p>
<p>For BPM 11g customers, this release provides a full and properly supported mechanism to get all the new features that were added in the <a title="BPM PS4 Feature Pack released" href="http://redstack.wordpress.com/2011/09/26/bpm-ps4-feature-pack-released/">Feature Pack patch</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2396/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2396/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2396&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/02/28/ps5-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>Choosing BPMN or BPEL to model your processes</title>
		<link>http://redstack.wordpress.com/2012/02/13/choosing-bpmn-or-bpel-to-model-your-processes/</link>
		<comments>http://redstack.wordpress.com/2012/02/13/choosing-bpmn-or-bpel-to-model-your-processes/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 06:26:26 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group3]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[11g]]></category>
		<category><![CDATA[BPEL]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[Dave Shaffer]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2387</guid>
		<description><![CDATA[With Dave Shaffer Recently, I had a discussion with several colleagues and one of our large customers about when to use BPMN and when to use BPEL to model business processes.  I have discussed this topic before in this post &#8230; <a href="http://redstack.wordpress.com/2012/02/13/choosing-bpmn-or-bpel-to-model-your-processes/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2387&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>With Dave Shaffer</p>
<p>Recently, I had a discussion with several colleagues and one of our large customers about when to use BPMN and when to use BPEL to model business processes.  I have discussed this topic before in <a href="http://redstack.wordpress.com/2011/01/15/what-bpm-adds-to-soa-suite/">this post</a> but this conversation opened up an interesting new angle on the topic, which I wanted to share with you all.</p>
<p>First of all, let me be clear about the scenario here.  This is a large customer who is going to make extensive use of both BPMN and BPEL in their BPM/SOA environment.  They are not trying to decide which one to use exclusively &#8211; it is given that both BPEL and BPMN will be used extensively.  So the question here is about how to come up with a consistent approach to deciding which to use when – what to do with BPMN and what to do with BPEL.</p>
<p>The new perspective in this conversation was about how to choose the modeling language based on the fault/exception handling requirements of the process.  If you are not familiar with the options available for fault handling in BPMN and in BPEL, you should quickly review these sources:</p>
<ul>
<li>For BPMN, read <a href="http://www.oracle.com/technetwork/middleware/soasuite/documentation/oracle-bpm-modeling-guide-ps4fp-487996.pdf">Chapter 19 of the Modeling Guide</a></li>
<li>For BPEL, read <a href="http://blogs.oracle.com/ateamsoab2b/entry/fault_management_framework_by_example">this article</a> by my colleague Greg Mally</li>
</ul>
<p>You will notice that there are some differences in the capabilities of the products today.  If you look back over the last few releases of BPM, you will see that there has been a significant investment in adding more fault management capabilities for BPMN processes, and it would be reasonable to assume that this will continue.</p>
<p>But even while the Oracle platform holds the promise of equally rich fault handling in either BPEL or BPMN, one can make a case that the fault handling capabilities in BPEL are especially suitable for system to system integration, particularly when you need to use a distributed transaction or when compensation is required.  Besides, these kinds of highly technical fault handling capabilities are a task probably best suited for more technical kinds of processes and people.  And finally, the directed graph nature and ‘alter flow’ capability in BPMN can make it more difficult (or potentially impossible) to employ the same techniques.</p>
<p>However, the fault handling in BPMN is rather well suited to ‘business’ faults – not enough stock to fill an order, credit check failed, order line contains a discontinued product, order cancelled, things like that.</p>
<p>So this leads to the following suggested approach for this customer use-case:</p>
<ul>
<li>Write top level (i.e. true ‘business’ processes) in BPMN,</li>
<li>Do not perform any kind of system interaction in these processes – don’t use adapters, call web services, etc.,</li>
<li>Use activities or embedded sub-processes with boundary events and event sub-processes to handle all business faults that may occur,</li>
<li>Make sure to have a ‘catch all’ event sub-process to handle any failures that are not specifically handled,</li>
<li>Theoretically there should never be a system fault in these BPMN processes,</li>
<li>Whenever there is a need to do some actual work, delegate this to BPEL, i.e. use a service activity with implementation type ‘service call’ to have BPEL go do the work,</li>
<li>Make the BPEL processes atomic, so that they can easily be retried, rolled back, etc.,</li>
<li>Use the fault management framework to control the handling of faults in the BPEL processes, and</li>
<li>Keep BPEL ‘worker’ processes in separate composites from BPMN ‘business’ processes.</li>
</ul>
<p>This may not be perfect, but we think it offers a new, and very relevant, real-world perspective on how to decide which modeling notation is right for your processes.  We are sure interested to hear your thoughts and comments.</p>
<p>For a start, here are Dave’s thoughts on this idea:</p>
<p>First I would just like to reinforce the constraints around the scenario that this advice applies to because I think customers would come up with different approaches, and Oracle would have different best practices, when the question is asked around a greenfield project as to when to use BPEL and when to use BPMN.  In those scenarios, the advice would not be to wrap each system call in BPEL, since the unique value proposition of the Oracle platform is that the same system integration capabilities are available natively in both BPEL and BPMN.  However, I think the guidelines above make sense for a customer who will be mixing and matching BPEL and BPMN throughout their processes and applications and where it is assumed that most projects will include both.  In this case, it becomes important to strive for consistent guidelines as to where to draw the line for what to do in the BPEL part of a process and what to do in the BPMN part.  In this case, the fault handling capabilities are indeed richer in BPEL today vs what is possible in BPMN and even though they may be equivalent in the future, there are certainly many kinds of fault handling logic, compensation, etc. that will be deeper than the business would want to go.  The division of labor described above by Mark then results in not just using the best tool for the job, but also leverages the heterogeneous BPEL/BPMN architecture at this customer to make the BPMN “business view” of the process as clean as possible.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2387/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2387/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2387&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/02/13/choosing-bpmn-or-bpel-to-model-your-processes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
		<item>
		<title>Writing a Human Task UI in .Net (C#/ASP.NET) or in fact anything other than ADF</title>
		<link>http://redstack.wordpress.com/2012/02/10/writing-a-human-task-ui-in-net-casp-net-or-in-fact-anything-other-than-adf/</link>
		<comments>http://redstack.wordpress.com/2012/02/10/writing-a-human-task-ui-in-net-casp-net-or-in-fact-anything-other-than-adf/#comments</comments>
		<pubDate>Fri, 10 Feb 2012 04:06:12 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group3]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[11g]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Human Task]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2349</guid>
		<description><![CDATA[As you know, you can create the user interfaces for your human tasks using ADF.  JDeveloper allows you to auto-generate a human task user interface (form) and it also includes a wizard that gives you a bit more control over &#8230; <a href="http://redstack.wordpress.com/2012/02/10/writing-a-human-task-ui-in-net-casp-net-or-in-fact-anything-other-than-adf/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2349&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>As you know, you can create the user interfaces for your human tasks using ADF.  JDeveloper allows you to auto-generate a human task user interface (form) and it also includes a wizard that gives you a bit more control over what it produced.  Now ADF is a fine framework, but some people already have a pretty heavy investment in some other framework and a lot of these people would really like to be able to use their framework of choice to build their human task user interfaces.  And the good news it, they can!  And its not that hard to do, once you know how <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>In this article, we will look at how you build a human task user interface using C# and ASP.NET.  This human task UI will show up right there in BPM workspace, just like the ADF ones do.  Here&#8217;s what it will look like when it is done:</p>
<p><a href="http://redstack.files.wordpress.com/2012/02/dotnet-tf1.png"><img class="alignnone size-full wp-image-2350" title="dotnet-tf1" src="http://redstack.files.wordpress.com/2012/02/dotnet-tf1.png?w=640&#038;h=510" alt="" width="640" height="510" /></a></p>
<p>Those red arrows wont be there!  They are just to show you where it is.  That part there where you normally see the ADF task form, that is a .Net application.</p>
<p>Now, as I said, you can use any framework to do this &#8211; as long as it is capable of calling Java APIs or web services and reading some data from the HTTP Request object&#8217;s Query String.</p>
<p>In this post we will build a UI that is specific to the task in question &#8211; like the ADF ones that you generate are.  But it would not be a long way from here to building a generator so that you could auto-generate .Net user interfaces just like you can for ADF.</p>
<h2>What you need</h2>
<p>To follow along this post you are going to need a couple of things:</p>
<ul>
<li>JDeveloper with the SOA and BPM extensions installed, at least version 11.1.1.5 plus the Feature Pack patch,</li>
<li>A BPM server, the same version as JDeveloper,</li>
<li>A copy of Visual Studio with the C# and web applications options installed.  I used Visual Studio 2010 Professional, but the free Visual Studio Express editions will also work if you don&#8217;t own a copy of Visual Studio.  Just make sure you get one with web applications and C# included, and</li>
<li>either a lot of time and patience to type boring bolierplate code, or a copy of AutoMapper from <a href="https://github.com/downloads/AutoMapper/AutoMapper/AutoMapper.2.0.0.zip">here</a>.  I recommend you take the AutoMapper option&#8230;</li>
</ul>
<p>If you want to get a feel for calling the BPM/HWF APIs/web services from .Net, you might want to review <a title="Updating a task from .Net" href="http://redstack.wordpress.com/2011/12/13/updating-a-task-from-net/">this post</a>.</p>
<h2>Creating the composite</h2>
<p>First thing we are going to want is a composite to play with.  We can just make a really simple one with just a human task in it.  That will be enough to do what we want to do here.  In fact, something as simple as this will do admirably:</p>
<p><a href="http://redstack.files.wordpress.com/2012/02/dotnet-tf2.png"><img class="alignnone size-full wp-image-2352" title="dotnet-tf2" src="http://redstack.files.wordpress.com/2012/02/dotnet-tf2.png?w=640" alt=""   /></a></p>
<p>To create this, open up JDeveloper and create a new BPM Application by selecting <strong>New</strong> from the <strong>Application</strong> menu.  In the wizard choose <strong>BPM Application</strong> in the <strong>Application Template</strong> section and give your application a name.  I called mine <strong>DotNetTest</strong>.  Then click on <strong>Next</strong>.  Give your project a name, I used the same name.  Then click on <strong>Next</strong>.  Choose <strong>Composite with BPMN Process</strong> and click on <strong>Finish</strong>.</p>
<p>In the next dialog, give your process a name, I called mine <strong>DotNetTest</strong> too.  Then take the defaults and continue.</p>
<p>Drag a <strong>User Task</strong> into your process from the component palette and drop it on the line between the <strong>Start </strong>and <strong>End</strong> nodes, as shown in the diagram above.  Notice that the line turns blue when you hover above it in the right spot.  If you don&#8217;t see the component palette, you can open it from the <strong>View</strong> menu.</p>
<p>Apologies that my names of things in this sample are not super imaginative&#8230;</p>
<p>Now we need to create some data definitions.  Open the <strong>BPM Project Navigator</strong>.  If you don&#8217;t see it, you can open it from the <strong>View</strong> menu.  Expand out your project and the <strong>Business Catalog</strong>.  Right click on the <strong>Business Catalog</strong> and choose <strong>New</strong> then <strong>Module</strong> from the popup menu.  Call the module <strong>Data</strong>.</p>
<p>Then right click on your new module and select <strong>New</strong> then <strong>Business Object</strong> from the popup menu.  Name your new business object.  I called mine <strong>BusinessObject1</strong> (told you there were not very imaginative).  Then click on the green plus icon in the <strong>Attributes</strong> section to add two new attributes.  Make them both of type <strong>String</strong>.  I called mine <strong>attribute1 </strong>and <strong>attribute2</strong>. Go ahead and save your work (select <strong>Save All</strong> from the <strong>File</strong> menu.)</p>
<p>Now return to your process.  Click on the background of the process to make sure the structure pane shows the structure of the process.  It should look a bit like this:</p>
<p><a href="http://redstack.files.wordpress.com/2012/02/dotnet-tf3.png"><img class="alignnone size-full wp-image-2353" title="dotnet-tf3" src="http://redstack.files.wordpress.com/2012/02/dotnet-tf3.png?w=640&#038;h=364" alt="" width="640" height="364" /></a></p>
<p>Now right click on the <strong>Process Data Objects</strong> in the structure pane and select <strong>New</strong> from the popup menu.  Give it a name, I chose <strong>dataObject1</strong>, and choose <strong>&lt;Component&gt;</strong> for the <strong>Type</strong>.  Then click on the little magnifying glass icon and choose the business object you just defined.</p>
<p><a href="http://redstack.files.wordpress.com/2012/02/dotnet-tf4.png"><img class="alignnone size-full wp-image-2354" title="dotnet-tf4" src="http://redstack.files.wordpress.com/2012/02/dotnet-tf4.png?w=640" alt=""   /></a></p>
<p>Go ahead and create a second variable (process data object) of type <strong>String</strong> called <strong>dataObject2</strong>.</p>
<p>Now let&#8217;s set up our data in this process.  Right click on the <strong>Start </strong>node and open its <strong>Properties</strong> from the popup menu.  Go to the <strong>Implementation</strong> tab and add an argument by clicking on the little green plus icon in the <strong>Arguments Definition</strong> section. I called mine <strong>argument1</strong>.  Set the type to your business object (<strong>Data.BusinessObject1</strong> if you used the same names as me.)</p>
<p>Now click on the <strong>Data Associations</strong> link.  Map your <strong>argument1</strong> into your <strong>dataObject1</strong> as shown in the image below.  Then right click on <strong>dataObject2</strong> and choose <strong>Expression</strong> from the popup menu.  Enter <strong>&#8220;hello&#8221;</strong> (with the quotes) as the expression.  Your data associations should now look a little like this:</p>
<p><a href="http://redstack.files.wordpress.com/2012/02/dotnet-tf5.png"><img class="alignnone size-full wp-image-2355" title="dotnet-tf5" src="http://redstack.files.wordpress.com/2012/02/dotnet-tf5.png?w=640&#038;h=293" alt="" width="640" height="293" /></a></p>
<p>That takes care of our inputs.  When you start the process you will type in the two strings that get put into <strong>dataObject1</strong> and <strong>dataObject2</strong> will get set to &#8220;hello.&#8221;</p>
<p>Now, let&#8217;s set up the human task.  To make it interesting we are going to allow editing of some data but not of others.</p>
<p>Open the human task properties and go the the <strong>Implementation</strong> tab.  Click on the green plus icon to create a new human task.  Give it a name, I called mine <strong>Humantask1</strong>.  Click on the little magnifying glass icon next to <strong>Outcomes</strong> and set the outcomes to just one option &#8211; <strong>OK</strong>.  Then click on the plus icon next to <strong>Parameters</strong> to open the <strong>Browse Data Objects</strong> window that you see on the right hand side of the image below.  Drag your two data objects into the <strong>Parameters</strong> area as indicated by the red arrow.  Tick the box to make only <strong>dataObject2</strong> editable.  Then click on <strong>OK</strong> to complete the human task definition.  We will take the defaults for everything else.</p>
<p><a href="http://redstack.files.wordpress.com/2012/02/dotnet-tf61.png"><img class="alignnone size-full wp-image-2357" title="dotnet-tf6" src="http://redstack.files.wordpress.com/2012/02/dotnet-tf61.png?w=640&#038;h=354" alt="" width="640" height="354" /></a></p>
<p>Now click on the <strong>Data Associations</strong> link.  Set up the input and output mappings as shown:</p>
<p><a href="http://redstack.files.wordpress.com/2012/02/dotnet-tf7.png"><img class="alignnone size-full wp-image-2358" title="dotnet-tf7" src="http://redstack.files.wordpress.com/2012/02/dotnet-tf7.png?w=640&#038;h=559" alt="" width="640" height="559" /></a></p>
<p>Right, now we are ready to go ahead and deploy our composite to our server instance.  You can do this back in the <strong>Application Navigator </strong>using the <strong>Deploy</strong> option in the popup menu on the project.<strong><br />
</strong></p>
<p><a href="http://redstack.files.wordpress.com/2012/02/dotnet-tf8.png"><img class="alignnone size-full wp-image-2359" title="dotnet-tf8" src="http://redstack.files.wordpress.com/2012/02/dotnet-tf8.png?w=640&#038;h=280" alt="" width="640" height="280" /></a></p>
<p>Follow through the wizard, I assume that you know how to do this by now if you are a regular reader.  If not, you can go ahead and take the defaults on this one.</p>
<p>When the deployment is finished, go to Enterprise Manager (at <a href="http://yourserver:7001/em" rel="nofollow">http://yourserver:7001/em</a>) and login as an administrative user (like weblogic) and then navigate into the SOA folder and you should see your shiny new composite there.  Something like this:</p>
<p><a href="http://redstack.files.wordpress.com/2012/02/dotnet-tf9.png"><img class="alignnone size-full wp-image-2360" title="dotnet-tf9" src="http://redstack.files.wordpress.com/2012/02/dotnet-tf9.png?w=640&#038;h=199" alt="" width="640" height="199" /></a></p>
<p>Click on it to open the composite page, then click on the <strong>Test</strong> button and go ahead and launch a couple of instances.  We will use them later.</p>
<p>While we are here, let&#8217;s tell the runtime that we are planning to use our own user interface for this task.  We have not created it yet, but we have a pretty good idea what the details will be.  Go back to the composites main page.  Down the bottom you should see a list of the components in the composite, including your <strong>Humantask1</strong>.  Click on that to bring up the settings for that component.  Then open the <strong>Administration</strong> tab in these settings.</p>
<p><a href="http://redstack.files.wordpress.com/2012/02/dotnet-tf10.png"><img class="alignnone size-full wp-image-2361" title="dotnet-tf10" src="http://redstack.files.wordpress.com/2012/02/dotnet-tf10.png?w=640&#038;h=227" alt="" width="640" height="227" /></a></p>
<p>Click on the green plus icon next to <strong>Add URI</strong>.  Provide the values you see in the image above.  We are just going to use the built in test environment in Visual Studio in this post.  No need to install IIS for this.  Of course in real life you would install it and deploy your web applications to IIS.  Make sure you click on the<strong> Apply </strong>button when you are done to save your changes.</p>
<h2>The .Net Application</h2>
<p>Now, let&#8217;s get to work on the fun part!</p>
<p>Open Visual Studio and start a new project by choosing <strong>New</strong> then <strong>Project</strong> from the <strong>File</strong> menu.  In the <strong>New Project</strong> dialog box, open the <strong>Visual C#</strong> folder and select the <strong>Web</strong> category.  Make sure you have <strong>.Net Framework 4</strong> selected (you will have installed this with Visual Studio most likely &#8211; if not, stop and go install it now) and choose the <strong>ASP.NET Web Application</strong> template.  Give your project a name, I called mine <strong>WebApplication2</strong>.  Click on <strong>OK</strong> to create your application.</p>
<p><a href="http://redstack.files.wordpress.com/2012/02/dotnet-tf11.png"><img class="alignnone size-full wp-image-2364" title="dotnet-tf11" src="http://redstack.files.wordpress.com/2012/02/dotnet-tf11.png?w=640&#038;h=442" alt="" width="640" height="442" /></a></p>
<p>We need to tell our project about AutoMapper. First of all, go extract the <strong>AutoMapper.zip</strong> into your project directory, e.g. <strong>c:\users\mark\documents\visual studio 2010\Projects\WebApplication2\WebApplication2</strong>.  This will give you three files &#8211; <strong>AutoMapper.dll</strong>, <strong>AutoMapper.pdb</strong> and <strong>AutoMapper.xml</strong>.  For a discussion of what AutoMapper is and why we want it &#8211; see <a title="Updating a task from .Net" href="http://redstack.wordpress.com/2011/12/13/updating-a-task-from-net/">this post</a>.</p>
<p>In the <strong>Solution Explorer</strong>, right click on the <strong>References</strong> folder and choose <strong>Add Reference&#8230;</strong> from the popup menu.</p>
<p><a href="http://redstack.files.wordpress.com/2012/02/dotnet-tf12.png"><img class="alignnone size-full wp-image-2365" title="dotnet-tf12" src="http://redstack.files.wordpress.com/2012/02/dotnet-tf12.png?w=640" alt=""   /></a></p>
<p>In the <strong>Add Reference</strong> window, go to the <strong>Browse</strong> tab.  You should see the <strong>AutoMapper.dll</strong> that you just unzipped right there in your project directory.  Select it and click on <strong>OK</strong> to add a reference to your project.</p>
<p><a href="http://redstack.files.wordpress.com/2012/02/dotnet-tf13.png"><img class="alignnone size-full wp-image-2366" title="dotnet-tf13" src="http://redstack.files.wordpress.com/2012/02/dotnet-tf13.png?w=640" alt=""   /></a></p>
<p>Now, we need to add references to the services that we will be using.  We need to get the WSDL addresses for the <strong>TaskService</strong> and the <strong>TaskQueryService</strong>.  You can work these out using the following examples:</p>
<pre>http://yourserver:8001/integration/services/TaskQueryService/TaskQueryService?wsdl

http://yourserver:8001/integration/services/TaskService/TaskServicePort?wsdl</pre>
<p>To add the references, right click on the <strong>Service References</strong> folder and select <strong>Add Service Reference&#8230;</strong> from the popup menu.</p>
<p><a href="http://redstack.files.wordpress.com/2012/02/dotnet-tf141.png"><img class="alignnone size-full wp-image-2372" title="dotnet-tf14" src="http://redstack.files.wordpress.com/2012/02/dotnet-tf141.png?w=640" alt=""   /></a></p>
<p>Add the two web services (one at a time).  Enter the WSDL URL in the <strong>Address</strong> field, then click on the <strong>Go</strong> button.  You will see a description of the services avilable as shown in the image below.  Enter a name for the service in the <strong>Namespace </strong>field and then click on the <strong>OK</strong> button.  I called mine <strong>TaskService</strong> and <strong>TaskQueryService</strong>.</p>
<p><a href="http://redstack.files.wordpress.com/2012/02/dotnet-tf151.png"><img class="alignnone size-full wp-image-2371" title="dotnet-tf15" src="http://redstack.files.wordpress.com/2012/02/dotnet-tf151.png?w=640" alt=""   /></a></p>
<p>Now, because these two services use WS-Security, we need to tell .Net to use WS-Security.  This is done by editing the <strong>web.config</strong> file.  You should see it right there in the <strong>Solution Explorer</strong>, go ahead and open it and scroll down to the bottom.  Here is the part we are interested in:</p>
<pre class="brush: xml; title: ; notranslate">
 &lt;bindings&gt;
      &lt;basicHttpBinding&gt;
        &lt;binding name=&quot;TaskQueryServiceSOAPBinding&quot; closeTimeout=&quot;00:01:00&quot;
          openTimeout=&quot;00:01:00&quot; receiveTimeout=&quot;00:10:00&quot; sendTimeout=&quot;00:01:00&quot;
          allowCookies=&quot;false&quot; bypassProxyOnLocal=&quot;false&quot; hostNameComparisonMode=&quot;StrongWildcard&quot;
          maxBufferSize=&quot;65536&quot; maxBufferPoolSize=&quot;524288&quot; maxReceivedMessageSize=&quot;65536&quot;
          messageEncoding=&quot;Text&quot; textEncoding=&quot;utf-8&quot; transferMode=&quot;Buffered&quot;
          useDefaultWebProxy=&quot;true&quot;&gt;
          &lt;readerQuotas maxDepth=&quot;32&quot; maxStringContentLength=&quot;8192&quot; maxArrayLength=&quot;16384&quot;
            maxBytesPerRead=&quot;4096&quot; maxNameTableCharCount=&quot;16384&quot; /&gt;
          &lt;security mode=&quot;None&quot;&gt;
            &lt;transport clientCredentialType=&quot;None&quot; proxyCredentialType=&quot;None&quot;
              realm=&quot;&quot; /&gt;
            &lt;message clientCredentialType=&quot;UserName&quot; algorithmSuite=&quot;Default&quot; /&gt;
          &lt;/security&gt;
        &lt;/binding&gt;
        &lt;binding name=&quot;TaskServiceSOAPBinding&quot; closeTimeout=&quot;00:01:00&quot;
          openTimeout=&quot;00:01:00&quot; receiveTimeout=&quot;00:10:00&quot; sendTimeout=&quot;00:01:00&quot;
          allowCookies=&quot;false&quot; bypassProxyOnLocal=&quot;false&quot; hostNameComparisonMode=&quot;StrongWildcard&quot;
          maxBufferSize=&quot;65536&quot; maxBufferPoolSize=&quot;524288&quot; maxReceivedMessageSize=&quot;65536&quot;
          messageEncoding=&quot;Text&quot; textEncoding=&quot;utf-8&quot; transferMode=&quot;Buffered&quot;
          useDefaultWebProxy=&quot;true&quot;&gt;
          &lt;readerQuotas maxDepth=&quot;32&quot; maxStringContentLength=&quot;8192&quot; maxArrayLength=&quot;16384&quot;
            maxBytesPerRead=&quot;4096&quot; maxNameTableCharCount=&quot;16384&quot; /&gt;
          &lt;security mode=&quot;None&quot;&gt;
            &lt;transport clientCredentialType=&quot;None&quot; proxyCredentialType=&quot;None&quot;
              realm=&quot;&quot; /&gt;
            &lt;message clientCredentialType=&quot;UserName&quot; algorithmSuite=&quot;Default&quot; /&gt;
          &lt;/security&gt;
        &lt;/binding&gt;
      &lt;/basicHttpBinding&gt;
    &lt;/bindings&gt;
    &lt;client&gt;
      &lt;endpoint address=&quot;http://ps5.mark.oracle.com:8001/integration/services/TaskQueryService/TaskQueryService2/*&quot;
        binding=&quot;basicHttpBinding&quot; bindingConfiguration=&quot;TaskQueryServiceSOAPBinding&quot;
        contract=&quot;TaskQueryService.TaskQueryService&quot; name=&quot;TaskQueryServicePortSAML&quot; /&gt;
      &lt;endpoint address=&quot;http://ps5.mark.oracle.com:8001/integration/services/TaskQueryService/TaskQueryService&quot;
        binding=&quot;basicHttpBinding&quot; bindingConfiguration=&quot;TaskQueryServiceSOAPBinding&quot;
        contract=&quot;TaskQueryService.TaskQueryService&quot; name=&quot;TaskQueryServicePort&quot; /&gt;
      &lt;endpoint address=&quot;http://ps5.mark.oracle.com:8001/integration/services/TaskService/TaskServicePort&quot;
        binding=&quot;basicHttpBinding&quot; bindingConfiguration=&quot;TaskServiceSOAPBinding&quot;
        contract=&quot;TaskService.TaskService&quot; name=&quot;TaskServicePort&quot; /&gt;
      &lt;endpoint address=&quot;http://ps5.mark.oracle.com:8001/integration/services/TaskService/TaskServicePortSAML/*&quot;
        binding=&quot;basicHttpBinding&quot; bindingConfiguration=&quot;TaskServiceSOAPBinding&quot;
        contract=&quot;TaskService.TaskService&quot; name=&quot;TaskServicePortSAML&quot; /&gt;
    &lt;/client&gt;
</pre>
<p>For each of the two bindings you will need to update the <strong>security</strong> section as shown above to use <strong>UserName</strong> credentials and the <strong>Default</strong> algorithm for message security.  Not transport, message &#8211; make sure you get the right one!</p>
<p>Also, which we are here, you might want to note a couple of things in the <strong>client</strong> section.  First, this is where you will go and change the endpoint addresses if you want to use a different server later on.  Second, notice that there are two endpoints for each service.  One is SAML and one is not.  We are going to use the ones that are not SAML in this example.  You can make a note of the value in the <strong>name</strong> attribute for each attribute.  We will need those later.</p>
<p>Ok, that takes care of our services.  Now let&#8217;s do the user interface.  We will start by customising the template (<strong>Site.Master</strong>) first.  You don&#8217;t strictly need to do this, but it is best to get rid of some of that extra stuff that might cuase confusion.  Here is the template I used:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;%@ Master Language=&quot;C#&quot; AutoEventWireup=&quot;true&quot; CodeBehind=&quot;Site.master.cs&quot; Inherits=&quot;WebApplication2.SiteMaster&quot; %&gt;

&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot;&gt;
&lt;head runat=&quot;server&quot;&gt;
    &lt;title&gt;&lt;/title&gt;
    &lt;link href=&quot;~/Styles/Site.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;
    &lt;asp:ContentPlaceHolder ID=&quot;HeadContent&quot; runat=&quot;server&quot;&gt;
    &lt;/asp:ContentPlaceHolder&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;form runat=&quot;server&quot;&gt;
    &lt;div class=&quot;page&quot;&gt;
        &lt;div class=&quot;header&quot;&gt;
            &lt;div class=&quot;title&quot;&gt;
                &lt;h1&gt;
                    Sample C#/ASP.NET Task form
                &lt;/h1&gt;
            &lt;/div&gt;
            &lt;div class=&quot;loginDisplay&quot;&gt;
                        [ &lt;a href=&quot;#&quot; id=&quot;HeadLoginView_HeadLoginStatus&quot;&gt;Sample&lt;/a&gt; ]
            &lt;/div&gt;
        &lt;/div&gt;
        &lt;div class=&quot;main&quot;&gt;
            &lt;asp:ContentPlaceHolder ID=&quot;MainContent&quot; runat=&quot;server&quot;/&gt;
        &lt;/div&gt;
        &lt;div class=&quot;clear&quot;&gt;
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class=&quot;footer&quot;&gt;
    &lt;/div&gt;
    &lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;

</pre>
<p>Note that we are running this at the server, not the client, for those who know enough about .Net to care about the difference <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Great, now le&#8217;s set up our main page.  Open up the <strong>Default.aspx</strong> page.  Here is how we want it to look:</p>
<p><a href="http://redstack.files.wordpress.com/2012/02/dotnet-tf16.png"><img class="alignnone size-full wp-image-2376" title="dotnet-tf16" src="http://redstack.files.wordpress.com/2012/02/dotnet-tf16.png?w=640&#038;h=250" alt="" width="640" height="250" /></a></p>
<p>If you want to, you can go and drag and drop everything into place and edit the properties.  But in the interest of making this easier for you, and to make sure the names of the UI components match the sample code below, it would be better to copy the code below into the source view.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;%@ Page Title=&quot;Home Page&quot; Language=&quot;C#&quot; MasterPageFile=&quot;~/Site.master&quot; AutoEventWireup=&quot;true&quot;
    CodeBehind=&quot;Default.aspx.cs&quot; Inherits=&quot;WebApplication2.QueryStringRecipient&quot; %&gt;

&lt;asp:Content ID=&quot;HeaderContent&quot; runat=&quot;server&quot; ContentPlaceHolderID=&quot;HeadContent&quot;&gt;
&lt;/asp:Content&gt;
&lt;asp:Content ID=&quot;BodyContent&quot; runat=&quot;server&quot; ContentPlaceHolderID=&quot;MainContent&quot;&gt;
    &lt;h2&gt;
        Task Details
    &lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td&gt;Task Title:&lt;/td&gt;&lt;td&gt;&lt;asp:TextBox ID=&quot;TextBox1&quot; runat=&quot;server&quot;
          Enabled=&quot;False&quot;&gt;&lt;/asp:TextBox&gt;&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;Task State:&lt;/td&gt;&lt;td&gt;&lt;asp:TextBox ID=&quot;TextBox2&quot; runat=&quot;server&quot;
          Enabled=&quot;False&quot;&gt;&lt;/asp:TextBox&gt;&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;Task Number:&lt;/td&gt;&lt;td&gt;&lt;asp:TextBox ID=&quot;TextBox3&quot; runat=&quot;server&quot;
          Enabled=&quot;False&quot;&gt;&lt;/asp:TextBox&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
    &lt;h2&gt;
        Payload
    &lt;/h2&gt;
&lt;table&gt;
  &lt;tr&gt;&lt;td&gt;Updatable Payload Data:&lt;/td&gt;&lt;td&gt;
      &lt;asp:TextBox ID=&quot;TextBox4&quot; runat=&quot;server&quot; AutoPostBack=&quot;True&quot;&gt;&lt;/asp:TextBox&gt;&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;td&gt;Read Only Payload Data:d Only Payload Data:&lt;/td&gt;&lt;td&gt;&lt;asp:TextBox ID=&quot;TextBox5&quot; runat=&quot;server&quot;
          Enabled=&quot;False&quot;&gt;&lt;/asp:TextBox&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
    &lt;h2&gt;
        Actions
    &lt;/h2&gt;
    &lt;asp:Button ID=&quot;Button1&quot; runat=&quot;server&quot; Text=&quot;OK&quot; onclick=&quot;Button1_Click&quot;  /&gt;
&lt;/asp:Content&gt;
</pre>
<p>Great, that&#8217;s the UI taken care of.  Now let&#8217;s put in the code behind it.  This is where the really interesting stuff happens <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Go ahead and open up your <strong>Default.aspx.cs</strong> file and put this code into it:</p>
<pre class="brush: csharp; title: ; notranslate">
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;

namespace WebApplication2
{

    public partial class QueryStringRecipient : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.Label lblInfo;

        private string taskId;
        private string ctxId;
        private TaskQueryService.workflowContextType ctx;
        private TaskQueryService.TaskQueryServiceClient tqs;
        private TaskQueryService.task task;

        private void Page_Load(object sender, System.EventArgs e)
        {

                // setup the automapper
                setupAutoMapper();

                // BPM will pass us the taskID and the ctx token
                // need to read these out of the http request's query string
                taskId = Request.QueryString[&quot;bpmWorklistTaskId&quot;];
                ctxId = Request.QueryString[&quot;bpmWorklistContext&quot;];
                //System.Diagnostics.Debug.WriteLine(&quot;Task ID:\n&quot; + taskId);
                //System.Diagnostics.Debug.WriteLine(&quot;Context:\n&quot; + ctxId);

                // if this is running outside of the worklist, just exit
                if (taskId == null)
                {
                    // looks like we dont have a task
                    return;
                }

                // set up the BPM context
                ctx = new TaskQueryService.workflowContextType();
                ctx.token = ctxId;

                // get the TQS
                tqs = new TaskQueryService.TaskQueryServiceClient(&quot;TaskQueryServicePort&quot;);

                // set up the request to get the task
                TaskQueryService.taskDetailsByIdRequestType getTaskRequest = new TaskQueryService.taskDetailsByIdRequestType();
                getTaskRequest.workflowContext = ctx;
                getTaskRequest.taskId = taskId;

                // get the task
                task = tqs.getTaskDetailsById(getTaskRequest);
                //System.Diagnostics.Debug.WriteLine(&quot;task title:\n&quot; + task.title);

                // populate the UI with task details
                TextBox1.Text = task.title;
                TextBox2.Text = task.systemAttributes.state.ToString();
                TextBox3.Text = task.systemAttributes.taskNumber;

                if (!Page.IsPostBack)
                {
                    // populate the UI with current payload data
                    System.Xml.XmlNode[] payload = (System.Xml.XmlNode[])task.payload;
                    TextBox4.Text = payload.ElementAt(0).ChildNodes.Item(1).InnerText;
                    TextBox5.Text = payload.ElementAt(1).ChildNodes.Item(0).InnerText;
                }

        }

        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }

        /// &lt;summary&gt;
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// &lt;/summary&gt;
        private void InitializeComponent()
        {
            this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion

        protected void Button1_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Debug.WriteLine(&quot;PRESSED OK&quot;);

            // update the task payload from the UI
            System.Xml.XmlNode[] payload = (System.Xml.XmlNode[])task.payload;
            payload.ElementAt(0).ChildNodes.Item(1).InnerText = TextBox4.Text;
            task.payload = payload;

            // get the TS
            TaskService.TaskServiceClient ts = new TaskService.TaskServiceClient(&quot;TaskServicePort&quot;);

            // update task
            TaskService.taskServiceContextTaskBaseType updateTaskRequest = new TaskService.taskServiceContextTaskBaseType();
            updateTaskRequest.workflowContext = AutoMapper.Mapper.Map&lt;TaskQueryService.workflowContextType, TaskService.workflowContextType&gt;(ctx);
            updateTaskRequest.task = AutoMapper.Mapper.Map&lt;TaskQueryService.task, TaskService.task&gt;(task);
            TaskService.task updatedTask = ts.updateTask(updateTaskRequest);

            // complete task
            TaskService.updateTaskOutcomeType updateTaskOutcomeRequest = new TaskService.updateTaskOutcomeType();
            updateTaskOutcomeRequest.workflowContext = AutoMapper.Mapper.Map&lt;TaskQueryService.workflowContextType, TaskService.workflowContextType&gt;(ctx);
            updateTaskOutcomeRequest.outcome = &quot;OK&quot;;
            updateTaskOutcomeRequest.Item = updatedTask;
            ts.updateTaskOutcome(updateTaskOutcomeRequest);

            // redirect to empty page
            Response.Redirect(&quot;/Empty.htm&quot;);
        }

        private void setupAutoMapper()
        {
            // set up the automapper
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.workflowContextType, TaskService.workflowContextType&gt;();
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.credentialType, TaskService.credentialType&gt;();

            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.task, TaskService.task&gt;();
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.attachmentType, TaskService.attachmentType&gt;();
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.callbackType, TaskService.callbackType&gt;();
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.customAttributesType, TaskService.customAttributesType&gt;();
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.documentType, TaskService.documentType&gt;();
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.EvidenceType, TaskService.EvidenceType&gt;();
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.processType, TaskService.processType&gt;();
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.commentType, TaskService.commentType&gt;();
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.identityType, TaskService.identityType&gt;();
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.ucmMetadataItemType, TaskService.ucmMetadataItemType&gt;();
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.systemAttributesType, TaskService.systemAttributesType&gt;();
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.actionType, TaskService.actionType&gt;();
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.displayInfoType, TaskService.displayInfoType&gt;();
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.shortHistoryTaskType, TaskService.shortHistoryTaskType&gt;();
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.assignmentContextType, TaskService.assignmentContextType&gt;();
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.assignmentContextTypeValueType, TaskService.assignmentContextTypeValueType&gt;();
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.collectionTargetType, TaskService.collectionTargetType&gt;();
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.collectionTargetActionType, TaskService.collectionTargetActionType&gt;();
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.preActionUserStepType, TaskService.preActionUserStepType&gt;();
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.systemMessageAttributesType, TaskService.systemMessageAttributesType&gt;();
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.flexfieldMappingType, TaskService.flexfieldMappingType&gt;();
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.scaType, TaskService.scaType&gt;();
            AutoMapper.Mapper.CreateMap&lt;TaskQueryService.UpdatableEvidenceAttributesType, TaskService.UpdatableEvidenceAttributesType&gt;();

            // check automapper config is valid
            AutoMapper.Mapper.AssertConfigurationIsValid();
        }

    }
}
</pre>
<p>Now let&#8217;s walk through and understand what is happening here. First we declare some variables that we will use.  Notice that some of these are from the namespaces we just created with our web service references.  We are going to be using the <strong>TaskQueryServiceClient</strong> and the <strong>workflowContextType</strong> (the credentials that we use to authenticate to the BPM server).  We also will be using the <strong>task</strong> object.  We define these at the class level as we want them to be avialable for the whole lifecycle of the page.</p>
<pre class="brush: csharp; title: ; notranslate">
        private string taskId;
        private string ctxId;
        private TaskQueryService.workflowContextType ctx;
        private TaskQueryService.TaskQueryServiceClient tqs;
        private TaskQueryService.task task;
</pre>
<p>As for the class, we are extending the class<strong> QueryStringRecipient</strong> and extending <strong>System.Web.UI.Page</strong>.  We say <strong>partial class</strong> because this class is already defined elsewhere (in the .Net libraries) and we are just adding some extra logic to it.  We use this class so that we can get access to the Query String from the HTTP Request.</p>
<pre class="brush: csharp; title: ; notranslate">
    public partial class QueryStringRecipient : System.Web.UI.Page
</pre>
<p>Now let&#8217;s take a look at the <strong>Page_Load</strong> method.  This gets run (as you might guess) when the page is loaded.  <strong><span style="color:#ff0000;">Every</span></strong> time the page is loaded &#8211; even post backs.  So you have to be careful not to overwrite data from the user in here.  This method is probably doing more work than it needs to on each page load the way I have it implemented &#8211; I guess you can optimise it some more <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   The first thing we need to do is set up the AutoMapper.  This is done by calling a convenience method <strong>setupAutoMapper()</strong> which is down the bottom of the source file to hide all that ugliness.  As I mentioned earlier, why and how we are using AutoMapper is discussed <a title="Updating a task from .Net" href="http://redstack.wordpress.com/2011/12/13/updating-a-task-from-net/">over here</a>.</p>
<pre class="brush: csharp; title: ; notranslate">
       private void Page_Load(object sender, System.EventArgs e)
        {

                // setup the automapper
                setupAutoMapper();
</pre>
<p>Next, we need to read the data that BPM sends us in the Query String.  When we configure a URI for a human task, like we did earlier in this post, BPM will append some data into the Query String for us.  This is the data we want to read now:</p>
<ul>
<li><strong>bpmWorklistTaskId</strong> is the taskId for the particular task instance we are interested in, and</li>
<li><strong>bpmWorklistConext</strong> is the BPM workflow context (security token) for the currently logged on user (logged on to BPM Workspace that is).</li>
</ul>
<p>With these two pieces of information, we are able to do everything we need to do to that task &#8211; get its details, payload, take an action on it (system or custom actions), update it, etc.  Here is the code to grab these from the Query String:</p>
<pre class="brush: csharp; title: ; notranslate">
                // BPM will pass us the taskID and the ctx token
                // need to read these out of the http request's query string
                taskId = Request.QueryString[&quot;bpmWorklistTaskId&quot;];
                ctxId = Request.QueryString[&quot;bpmWorklistContext&quot;];
</pre>
<p>Now we are ready to start talking to BPM.  We should first check that we actually got a task ID in the previous step, otherwise, we probably got called from outside of BPM Workspace, so we should just stop.</p>
<p>Then we can create our <strong>workflowContextType</strong>.  To use the details that BPM sent us, all we need to do is put them into the <strong>token</strong> property of this type, as you see below.  Then we are ready to create our <strong>TaskQueryServiceClient</strong>, note that we pass in to the constructor the name of the port we want &#8211; you wrote that down earlier, didn&#8217;t you? <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre class="brush: csharp; title: ; notranslate">
                // if this is running outside of the worklist, just exit
                if (taskId == null)
                {
                    // looks like we dont have a task
                    return;
                }

                // set up the BPM context
                ctx = new TaskQueryService.workflowContextType();
                ctx.token = ctxId;

                // get the TQS
                tqs = new TaskQueryService.TaskQueryServiceClient(&quot;TaskQueryServicePort&quot;);

</pre>
<p>Next, we want to retrieve the task.  We do this by calling the <strong>getTaskDetailsById()</strong> method on the <strong>TaskQueryServiceClient</strong>.  First, we need to set up our inputs.  This is done by creating a <strong>TaskQueryService.taskDetailsByIdRequestType</strong> and setting its <strong>workflowContext</strong> and <strong>taskId</strong> properties using the values we retrieved from the Query String earlier.  Then we can call the method.  We get back a <strong>task</strong> object.</p>
<pre class="brush: csharp; title: ; notranslate">
                // set up the request to get the task
                TaskQueryService.taskDetailsByIdRequestType getTaskRequest = new TaskQueryService.taskDetailsByIdRequestType();
                getTaskRequest.workflowContext = ctx;
                getTaskRequest.taskId = taskId;

                // get the task
                task = tqs.getTaskDetailsById(getTaskRequest);
</pre>
<p>Now, let&#8217;s read the data out of the task and populate our UI components.  Here we set the various text boxes to the task metadata we have chosen to show &#8211; title, status and task number.</p>
<p>Then we set the other group of text boxes (the ones for the payload) to those parts of the payload that we are interested in.  Of course, we don&#8217;t need to display everything, just the fields we are interested in.  In this example, we are going to take one of the two String fields from our <strong>dataObject1</strong> and the String <strong>dataObject2</strong>.  You can see that we access the payload through a <strong>System.ml.XmlNode[]</strong> &#8211; we can just cast the <strong>payload</strong> property of the <strong>task</strong> to this type and then we can easily read the payload data.  You can see from the code here that this is specific to the payload type &#8211; so in this case we do need to know the structure of the payload.  We could of course be a bit smarter and introspect the payload to find the data we want, but for now, hardcoding it will serve our purpose here.</p>
<p>Notice that we only want to populate the payload UI fields from the task payload the first time we load the page.  That is why we check <strong>if (!Page.IsPostBack)</strong> &#8211; otherwise any changes that the user had made would be overwritten when they post back those very changes.</p>
<pre class="brush: csharp; title: ; notranslate">
                // populate the UI with task details
                TextBox1.Text = task.title;
                TextBox2.Text = task.systemAttributes.state.ToString();
                TextBox3.Text = task.systemAttributes.taskNumber;

                if (!Page.IsPostBack)
                {
                    // populate the UI with current payload data
                    System.Xml.XmlNode[] payload = (System.Xml.XmlNode[])task.payload;
                    TextBox4.Text = payload.ElementAt(0).ChildNodes.Item(1).InnerText;
                    TextBox5.Text = payload.ElementAt(1).ChildNodes.Item(0).InnerText;
                }
</pre>
<p>That completes the <strong>Page_Load</strong> method.  Now, let&#8217;s take a look at what happens when the user clicks on the <strong>OK</strong> button on our page.  That button represents the <strong>OK</strong> (custom) action (or outcome) for that task.</p>
<p>The first thing we want to do is update the payload with the data that the user has entered in the form (if any).  Note that only one of the two payload fields that we are displaying is editable &#8211; you may remember when we created our task that we set only one of the two parameters to be editable.  That is why we are only taking the value from one of the <strong>TextBox</strong> components and updating the payload.  If you tried to update the non-updatable field, you would get an exception (as you might expect.)  Updating the payload is pretty mush the reverse of reading the payload:</p>
<pre class="brush: csharp; title: ; notranslate">
        protected void Button1_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Debug.WriteLine(&quot;PRESSED OK&quot;);

            // update the task payload from the UI
            System.Xml.XmlNode[] payload = (System.Xml.XmlNode[])task.payload;
            payload.ElementAt(0).ChildNodes.Item(1).InnerText = TextBox4.Text;
            task.payload = payload;
</pre>
<p>Now we have actually just updated the payload in our local copy of the task, we need to actually tell BPM to update the &#8216;real&#8217; task on the server.  We do this by calling the <strong>updateTask()</strong> method on the <strong>TaskService</strong>.  Just like we did earlier for the <strong>TaskQueryService</strong>, we create an instance of the <strong>TaskService</strong> and pass in the name of the port we want to use.</p>
<p>Then we create the input for the <strong>updateTask()</strong> method, which is the oddly named <strong>TaskService.taskServiceContextBaseType</strong>.  We can then populate it with the <strong>workflowContext</strong> we got from the Query String, and our newly updated <strong>task</strong> object.</p>
<p>Notice how we use the AutoMapper to convert between types in the two different namespaces created for our services.</p>
<p>The <strong>updateTask()</strong> method returns to us a new <strong>task</strong> object, which is represents the newly updated task object on the server.  We will need to use this new object to take any further actions on this task, our old <strong>task</strong> object is now no longer of any use to us.</p>
<pre class="brush: csharp; title: ; notranslate">
            // get the TS
            TaskService.TaskServiceClient ts = new TaskService.TaskServiceClient(&quot;TaskServicePort&quot;);

            // update task
            TaskService.taskServiceContextTaskBaseType updateTaskRequest = new TaskService.taskServiceContextTaskBaseType();
            updateTaskRequest.workflowContext = AutoMapper.Mapper.Map&lt;TaskQueryService.workflowContextType, TaskService.workflowContextType&gt;(ctx);
            updateTaskRequest.task = AutoMapper.Mapper.Map&lt;TaskQueryService.task, TaskService.task&gt;(task);
            TaskService.task updatedTask = ts.updateTask(updateTaskRequest);
</pre>
<p>Finally, we can complete the task by setting the outcome to &#8220;OK&#8221; using the <strong>updateTaskOutcome()</strong> method on the <strong>TaskService</strong>.  I won&#8217;t go through all the details, but you can see we create the input, populate it and the call the method.</p>
<p>Once this is done, we can redirect the browser to an empty page &#8211; just like the auto-generated ADF task forms do &#8211; so we maintain the normal user exerpience in the BPM Workspace.  This is done with the <strong>Response.Redirect(&#8220;/Empty.htm&#8221;)</strong> call on the last line.</p>
<pre class="brush: csharp; title: ; notranslate">
            // complete task
            TaskService.updateTaskOutcomeType updateTaskOutcomeRequest = new TaskService.updateTaskOutcomeType();
            updateTaskOutcomeRequest.workflowContext = AutoMapper.Mapper.Map&lt;TaskQueryService.workflowContextType, TaskService.workflowContextType&gt;(ctx);
            updateTaskOutcomeRequest.outcome = &quot;OK&quot;;
            updateTaskOutcomeRequest.Item = updatedTask;
            ts.updateTaskOutcome(updateTaskOutcomeRequest);

            // redirect to empty page
            Response.Redirect(&quot;/Empty.htm&quot;);
</pre>
<p>Now obviously we need to have such a page, so go ahead and create a new HTML page called <strong>Empty.htm</strong> and put the following code into it:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
    &lt;title&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Ok, so that completes our .Net project.  Go ahead and run itusing the &#8216;big green arrow&#8217; icon.  This will start up the embedded .Net server and run the project.  It will probably open a browser window and show you the page.  Just close this, we don&#8217;t need it.</p>
<p><a href="http://redstack.files.wordpress.com/2012/02/dotnet-tf17.png"><img class="alignnone size-full wp-image-2378" title="dotnet-tf17" src="http://redstack.files.wordpress.com/2012/02/dotnet-tf17.png?w=640" alt=""   /></a></p>
<p>Now, go and log in to BPM Workspace as an administrative user (like <strong>weblogic</strong>) and click on the <strong>Administration</strong> link in the top right corner.  Select the role this task is assigned to, mine is <strong>DotNetTest.Role1 </strong>and then click on the little &#8216;new&#8217; icon (highlighted in the image below) to assign some users to this role.</p>
<p><a href="http://redstack.files.wordpress.com/2012/02/dotnet-tf18.png"><img class="alignnone size-full wp-image-2379" title="dotnet-tf18" src="http://redstack.files.wordpress.com/2012/02/dotnet-tf18.png?w=640" alt=""   /></a></p>
<p>In the popup box, serach for <strong>weblogic</strong> and then move it across from <strong>Available</strong> to <strong>Selected</strong>.  Then click on <strong>OK</strong> and then on <strong>Apply</strong> to save this new mapping.  Now these tasks can be routed to the <strong>weblogic</strong> user.</p>
<p><a href="http://redstack.files.wordpress.com/2012/02/dotnet-tf19.png"><img class="alignnone size-full wp-image-2380" title="dotnet-tf19" src="http://redstack.files.wordpress.com/2012/02/dotnet-tf19.png?w=640" alt=""   /></a></p>
<p>Log out of the BPM Workspace and back in again so that it will refresh the mappings.  You should now see the <strong>DotNetTest</strong> tasks that you created earlier in Enterprise Manager sitting in <strong>weblogic</strong>&#8216;s queue.  Click on one of them and your shiny new .Net task form will load.  It should look a little like this:</p>
<p><a href="http://redstack.files.wordpress.com/2012/02/dotnet-tf1.png"><img class="alignnone size-full wp-image-2350" title="dotnet-tf1" src="http://redstack.files.wordpress.com/2012/02/dotnet-tf1.png?w=640&#038;h=510" alt="" width="640" height="510" /></a></p>
<p>Try it out!  You can update the payload data, and then click on the <strong>OK</strong> button to action the task.  After you do that, go take a look at the instance flow trace in Enterprise Manager and you can verify that the payload data was in fact changed.</p>
<p>So there you have it, a .Net task form fully integrated into the BPM Workspace application.  Enjoy!</p>
<p>Thanks go to Carlos Casares for giving me the incentive to write this in the first place and to my reader in Saint Petersburg for giving me the incentive to publish it.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2349/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2349/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2349&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/02/10/writing-a-human-task-ui-in-net-casp-net-or-in-fact-anything-other-than-adf/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/02/dotnet-tf1.png" medium="image">
			<media:title type="html">dotnet-tf1</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/02/dotnet-tf2.png" medium="image">
			<media:title type="html">dotnet-tf2</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/02/dotnet-tf3.png" medium="image">
			<media:title type="html">dotnet-tf3</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/02/dotnet-tf4.png" medium="image">
			<media:title type="html">dotnet-tf4</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/02/dotnet-tf5.png" medium="image">
			<media:title type="html">dotnet-tf5</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/02/dotnet-tf61.png" medium="image">
			<media:title type="html">dotnet-tf6</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/02/dotnet-tf7.png" medium="image">
			<media:title type="html">dotnet-tf7</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/02/dotnet-tf8.png" medium="image">
			<media:title type="html">dotnet-tf8</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/02/dotnet-tf9.png" medium="image">
			<media:title type="html">dotnet-tf9</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/02/dotnet-tf10.png" medium="image">
			<media:title type="html">dotnet-tf10</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/02/dotnet-tf11.png" medium="image">
			<media:title type="html">dotnet-tf11</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/02/dotnet-tf12.png" medium="image">
			<media:title type="html">dotnet-tf12</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/02/dotnet-tf13.png" medium="image">
			<media:title type="html">dotnet-tf13</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/02/dotnet-tf141.png" medium="image">
			<media:title type="html">dotnet-tf14</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/02/dotnet-tf151.png" medium="image">
			<media:title type="html">dotnet-tf15</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/02/dotnet-tf16.png" medium="image">
			<media:title type="html">dotnet-tf16</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/02/dotnet-tf17.png" medium="image">
			<media:title type="html">dotnet-tf17</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/02/dotnet-tf18.png" medium="image">
			<media:title type="html">dotnet-tf18</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/02/dotnet-tf19.png" medium="image">
			<media:title type="html">dotnet-tf19</media:title>
		</media:content>

		<media:content url="http://redstack.files.wordpress.com/2012/02/dotnet-tf1.png" medium="image">
			<media:title type="html">dotnet-tf1</media:title>
		</media:content>
	</item>
		<item>
		<title>SOA/BPM 11g purging whitepaper</title>
		<link>http://redstack.wordpress.com/2012/02/08/soabpm-11g-purging-whitepaper/</link>
		<comments>http://redstack.wordpress.com/2012/02/08/soabpm-11g-purging-whitepaper/#comments</comments>
		<pubDate>Tue, 07 Feb 2012 21:47:57 +0000</pubDate>
		<dc:creator>Mark Nelson</dc:creator>
				<category><![CDATA[group3]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[11g]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[purge]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://redstack.wordpress.com/?p=2345</guid>
		<description><![CDATA[The long awaited whitepaper on purging SOA/BPM 11g databases by Michael Bousamra with Deepak Arora and Sai Sudarsan Pogaru has been released and is available here. I recommend you take a look! &#160;<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2345&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>The long awaited whitepaper on purging SOA/BPM 11g databases by Michael Bousamra with Deepak Arora and Sai Sudarsan Pogaru has been released and is available <a href="http://www.oracle.com/technetwork/database/features/availability/soa11gstrategy-1508335.pdf">here</a>.</p>
<p>I recommend you take a look!</p>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/redstack.wordpress.com/2345/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/redstack.wordpress.com/2345/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=redstack.wordpress.com&#038;blog=4033274&#038;post=2345&#038;subd=redstack&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://redstack.wordpress.com/2012/02/08/soabpm-11g-purging-whitepaper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/409c6e974e720d9d5cbbc0b71b30af57?s=96&#38;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96" medium="image">
			<media:title type="html">markxnelson</media:title>
		</media:content>
	</item>
	</channel>
</rss>
