<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.0.4" -->
<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/"
	>

<channel>
	<title>CIBER Knowledge</title>
	<link>http://knowledge.ciber.nl/weblog</link>
	<description>Knowledge page of Ciber Netherlands</description>
	<pubDate>Mon, 12 Dec 2011 15:27:09 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.4</generator>
	<language>en</language>
			<item>
		<title>Enterprise Integration: ActiveMQ network of brokers</title>
		<link>http://knowledge.ciber.nl/weblog/?p=260</link>
		<comments>http://knowledge.ciber.nl/weblog/?p=260#comments</comments>
		<pubDate>Mon, 12 Dec 2011 15:27:08 +0000</pubDate>
		<dc:creator>roy.prins</dc:creator>
		
	<category>Java</category>
		<guid isPermaLink="false">http://knowledge.ciber.nl/weblog/?p=260</guid>
		<description><![CDATA[Introduction
ActiveMQ is a powerful and widely used open source messaging server, more commonly known as &#34;message broker&#34;. It&#8217;s being used often in Java based enterprise integration solutions, and provides &#34;Enterprise features&#34; like clustering, multiple message stores, and ability to use any database as a JMS persistence provider besides VM, cache, and journal persistency. For more [...]]]></description>
			<content:encoded><![CDATA[<h4>Introduction</h4>
<p>ActiveMQ is a powerful and widely used open source messaging server, more commonly known as &quot;message broker&quot;. It&#8217;s being used often in Java based enterprise integration solutions, and provides &quot;Enterprise features&quot; like clustering, multiple message stores, and ability to use any database as a JMS persistence provider besides VM, cache, and journal persistency. For more information on ActiveMQ, visit the website [1] and check the documentation. In general, JMS message brokers often are the heart of (enterprise) integration solutions.<br />
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="588">
<h4>Intermezzo</h4>
<p>There is a commercially supported version available at FuseSource[2], as part of the FuseSource stack consisting of an Enterprise Service Bus (based on ServiceMix), Message Broker (based on ActiveMQ), Mediation Router (based on Apache Camel) and web services stack (based on CXF).</p>
<p>Besides these products, FuseSource offers other products such as Fuse HQ, an infrastructure monitoring tool and FuseIDE, an eclipse base visual development tool for designing Camel routes.</p>
</td>
</tr>
</tbody>
</table>
<h4>&#160;</h4>
<h4>Concept: Network of Brokers</h4>
<p>One of the more interesting features of ActiveMQ is the ability to create a network of brokers, thus connecting and clustering multiple instances of the message broker on different servers in a network (or network of networks, on the internet, or somewhere in the cloud)</p>
<p>Networks of message brokers [3] in ActiveMQ work quite differently than more familiar models such as that of physical networks. In this article I will try to explain each component piece progressively moving up in complexity from a single broker through to a full blown network. At the end you should have basic understanding of how these networks behave and be able to reason about the interactions across different topologies. Please note that this is not intended as an ActiveMQ tutorial. Thus, no code examples or configuration snippets this time…</p>
<p>&#160;</p>
<h4>Concept: Producer-Consumer</h4>
<p>One of the key things in understanding broker-based messaging is that the production, or sending of a message, is disconnected from the consumption of that message. The broker acts as an intermediary, serving to make the method by which a method is consumed as well as the route that the message has travelled orthogonal to its production. You don’t really need to understand the entire postal system to know that when you post a letter in the big orange PostNL (or whatever it is called today) box, it eventually will arrive in the little box at the front of the recipient’s house. Same idea applies here.</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2011/12/001-producerConsumer1.gif"><img border="0" alt="001-producerConsumer1" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2011/12/001-producerConsumer1_thumb.gif" width="240" height="56" /></a></p>
<p>Producer and consumer are unaware of each other; only the broker they are connected to.</p>
<p>Connections are shown in the direction of where they were established from (i.e. Consumer connects to Broker).</p>
<p>Out of the box when a standard message is sent to a queue from a producer, it is sent to the broker, which persists it in its message store. By default this is in KahaDB, but it can configured to be stored in memory, which buys performance at the cost of reliability. Once the broker has confirmation that the message has been persisted in the journal (the terms journal and message store are often used interchangeably), it responds with an acknowledgement back to the producer. The thread sending the message from the producer is blocked at this time.</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2011/12/clip_image002.gif"><img border="0" alt="clip_image002" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2011/12/clip_image002_thumb.gif" width="240" height="192" /></a></p>
<p>On the consumption side, when a message listener is registered or a call to receive() is made, the broker creates a subscription to that queue. Messages are fetched from the message store and passed to the consumer; it’s usually done in batches, and the fetching is a lot more complex than simply read from disk, but that’s the general idea. </p>
<p>The consumer will usually at this stage process the message and subsequently acknowledge that the message has been consumed. The broker then updates the message store marking that message as consumed, or just deleting it (this depends on the persistence mechanism).</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2011/12/clip_image003.gif"><img border="0" alt="clip_image003" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2011/12/clip_image003_thumb.gif" width="240" height="186" /></a></p>
<p>So what happens when there are more than one consumer on a queue? All things being equal, and ignoring consumer priorities, the broker will in this case hand out incoming messages in a round-robin manner to each subscriber.</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2011/12/clip_image004.gif"><img border="0" alt="clip_image004" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2011/12/clip_image004_thumb.gif" width="240" height="158" /></a></p>
<h4>&#160;</h4>
<h4>Concept: Store-and-forward</h4>
<p>Now let’s scale up to two brokers, Broker1 and Broker2. In ActiveMQ a network of brokers is set up by connecting a networkConnector to a transportConnector (think of it as a socket listening on a port). A networkConnector is an outbound connection from one broker to another.</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2011/12/clip_image005.gif"><img border="0" alt="clip_image005" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2011/12/clip_image005_thumb.gif" width="240" height="177" /></a></p>
<p>When a subscription is made to a queue on Broker2, that broker tells the other brokers that it knows about (in our case, just Broker1) that it is interested in that queue; another subscription is now made on Broker1 with Broker2 as the consumer. As far as an ActiveMQ broker is concerned there is no difference between a standard client that consumes messages and another broker acting on behalf of a client. They are treated in exactly the same manner.</p>
<p>So now that Broker1 sees a subscription from Broker2, what happens? The result is a hybrid of the two producer and consumer behaviors. Broker1 is the producer, and Broker2 the consumer. Messages are fetched from Broker1?s message store, passed to Broker2. Broker2 processes the message by “store”-ing it in its journal, and acknowledges consumption of that message. Broker1 then marks the message as consumed.</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2011/12/clip_image006.gif"><img border="0" alt="clip_image006" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2011/12/clip_image006_thumb.gif" width="240" height="186" /></a></p>
<p>The simple consume case applies as Broker2 “forwards” the message to its consumers, as if the message was produced directly into it. Neither the producer nor consumer are aware that a network of brokers exists, it is orthogonal to their functionality – a key driver of this style of messaging.</p>
<h4>Concept: Local and remote consumers</h4>
<p>It has already been noted that as far as a broker is concerned, all subscriptions are equal. To it there is no difference between a local “real” consumer, and another broker that is going to forward those messages on. Hence incoming messages will be handed out round-robin as usual. In case of 2 consumers (Consumer1 on Broker1, and Consumer2 on Broker2) if messages are produced to Broker1, both consumers will each receive the same number of messages.</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2011/12/clip_image007.gif"><img border="0" alt="clip_image007" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2011/12/clip_image007_thumb.gif" width="240" height="121" /></a></p>
<p>A networkConnector is unidirectional by default, which means that the broker initiating the connector acts as a client, forwarding its subscriptions. Broker2 in this case subscribes on behalf of its consumers to Broker1. Broker2 however will not be made aware of subscriptions on Broker1. networkConnectors can however be made duplex, such that subscriptions are passed in both directions.</p>
<p>So let’s take it one step further with a network that demonstrates why it is a bad idea to connect brokers to each other in an ad-hoc manner. Let’s add Broker3 into the mix such that it connects into Broker1, and Broker2 sets up a second networkConnector into Broker3. All networkConnectors are set up as duplex.</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2011/12/clip_image008.gif"><img border="0" alt="clip_image008" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2011/12/clip_image008_thumb.gif" width="240" height="133" /></a></p>
<p>This is a common approach people take when they first encounter broker networks and want to connect a number of brokers to each other, as they are naturally used to the internet model of network behaviour where traffic is routed down the shortest path. If we think about it from first principles, it quickly becomes apparent that is not the best approach. </p>
<p>Let&#8217;s examine what happens when a consumer connects to Broker2.</p>
<ul>
<li>Broker2 echoes the subscription to the brokers it knows about - Broker1 and Broker3.</li>
<li>Broker3 echoes the subscription down all networkConnectors other than the one from which the request came; it subscribes to Broker1.</li>
<li>A producer sends messages into Broker1.</li>
<li>Broker1 stores and forwards messages to the active subscriptions on its transportConnector; half to Broker2, and half to Broker3.</li>
<li>Broker2 stores and forwards to its consumer.</li>
<li>Broker3 stores and forwards to Broker2.</li>
</ul>
<p>Eventually everything ends up at the consumer, but some messages ended up needlessly travelling Broker1-&gt;Broker3-&gt;Broker2, while the others went by the more direct route Broker1-&gt;Broker2. Add more brokers into the mix, and the store-and-forward traffic increases exponentially as messages flow through any number of weird and wonderful routes.</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2011/12/clip_image009.gif"><img border="0" alt="clip_image009" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2011/12/clip_image009_thumb.gif" width="240" height="123" /></a></p>
<p>The message flow overview above shows lots of unnecessary store-and-forward.</p>
<p>Fortunately, it is possible to avoid this by employing other topologies, such as hub and spoke.</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2011/12/clip_image010.gif"><img border="0" alt="clip_image010" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2011/12/clip_image010_thumb.gif" width="240" height="192" /></a></p>
<p>Better, isn&#8217;t it? A message can flow between any of the numbered brokers via the hub and a maximum of 3 hops.</p>
<p>You can also use a more nuanced approach that includes considerations such as unidirectional networkConnectors that pass only a certain subscriptions, or reducing consumer priority such that further consumers have a lower priority than closer ones.</p>
<p>Each network design needs to be considered separately and trades off considerations such message load, amount of hardware at your disposal, latency (number of hops) and reliability. When you understand how all the parts fit and think about the overall topology from first principles, it&#8217;s much easier to work through.</p>
<h4>Resources</h4>
<p>[1] Apache ActiveMQ : http://activemq.apache.org</p>
<p>[2] FuseSource : http://www.fusesource.com</p>
<p>[3] Network of brokers : http://activemq.apache.org/networks-of-brokers.html</p>
]]></content:encoded>
			<wfw:commentRSS>http://knowledge.ciber.nl/weblog/?feed=rss2&amp;p=260</wfw:commentRSS>
		</item>
		<item>
		<title>Integrating Activiti BPM with Mule and Camel</title>
		<link>http://knowledge.ciber.nl/weblog/?p=259</link>
		<comments>http://knowledge.ciber.nl/weblog/?p=259#comments</comments>
		<pubDate>Mon, 28 Nov 2011 08:10:00 +0000</pubDate>
		<dc:creator>roy.prins</dc:creator>
		
	<category>Java</category>
		<guid isPermaLink="false">http://knowledge.ciber.nl/weblog/?p=259</guid>
		<description><![CDATA[&#160;
Introduction
Today there are many excellent frameworks and components for developing (enterprise) integration solutions. Typical integration components are BPM (Business Process Management), ESB (Enterprise Service Bus) and message brokers. Quite often, these components complement each other, each with its own specific role, as can be seen at the image below.

The role of the BPM component can [...]]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<h5><a name="_Toc309829170">Introduction</a></h5>
<p><a name="_Toc185920583"><font color="#666666">Today there are many excellent frameworks and components for developing (enterprise) integration solutions. Typical integration components are BPM (Business Process Management), ESB (Enterprise Service Bus) and message brokers. Quite often, these components complement each other, each with its own specific role, as can be seen at the image below.</font></a></p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2011/11/SOA-ESB-BPM.png"><img alt="SOA-ESB-BPM" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2011/11/SOA-ESB-BPM_thumb.png" width="290" height="183" /></a></p>
<p>The role of the BPM component can vary based on your needs or applications requirements. It can perform workflow tasks, business process tasks and orchestration tasks. Although these tasks (and their implementations) may differ, there&#8217;s usually one obvious commonality: the need to interact with the other components.</p>
<p>As for the BPM part, there&#8217;s a new kid in town and is here to stay. I&#8217;m talking about Activiti. This article shows how Activiti plays nicely with other components, such as an ESB (such as Mule) and a message router (like Apache Camel).</p>
<h5><a name="_Toc309829170">About Activiti</a></h5>
<p>Activiti is an open source workflow and Business Process Management (BPM) platform, and currently part of Alfresco, replacing jBPM as its default workflow framework. Its core is a lightweight BPMN 2 process engine for Java. It&#8217;s distributed under the Apache license. Activiti runs stand-alone or embedded in any Java (web) application using it&#8217;s excellent Spring support.</p>
<p>The Activiti engine provides a powerful Java API that makes it easy to deploy process definitions, implement custom logic and unit test processes. If you want to connect remotely to the Activiti engine there&#8217;s a REST API to communicate with the process engine. But what if you want to start a new process instance by sending a JMS message, or invoke a web service from a BPMN 2.0 process? This is a much more real-life scenario.</p>
<h5><a name="_Toc309829171">BPM integration with Web Services</a></h5>
<p>By default, the BPMN 2.0 specification provides support for doing web service calls via a specific web service task. The Activiti engine provides support for a web service task, but it may be a bit cumbersome to implement due to the large amount of additional XML elements needed. And this task does only SOAP web service calls.</p>
<p>Luckily the Activiti community came to the rescue. In the latest releases of Activiti you&#8217;ll see two interesting contributed Activiti modules, one for Mule ESB integration and one for Apache Camel integration. If you are interested, just download the latest version and play around, or you can check out the Activiti source and take a look for yourself. For more information on building from source, please read the <a href="http://docs.codehaus.org/display/ACT/Developers+Guide#DevelopersGuide-Buildingthedistribution">&#8216;Building the distribution&#8217; wiki page</a>. </p>
<p>Now let&#8217;s walk through some examples to get an overview of these modules.</p>
<h5><a name="_Toc309829173">About Mule</a></h5>
<p>Let&#8217;s start with the Mule ESB. Mule has out of the box BPM support, including an implementation for Activiti. This is not really a surprise, knowing that Activiti and MuleSoft work closely together on supporting each other&#8217;s products. </p>
<h5><a name="_Toc309829174">Mule integration</a></h5>
<p>With the Activiti Mule ESB integration there are two deployment options:</p>
<li>Option one is to run both Mule and Activiti in one Spring container and the communication between Mule ESB and the Activiti Engine uses the Activiti Java API. </li>
<li>The second deployment option is to run Mule ESB standalone and let Mule ESB communicate with the Activiti engine through its REST API. The only difference is the Activiti connector, which is defined in the Mule configuration.</li>
<p>Below examples of Mule configuration for both deployment options.   <br /><i></i></p>
<p><i>Embedded configuration:</i></p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="588">
<p><font size="1" face="MS Reference Sans Serif">&lt;mule </font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160; xmlns=&quot;http://www.mulesoft.org/schema/mule/core&quot; </font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160; xmlns:activiti=&quot;http://www.mulesoft.org/schema/mule/activiti-embedded&quot;&gt; </font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160; &lt;activiti:connector </font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160; name=&quot;activitiServer&quot; </font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160; repositoryService-ref=&quot;repositoryService&quot; </font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160; runtimeService-ref=&quot;runtimeService&quot; </font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160; taskService-ref=&quot;taskService&quot; </font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160; historyService-ref=&quot;historyService&quot; /&gt; </font></p>
<p><font size="1" face="MS Reference Sans Serif">&lt;!&#8211; Rest of the code shown in the next snippets &#8211;&gt; </font></p>
<p><font size="1" face="MS Reference Sans Serif">&lt;/mule&gt;</font></p>
</td>
</tr>
</tbody>
</table>
<p>&#160;</p>
<p><i>Remote configuration:</i></p>
<p>
<table border="0" cellspacing="0" cellpadding="0" width="508">
<tbody>
<tr>
<td width="506">
<p><font size="1" face="MS Reference Sans Serif">&lt;mule </font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160; xmlns=&quot;http://www.mulesoft.org/schema/mule/core&quot; </font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160; xmlns:activiti=&quot;http://www.mulesoft.org/schema/mule/activiti-remote&quot; </font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160; &lt;activiti:connector </font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160; name=&quot;activitiServer&quot; </font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160; activitiServerURL=&quot;http://localhost:8080/activiti-rest/service/&quot; </font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160; username=&quot;kermit&quot; </font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160; password=&quot;kermit&quot; /&gt; </font></p>
<p><font size="1" face="MS Reference Sans Serif">&lt;/mule&gt;</font></p>
</td>
</tr>
</tbody>
</table>
<p>The embedded configuration references Spring beans defined in the Activiti engine Spring configuration for the Mule ESB to communicate with the Activiti engine. The remote configuration defines the location of the REST API and the authentication parameters so Mule can use the Activiti REST API to communicate with the Activiti engine. For more information on Mule configuration, please take a look at the <a href="http://www.mulesoft.org">MuleSoft</a> website. Access to the developer documentation requires signing up, but is free.</p>
<p>Now let&#8217;s actually do something with the Activiti connector. Let&#8217;s kick off a new process instance of a simple BPMN 2.0 process using a JMS message. First, we have to set up the Activiti connector infrastructure in Mule, which is detailed below.</p>
<p><i><font color="#666666">Activiti connector configuration:</font></i><br />
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="588">
<p><font size="1" face="MS Reference Sans Serif">&lt;jms:activemq-connector name=&quot;jmsConnector&quot; brokerURL=&quot;tcp://localhost:61616&quot;/&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&lt;flow name=&quot;CreateActivitiProcessFlow&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160; &lt;jms:inbound-endpoint queue=&quot;in.create&quot; /&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160; &lt;logger message=&quot;Received message #[payload]&quot; level=&quot;INFO&quot; /&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160; &lt;activiti:create-process parametersExpression=&quot;#[payload]&quot; /&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160; &lt;jms:outbound-endpoint queue=&quot;out.create&quot; /&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&lt;/flow&gt;</font></p>
</td>
</tr>
</tbody>
</table>
<p>Note that the &quot;flow&quot; tags represent a Mule message flow. When a message is sent to the &#8216;in.create&#8217; queue, the message is logged using the #[payload] expression. Next, the Mule ESB Activiti module is invoked to create a new process instance. In this example, the JMS message is expected to be a MapMessage and the Map is retrieved to get the process parameters with the parametersExpression. To be able to start a process instance, we have to specify a &#8216;processDefinitionKey&#8217; property in the MapMessage. </p>
<p>The additional properties specified in the MapMessage are all translated to process variables. Finally the process instance gets created and the newly created process instance object is sent to another JMS queue (out.create). This JMS message (which is an ObjectMessage) contains among others the process instance ID that can be used to retrieve information such like process variables etc.</p>
<p>To test this example we need a bit of JMS plumbing code. If you&#8217;re interested in running the code examples yourself, you can check out the code from the Google Code repository, listed at the bottom of this article.</p>
<p>In addition to creating new process instances, you can also set new process variables, signal a process instance etc. For a full overview of BPM functionalities in Mule, you can read the Mule ESB Activiti BPM <a href="http://www.mulesoft.org/activiti-bpm">documentation</a>.<br />
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="582">
<p><font color="#4f81bd"><strong>Intermezzo</strong></font></p>
<p>I already mentioned that Activiti uses the BPMN 2.0 specification for modeling process definitions. This is great, since you won&#8217;t be tied to a vendor specific or closed specification. </p>
<p>Mule does have its own DSL for specifying Mule message flows, but it tries to implement the Enterprise Integration Patterns by Gregor Hohpe and Bobby Woolf. In fact, many tools and framework are based on these patterns, like Apache Camel, ServiceMix/Fuse and Spring Integration (just to name a few).</p>
<p>These patterns allow us to graphically define message flows. For more information on Enterprise Integration Patterns, take a look at <a href="http://www.eaipatterns.com">http://www.eaipatterns.com</a>. In this article, you will find some examples explained using the patterns. </p>
</td>
</tr>
</tbody>
</table>
<h5><a name="_Toc309829175"><strong>Communication</strong></a></h5>
<p><a name="_Toc309829175"><strong></strong></a>In addition to communicating with the Activiti engine from the Mule ESB, it&#8217;s also possible to send messages from a BPMN process to the Mule ESB. This opens up possibilities to send for example JMS messages, or create advanced integration logic from a BPMN process. The current implementation is limited to the embedded mode for this piece of functionality, but there&#8217;s no reason why this can&#8217;t be expanded to also supporting the standalone or remote setup. Let&#8217;s look at a simple Activiti process definition, containing a Mule send task.<br />
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="582">
<p><font size="1" face="MS Reference Sans Serif">&lt;definitions xmlns=&quot;http://www.omg.org/spec/BPMN/20100524/MODEL&quot;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160; xmlns:activiti=&quot;http://activiti.org/bpmn&quot;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160; targetNamespace=&quot;http://www.activiti.org&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160; &lt;process id=&quot;helloMuleWorld&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160; &lt;startEvent id=&quot;Start&quot; /&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160; &lt;sequenceFlow sourceRef=&quot;Start&quot; targetRef=&quot;sendToMuleTask&quot; /&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160; &lt;sendTask id=&quot;sendToMuleTask&quot; activiti:type=&quot;mule&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160; &lt;extensionElements&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160;&#160; &lt;activiti:field name=&quot;endpointUrl&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif"></font></p>
<p><font size="1" face="MS Reference Sans Serif"></font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;activiti:string&gt;vm://in&lt;/activiti:string&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160;&#160; &lt;/activiti:field&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160;&#160; &lt;activiti:field name=&quot;language&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;activiti:string&gt;juel&lt;/activiti:string&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160;&#160; &lt;/activiti:field&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160;&#160; &lt;activiti:field name=&quot;payloadExpression&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;activiti:expression&gt;${processVariable1}</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160;&#160; &lt;/activiti:field&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160;&#160; &lt;activiti:field name=&quot;resultVariable&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;activiti:string&gt;processVariable2&lt;/activiti:string&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160;&#160; &lt;/activiti:field&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160; &lt;/extensionElements&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160; &lt;/sendTask&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160; &lt;sequenceFlow sourceRef=&quot;sendToMuleTask&quot; targetRef=&quot;End&quot; /&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160; &lt;endEvent id=&quot;End&quot; /&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160; &lt;/process&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&lt;/definitions&gt;</font></p>
</td>
</tr>
</tbody>
</table>
<p>In this example we send a message to the in queue of the JVM transport in Mule (which is a JVM messaging component). The message contains the value of the processVariable1 process variable and the response (we use a request-response exchange pattern in the Mule flow configuration) is written to a new process variable named processVariable2.</p>
<p>The Mule message flow configuration listening to the JVM queue looks like this.<br />
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="582">
<p><font size="1" face="MS Reference Sans Serif">&lt;flow name=&quot;HelloMuleWorldFlow&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160; &lt;vm:inbound-endpoint path=&quot;in&quot; exchange-pattern=&quot;request-response&quot; /&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160; &lt;logger message=&quot;Received message #[payload]&quot; level=&quot;INFO&quot; /&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160; &lt;script:transformer&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160; &lt;script:script engine=&quot;groovy&quot;&gt;return &#8216;world&#8217;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&lt;/script:transformer&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&lt;/flow&gt;</font></p>
</td>
</tr>
</tbody>
</table>
<p>The message is logged and a simple Groovy script returns a response message with the content &#8216;world&#8217;. This shows how easy it is to send a message from a BPMN process to the Mule ESB. </p>
<p>Now let&#8217;s take a look at the Apache Camel implementation.</p>
<h5><a name="_Toc309829177">About Camel</a></h5>
<p>Apache Camel is a lightweight integration framework which implements all Enterprise Integration Patterns. Thus, you can easily integrate different applications using the required patterns. You can use Java, Spring XML, Scala or Groovy. Besides that, own custom components can be created very easily.</p>
<p>You can deploy Apache Camel as standalone application, in a web container (e.g. Tomcat or Jetty), in a JEE application Server (e.g. JBoss AS or WebSphere AS), in an OSGi environment or in combination with a Spring container.</p>
<h5><a name="_Toc309829178">Camel integration</a></h5>
<p>As mentioned before, there is another great and widely used integration framework available in Activiti to be used: Apache Camel. You should understand that both Mule ESB and Apache Camel are capable of doing lots of similar integration logic. </p>
<p>Of course, there are plenty of differences. One of the most important difference is that Mule is usually considered a product, while Camel is much more of a framework. As for Mule, this is real ESB with the usual functionalities. Camel is technically not an ESB, although it provides much of the same integration logic.</p>
<p>Another difference is that the Camel integration always runs embedded with the Activiti Engine in the same Spring configuration. So you have to define a Spring XML configuration that includes an Activiti Engine config and a Camel context config. To be able to start new process instances from Camel the deployed process definition key is made available in the Camel context as you can see in the following snippet.<br />
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="576">
<p><font size="1" face="MS Reference Sans Serif">&lt;beans </font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160; xmlns=&quot;http://www.springframework.org/schema/beans&quot;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160; xmlns:camel=&quot;http://camel.apache.org/schema/spring&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160; &lt;bean </font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160; id=&quot;activemq&quot;&#160; </font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160; class=&quot;org.apache.activemq.camel.component.ActiveMQComponent&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160; &lt;property name=&quot;brokerURL&quot; value=&quot;tcp://localhost:61616&quot; /&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160; &lt;/bean&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160; &lt;bean id=&quot;camel&quot; class=&quot;org.activiti.camel.CamelBehaviour&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160; &lt;constructor-arg index=&quot;0&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160; &lt;list&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;bean class=&quot;org.activiti.camel.SimpleContextProvider&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;constructor-arg index=&quot;0&quot; value=&quot;helloCamelProcess&quot; /&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;constructor-arg index=&quot;1&quot; ref=&quot;camelProcess&quot; /&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/bean&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160; &lt;/list&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160; &lt;/constructor-arg&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160; &lt;/bean&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160; &lt;camelContext </font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160; id=&quot;camelProcess&quot; </font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160; xmlns=&quot;http://camel.apache.org/schema/spring&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160; &lt;packageScan&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160; &lt;package&gt;nl.ciber.knowledgeblog.camel&lt;/package&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160; &lt;/packageScan&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160; &lt;/camelContext&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&lt;/beans&gt;</font></p>
</td>
</tr>
</tbody>
</table>
<p>In this configuration we create a connection to an ActiveMQ broker we&#8217;ll use later on. Next, a SimpleContextProvider is defined that connects a deployed process definition on the Activiti engine to a Camel context. You can define a list of SimpleContextProviders for each process definition that you want to connect to a Camel context. In the last part a Camel context is defined that scans for RouteBuilder classes in the configured package.</p>
<p>With the infrastructure in place we can now define integration logic in a Camel RouteBuilder class using fluent API.</p>
<p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="576">
<p><font size="1" face="MS Reference Sans Serif">public class CamelHelloRoute extends RouteBuilder {</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160; @Override</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160; public void configure() throws Exception {</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160; from(&quot;activemq:in.create&quot;)</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160;&#160;&#160; .log(LoggingLevel.INFO, &quot;Received message ${body}&quot;)</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160;&#160;&#160; .to(&quot;activiti:helloCamelProcess&quot;)</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160;&#160;&#160; .log(LoggingLevel.INFO, &quot;Received message ${body}&quot;)</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160;&#160;&#160; .to(&quot;activemq:out.create&quot;);</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160; from(&quot;activiti:helloCamelProcess:serviceTask1&quot;)</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160;&#160;&#160; .log(LoggingLevel.INFO, &quot;Received message on service task ${property.var1}&quot;)</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160;&#160;&#160; .setProperty(&quot;var2&quot;).constant(&quot;world&quot;)</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160;&#160;&#160;&#160;&#160; .setBody().properties();</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160; }</font></p>
<p><font size="1" face="MS Reference Sans Serif">}</font></p>
</td>
</tr>
</tbody>
</table>
<p>There are two Camel routes defined in this RouteBuilder class. The first Camel route listens for new messages arriving at the &#8216;in.create&#8217; ActiveMQ queue. The message is logged and a new instance of the &#8216;helloCamelProcess&#8217; process definition is created and the process instance id is logged and sent to the &#8216;out.create&#8217; queue of ActiveMQ. Now we can send a JMS message to the &#8216;in.create&#8217; queue and all entries of the map are set as new process variables on the instance of the &#8216;helloCamelProcess&#8217; process, and the process instance ID is sent to the &#8216;out.create&#8217; queue.</p>
<p>In the second route the Java service task logic of the &#8216;helloCamelProcess&#8217; process is implemented (we&#8217;ll see in a bit how this is implemented in BPMN 2.0 XML). First the process variable var1 is logged and then a new process variable var2 is created on the process instance. Of course we can implement far more complex integration logic here, like sending a JMS message or invoking a web service call.    </p>
<p>Now let&#8217;s look how the logic of the Java service task (serviceTask1) is delegated to this Camel route.</p>
<p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="576">
<p><font size="1" face="MS Reference Sans Serif">&lt;definitions targetnamespace=&quot; http://activiti.org&quot;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160; xmlns:activiti=&quot;http://activiti.org/bpmn&quot;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160; xmlns=&quot;http://www.omg.org/spec/BPMN/20100524/MODEL&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160; &lt;process id=&quot;helloCamelProcess&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160; &lt;startevent id=&quot;Start&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160; &lt;sequenceflow sourceref=&quot;start&quot; targetref=&quot;serviceTask1&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160; &lt;servicetask activiti:delegateexpression=&quot;${camel}&quot; id=&quot;serviceTask1&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160; &lt;sequenceflow sourceref=&quot;serviceTask1&quot; targetref=&quot;waitState&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160; &lt;receivetask id=&quot;waitState&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160; &lt;sequenceflow sourceref=&quot;waitState&quot; targetref=&quot;End&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160;&#160;&#160; &lt;endevent id=&quot;End&quot;&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&#160; &lt;/process&gt;</font></p>
<p><font size="1" face="MS Reference Sans Serif">&lt;/definitions&gt;</font></p>
</td>
</tr>
</tbody>
</table>
<p>As you can see the Camel route delegation is really simple. We only have to reference the CamelBehavior Spring bean (camel) we defined earlier. In the source code you can find a unit test to run the full example.</p>
<h5>C<a name="_Toc309829179">onclusion</a></h5>
<p>With the availability of both integration modules there is a wide range of integration options that can be leveraged. The BPMN 2.0 specification already supports the web service task, and the Activiti engine adds a powerful Java service task, but now a whole range of ESB transports and enterprise integration patterns are available for you to be used.</p>
<h5><a name="_Toc309829180">Resources</a></h5>
<p>Activiti project website : <a href="http://www.activiti.org">http://www.activiti.org</a></p>
<p>BPMN 2.0 specification : <a href="http://www.omg.org/spec/BPMN/2.0/">http://www.omg.org/spec/BPMN/2.0/</a></p>
<p>Mule ESB : <a href="http://www.mulesoft.org">http://www.mulesoft.org</a></p>
<p>Apache Camel : <a href="http://camel.apache.org">http://camel.apache.org</a></p>
<p>Source code: <tt><a href="https://activiti-integration-demo.googlecode.com/svn/trunk/"><font face="Trebuchet MS">https://activiti-integration-demo.googlecode.com/svn/trunk/</font></a></tt></p>
]]></content:encoded>
			<wfw:commentRSS>http://knowledge.ciber.nl/weblog/?feed=rss2&amp;p=259</wfw:commentRSS>
		</item>
		<item>
		<title>Real Time Saver</title>
		<link>http://knowledge.ciber.nl/weblog/?p=258</link>
		<comments>http://knowledge.ciber.nl/weblog/?p=258#comments</comments>
		<pubDate>Thu, 25 Nov 2010 10:37:55 +0000</pubDate>
		<dc:creator>John Minkjan</dc:creator>
		
	<category>Java</category>
		<guid isPermaLink="false">http://knowledge.ciber.nl/weblog/?p=258</guid>
		<description><![CDATA[We all have these projects were a bunch of excel sheets are made available to you by the business. “All the business logic is in there Have Fun” . Next you will spend days trying to figure out how stuff works. You can save a lot of time by using an excel plug in “trace” [...]]]></description>
			<content:encoded><![CDATA[<p>We all have these projects were a bunch of excel sheets are made available to you by the business. “All the business logic is in there Have Fun” . Next you will spend days trying to figure out how stuff works. You can save a lot of time by using an excel plug in “trace” made by Christopher Teh Boon Sung: <a title="http://www.christopherteh.com/trace/" href="http://www.christopherteh.com/trace/">http://www.christopherteh.com/trace/</a>.</p>
<p>It make great graphical overview on how all the cells are connected to each other. This can save you several days!</p>
<p>Till Next Time</p>
]]></content:encoded>
			<wfw:commentRSS>http://knowledge.ciber.nl/weblog/?feed=rss2&amp;p=258</wfw:commentRSS>
		</item>
		<item>
		<title>OBIEE11g Installation on 32 bits XP-pro IV</title>
		<link>http://knowledge.ciber.nl/weblog/?p=257</link>
		<comments>http://knowledge.ciber.nl/weblog/?p=257#comments</comments>
		<pubDate>Mon, 16 Aug 2010 07:47:17 +0000</pubDate>
		<dc:creator>John Minkjan</dc:creator>
		
	<category>Oracle</category>
	<category>Business Intelligence</category>
		<guid isPermaLink="false">http://knowledge.ciber.nl/weblog/?p=257</guid>
		<description><![CDATA[This will be a 4 part series:
Part I: http://knowledge.ciber.nl/weblog/?p=254
Part II: http://knowledge.ciber.nl/weblog/?p=255
Part III: http://knowledge.ciber.nl/weblog/?p=256
Part IV: http://knowledge.ciber.nl/weblog/?p=257&#160;
Navigate to D:\MW_OBI11G\user_projects\domains\bifoundation_domain\servers\bi_server1\security, check if there is a file called: boot.properties
 
If not, make it using a text editor and enter :
 




username=weblogic
password=Password



Do the same for D:\MW_OBI11G\user_projects\domains\bifoundation_domain\servers\AdminServer\security
 
Reboot your BI-server.
Let’s make a couple off handy start and stop .bat files:
01 Start [...]]]></description>
			<content:encoded><![CDATA[<p align="left">This will be a 4 part series:</p>
<p align="left">Part I: <a title="http://knowledge.ciber.nl/weblog/?p=254" href="http://knowledge.ciber.nl/weblog/?p=254">http://knowledge.ciber.nl/weblog/?p=254</a></p>
<p align="left">Part II: <a title="http://knowledge.ciber.nl/weblog/?p=255" href="http://knowledge.ciber.nl/weblog/?p=255">http://knowledge.ciber.nl/weblog/?p=255</a></p>
<p align="left">Part III: <a title="http://knowledge.ciber.nl/weblog/?p=256" href="http://knowledge.ciber.nl/weblog/?p=256">http://knowledge.ciber.nl/weblog/?p=256</a></p>
<p align="left">Part IV: <a title="http://knowledge.ciber.nl/weblog/?p=257" href="http://knowledge.ciber.nl/weblog/?p=257">http://knowledge.ciber.nl/weblog/?p=257</a>&nbsp;</p>
<p align="left">Navigate to D:\MW_OBI11G\user_projects\domains\bifoundation_domain\servers\bi_server1\security, check if there is a file called: boot.properties</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image34.png"><img height="100" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb33.png" width="244" border="0"></a> </p>
<p align="left">If not, make it using a text editor and enter :</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image35.png"><img height="88" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb34.png" width="244" border="0"></a> </p>
<div align="left">
<pre></pre>
</div>
<blockquote>
<p align="left">username=weblogic</p>
<p align="left">password=Password</p>
</blockquote>
<p align="left">
<p align="left">
<p align="left">Do the same for D:\MW_OBI11G\user_projects\domains\bifoundation_domain\servers\AdminServer\security</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image36.png"><img height="79" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb35.png" width="244" border="0"></a> </p>
<p align="left">Reboot your BI-server.</p>
<p align="left">Let’s make a couple off handy start and stop .bat files:</p>
<p align="left">01 Start Weblogic.bat:</p>
<blockquote>
<div align="left">
<p>@echo off</p>
<p>cls</p>
<p>d:</p>
<p>D:\MW_OBI11G\user_projects\domains\bifoundation_domain\bin\startWebLogic.cmd</p>
</div>
</blockquote>
<p align="left">
<p align="left">Run the script, wait to you see the IPADRESSES:</p>
<p align="left">&nbsp;<a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image37.png"><img height="115" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb36.png" width="244" border="0"></a> </p>
<p align="left">02 Start Opmn.bat:</p>
<blockquote>
<div align="left">
<p>cls</p>
<p>&nbsp;
<p>d:</p>
<p>D:\MW_OBI11G\instances\instance2\bin\opmnctl startall</p>
</div>
</blockquote>
<p align="left">03 Start Bi-server.bat:</p>
<blockquote>
<p align="left">@echo off</p>
<p align="left">&nbsp; </p>
<p align="left">cls</p>
<p align="left">d:</p>
<p align="left">&nbsp; </p>
<p align="left">D:\MW_OBI11G\user_projects\domains\bifoundation_domain\bin\startManagedWebLogic.cmd bi_server1</p>
</blockquote>
<div align="left">
<pre>&nbsp;</pre>
</div>
<div align="left">
<pre>pause</pre>
</div>
<p align="left">
<p align="left">Run the script:</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image38.png"><img height="111" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb37.png" width="244" border="0"></a> </p>
<p align="left">Wait to you see the IP-adresses.</p>
<p align="left">Let’s check if everything went OK:</p>
<p align="left">login to the enterprise manager using the weblogic account:</p>
<p align="left"><a title="http://localhost:7001/em" href="http://localhost:7001/em">http://localhost:7001/em</a></p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image39.png"><img height="123" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb38.png" width="244" border="0"></a> </p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image40.png"><img height="95" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb39.png" width="244" border="0"></a> </p>
<p align="left">This looks OK, let’s go to the Console:</p>
<p align="left"><a title="http://localhost:7001/console/" href="http://localhost:7001/console/">http://localhost:7001/console/</a></p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image41.png"><img height="88" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb40.png" width="244" border="0"></a> </p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image42.png"><img height="112" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb41.png" width="244" border="0"></a> </p>
<p align="left">Click on servers:</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image43.png"><img height="155" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb42.png" width="244" border="0"></a> </p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image44.png"><img height="93" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb43.png" width="244" border="0"></a> </p>
<p align="left">Now for the grant finale, check OBIEE:</p>
<p align="left"><a title="http://localhost:9704/analytics" href="http://localhost:9704/analytics">http://localhost:9704/analytics</a></p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image45.png"><img height="123" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb44.png" width="244" border="0"></a>&nbsp;</p>
<p align="left">Select the Quickstart Dashboard:</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image46.png"><img height="143" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb45.png" width="244" border="0"></a> </p>
<p align="left">Click around and have Fun!</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image47.png"><img height="112" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb46.png" width="244" border="0"></a> </p>
<p align="left">I like to stop the server using scripts to prevent it from going into a recovery mode on the next start:</p>
<p align="left">96 stop bi-server.bat:</p>
<blockquote>
<div align="left">
<p>@echo off</p>
<p>cls</p>
<p>&nbsp;
<p>d:</p>
<p>D:\MW_OBI11G\user_projects\domains\bifoundation_domain\bin\stopManagedWebLogic.cmd bi_server1</p>
</div>
</blockquote>
<p align="left">97 Stop OPNM.bat:</p>
<div align="left">
<pre></pre>
</div>
<blockquote>
<p align="left">@echo off</p>
<p align="left">cls</p>
<p align="left">&nbsp; </p>
<p align="left">d:</p>
<p align="left">D:\MW_OBI11G\instances\instance1\bin\opmnctl stopall</p>
</blockquote>
<p align="left">98 stop weblogic.bat</p>
<div align="left">
<pre></pre>
</div>
<blockquote>
<p align="left">@echo off </p>
<p align="left">cls </p>
<p align="left">&nbsp; </p>
<p align="left">d: </p>
<p align="left">D:\MW_OBI11G\user_projects\domains\bifoundation_domain\bin\stopWebLogic.cmd</p>
</blockquote>
<p align="left">Till Next Time</p>
]]></content:encoded>
			<wfw:commentRSS>http://knowledge.ciber.nl/weblog/?feed=rss2&amp;p=257</wfw:commentRSS>
		</item>
		<item>
		<title>OBIEE11g Installation on 32 bits XP-pro III</title>
		<link>http://knowledge.ciber.nl/weblog/?p=256</link>
		<comments>http://knowledge.ciber.nl/weblog/?p=256#comments</comments>
		<pubDate>Mon, 16 Aug 2010 07:45:34 +0000</pubDate>
		<dc:creator>John Minkjan</dc:creator>
		
	<category>Oracle</category>
	<category>Business Intelligence</category>
		<guid isPermaLink="false">http://knowledge.ciber.nl/weblog/?p=256</guid>
		<description><![CDATA[This is part III of a four part series:
Part I: http://knowledge.ciber.nl/weblog/?p=254
Part II: http://knowledge.ciber.nl/weblog/?p=255
Part III: http://knowledge.ciber.nl/weblog/?p=256
Part IV: http://knowledge.ciber.nl/weblog/?p=257
Let’s start the main installer from: D:\OBIEE11G1130\Install\bishiphome\Disk1
 
 
Press Next
 
Select Simple Install
 
Press next
 
Enter your Middleware Home Path
 
Enter a password for the weblogic user, make a big mental note of the password.
If you get an 
 [...]]]></description>
			<content:encoded><![CDATA[<p align="left">This is part III of a four part series:</p>
<p align="left">Part I: <a title="http://knowledge.ciber.nl/weblog/?p=254" href="http://knowledge.ciber.nl/weblog/?p=254">http://knowledge.ciber.nl/weblog/?p=254</a></p>
<p align="left">Part II: <a title="http://knowledge.ciber.nl/weblog/?p=255" href="http://knowledge.ciber.nl/weblog/?p=255">http://knowledge.ciber.nl/weblog/?p=255</a></p>
<p align="left">Part III: <a title="http://knowledge.ciber.nl/weblog/?p=256" href="http://knowledge.ciber.nl/weblog/?p=256">http://knowledge.ciber.nl/weblog/?p=256</a></p>
<p align="left">Part IV: <a title="http://knowledge.ciber.nl/weblog/?p=257" href="http://knowledge.ciber.nl/weblog/?p=257">http://knowledge.ciber.nl/weblog/?p=257</a></p>
<p align="left">Let’s start the main installer from: D:\OBIEE11G1130\Install\bishiphome\Disk1</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image20.png"><img height="136" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb20.png" width="244" border="0" /></a> </p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image21.png"><img height="197" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb21.png" width="244" border="0" /></a> </p>
<p align="left">Press Next</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image22.png"><img height="197" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb22.png" width="244" border="0" /></a> </p>
<p align="left">Select Simple Install</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image23.png"><img height="198" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb23.png" width="244" border="0" /></a> </p>
<p align="left">Press next</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image24.png"><img height="195" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb24.png" width="244" border="0" /></a> </p>
<p align="left">Enter your Middleware Home Path</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image25.png"><img height="195" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb25.png" width="244" border="0" /></a> </p>
<p align="left">Enter a password for the weblogic user, make a big mental note of the password.</p>
<p align="left">If you get an </p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image26.png"><img height="179" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb26.png" width="244" border="0" /></a> </p>
<p align="left">press unblock</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image27.png"><img height="193" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb27.png" width="244" border="0" /></a> </p>
<p align="left">
<p align="left">Enter the credentials</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image28.png"><img height="194" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb28.png" width="244" border="0" /></a> </p>
<p align="left">Enter (optional) your personal Oracle Support credentials</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image29.png"><img height="199" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb29.png" width="244" border="0" /></a> </p>
<p align="left">Press install, have a drink, this might take a while.</p>
<p align="left">
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image30.png"><img height="198" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb30.png" width="244" border="0" /></a> </p>
<p align="left">Check the BI Configuration box and let it run, have an other drink.</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image31.png"><img height="197" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb31.png" width="244" border="0" /></a> </p>
<p align="left">There is a big chance the last step failed, don’t worry, we will fix that later.</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image32.png"><img height="197" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb32.png" width="244" border="0" /></a> </p>
<p align="left">Save the summary file, it has handy information for later use.</p>
<p align="left">In the next part we will finish the configuration</p>
<p align="left">
<p align="left">Till Next Time<a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image33.png"></a></p>
]]></content:encoded>
			<wfw:commentRSS>http://knowledge.ciber.nl/weblog/?feed=rss2&amp;p=256</wfw:commentRSS>
		</item>
		<item>
		<title>OBIEE11g Installation on 32 bits XP-pro II</title>
		<link>http://knowledge.ciber.nl/weblog/?p=255</link>
		<comments>http://knowledge.ciber.nl/weblog/?p=255#comments</comments>
		<pubDate>Mon, 16 Aug 2010 07:41:48 +0000</pubDate>
		<dc:creator>John Minkjan</dc:creator>
		
	<category>Oracle</category>
	<category>Business Intelligence</category>
		<guid isPermaLink="false">http://knowledge.ciber.nl/weblog/?p=255</guid>
		<description><![CDATA[This is part II of a four part series:

Part I: http://knowledge.ciber.nl/weblog/?p=254
Part II: http://knowledge.ciber.nl/weblog/?p=255
Part III: http://knowledge.ciber.nl/weblog/?p=256
Part IV: http://knowledge.ciber.nl/weblog/?p=257
Let’s create the repository using the RCU:
 
(Some of the screen is Dutch, but all the button are in the same place)
 
Select Create
 
Enter your database credentials. Be sure it has SYSDBA privileges.
 
Press Ok

Enter a prefix and [...]]]></description>
			<content:encoded><![CDATA[<p align="left">This is part II of a four part series:</p>
<p align="left"><a title="http://obiee101.blogspot.com/2010/08/obiee11g-installation-on-32-bits-xp-pro_8977.html" href="http://obiee101.blogspot.com/2010/08/obiee11g-installation-on-32-bits-xp-pro_8977.html"></a></p>
<p>Part I: <a title="http://knowledge.ciber.nl/weblog/?p=254" href="http://knowledge.ciber.nl/weblog/?p=254">http://knowledge.ciber.nl/weblog/?p=254</a></p>
<p align="left">Part II: <a title="http://knowledge.ciber.nl/weblog/?p=255" href="http://knowledge.ciber.nl/weblog/?p=255">http://knowledge.ciber.nl/weblog/?p=255</a></p>
<p align="left">Part III: <a title="http://knowledge.ciber.nl/weblog/?p=256" href="http://knowledge.ciber.nl/weblog/?p=256">http://knowledge.ciber.nl/weblog/?p=256</a></p>
<p align="left">Part IV: <a title="http://knowledge.ciber.nl/weblog/?p=257" href="http://knowledge.ciber.nl/weblog/?p=257">http://knowledge.ciber.nl/weblog/?p=257</a></p>
<p align="left">Let’s create the repository using the RCU:</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image8.png"><img height="184" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb8.png" width="244" border="0" /></a> </p>
<p align="left">(Some of the screen is Dutch, but all the button are in the same place)</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image9.png"><img height="185" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb9.png" width="244" border="0" /></a> </p>
<p align="left">Select Create</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image10.png"><img height="185" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb10.png" width="244" border="0" /></a> </p>
<p align="left">Enter your database credentials. Be sure it has SYSDBA privileges.</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image11.png"><img height="104" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb11.png" width="244" border="0" /></a> </p>
<p align="left">Press Ok</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image12.png"><img height="295" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb12.png" width="396" border="0" /></a></p>
<p align="left">Enter a prefix and check the BI components.</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image13.png"><img height="95" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb13.png" width="244" border="0" /></a> </p>
<p align="left">An other check, press OK</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image14.png"><img height="183" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb14.png" width="244" border="0" /></a> </p>
<p align="left">Enter the schema passwords (Make a big mental Note).</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image15.png"><img height="351" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb15.png" width="461" border="0" /></a> </p>
<p align="left">Map the tablespaces.</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image16.png"><img height="142" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb16.png" width="244" border="0" /></a> </p>
<p align="left">press OK</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image17.png"><img height="93" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb17.png" width="244" border="0" /></a> </p>
<p align="left">Press OK</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image18.png"><img height="181" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb18.png" width="244" border="0" /></a> </p>
<p align="left">You are almost done, press Create</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image19.png"><img height="184" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb19.png" width="244" border="0" /></a> </p>
<p align="left">Press close, you are done.</p>
<p align="left">Let’s start the OBIEE and FM setup from D:\OBIEE11G1130\Install\bishiphome\Disk1</p>
<p align="left">Till Next Time</p>
]]></content:encoded>
			<wfw:commentRSS>http://knowledge.ciber.nl/weblog/?feed=rss2&amp;p=255</wfw:commentRSS>
		</item>
		<item>
		<title>OBIEE11g Installation on 32 bits XP-pro I</title>
		<link>http://knowledge.ciber.nl/weblog/?p=254</link>
		<comments>http://knowledge.ciber.nl/weblog/?p=254#comments</comments>
		<pubDate>Mon, 16 Aug 2010 07:39:54 +0000</pubDate>
		<dc:creator>John Minkjan</dc:creator>
		
	<category>Oracle</category>
	<category>Business Intelligence</category>
		<guid isPermaLink="false">http://knowledge.ciber.nl/weblog/?p=254</guid>
		<description><![CDATA[OBIEE11g is out! Yeah, let’s try and install it on a windows 32 bit XP-pro box.
This will be a 4 part series:
Part I: http://knowledge.ciber.nl/weblog/?p=254
Part II: http://knowledge.ciber.nl/weblog/?p=255
Part III: http://knowledge.ciber.nl/weblog/?p=256
Part IV: http://knowledge.ciber.nl/weblog/?p=257
Ok, we have finally downloaded the 4,5 Gb:
 
 
(While you are waiting for the download to finish start reading the manuals: http://download.oracle.com/docs/cd/E14571_01/bi.htm)
Unzip them in a [...]]]></description>
			<content:encoded><![CDATA[<p align="left">OBIEE11g is out! Yeah, let’s try and install it on a windows 32 bit XP-pro box.</p>
<p align="left">This will be a 4 part series:</p>
<p align="left">Part I: <a title="http://knowledge.ciber.nl/weblog/?p=254" href="http://knowledge.ciber.nl/weblog/?p=254">http://knowledge.ciber.nl/weblog/?p=254</a></p>
<p align="left">Part II: <a title="http://knowledge.ciber.nl/weblog/?p=255" href="http://knowledge.ciber.nl/weblog/?p=255">http://knowledge.ciber.nl/weblog/?p=255</a></p>
<p align="left">Part III: <a title="http://knowledge.ciber.nl/weblog/?p=256" href="http://knowledge.ciber.nl/weblog/?p=256">http://knowledge.ciber.nl/weblog/?p=256</a></p>
<p align="left">Part IV: <a title="http://knowledge.ciber.nl/weblog/?p=257" href="http://knowledge.ciber.nl/weblog/?p=257">http://knowledge.ciber.nl/weblog/?p=257</a></p>
<p align="left">Ok, we have finally downloaded the 4,5 Gb:</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image.png"><img height="158" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb.png" width="244" border="0" /></a> </p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image1.png"><img height="88" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb1.png" width="244" border="0" /></a> </p>
<p align="left">(<strong><font size="4">While you are waiting for the download to finish start reading the manuals: </font></strong><a href="http://download.oracle.com/docs/cd/E14571_01/bi.htm"><strong><font size="4">http://download.oracle.com/docs/cd/E14571_01/bi.htm</font></strong></a>)</p>
<p align="left">Unzip them in a single folder:</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image2.png"><img height="125" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb2.png" width="244" border="0" /></a> </p>
<p align="left">Copy all the bishiphome subfolders to a single install folder:</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image3.png"><img height="85" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb3.png" width="244" border="0" /></a> </p>
<p align="left">Check if you have access to an db:</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image4.png"><img height="82" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb4.png" width="244" border="0" /></a> </p>
<p align="left">Check if you have a loopback adaptor installed, this provides at least one fixed ip-adress for your system:</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image5.png"><img height="148" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb5.png" width="244" border="0" /></a> </p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image6.png"><img height="150" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb6.png" width="244" border="0" /></a> </p>
<p align="left">Start the RCU (Repository Creation Utility) found in: D:\OBIEE11G1130\ofm_rcu_win32_11.1.1.3.3_disk1_1of1\rcuHome\BIN</p>
<p align="left"><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image7.png"><img height="136" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/08/image_thumb7.png" width="244" border="0" /></a> </p>
<p align="left">Till Next Time</p>
]]></content:encoded>
			<wfw:commentRSS>http://knowledge.ciber.nl/weblog/?feed=rss2&amp;p=254</wfw:commentRSS>
		</item>
		<item>
		<title>OBIEE Playing With TopN Part 2</title>
		<link>http://knowledge.ciber.nl/weblog/?p=253</link>
		<comments>http://knowledge.ciber.nl/weblog/?p=253#comments</comments>
		<pubDate>Fri, 21 May 2010 19:41:00 +0000</pubDate>
		<dc:creator>John Minkjan</dc:creator>
		
	<category>Oracle</category>
	<category>Business Intelligence</category>
		<guid isPermaLink="false">http://knowledge.ciber.nl/weblog/?p=253</guid>
		<description><![CDATA[In part 1 we ended with:
 


Let’s try to add the top2 product2 for each customer in the top 10. Start with adding the product column:
 
You will notice that the revenue for each customer has dropped. This means we first have to “lock” the revenue on a customer / year level:
 
 
Okay that [...]]]></description>
			<content:encoded><![CDATA[<p>In part 1 we ended with:</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image17.png"><img height="398" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image_thumb17.png" width="391" border="0" /></a> </p>
</p>
<p><a id="more-253"></a></p>
<p>Let’s try to add the top2 product2 for each customer in the top 10. Start with adding the product column:</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image18.png"><img height="335" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image_thumb18.png" width="397" border="0" /></a> </p>
<p>You will notice that the revenue for each customer has dropped. This means we first have to “lock” the revenue on a customer / year level:</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image19.png"><img height="139" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image_thumb19.png" width="436" border="0" /></a> </p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image20.png"><img height="384" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image_thumb20.png" width="430" border="0" /></a> </p>
<p>Okay that fixed, let’s get the revenue by product:</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image21.png"><img height="307" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image_thumb21.png" width="429" border="0" /></a> </p>
<p>Some how I don’t think this correct. Let’s get the details for one customer:</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image22.png"><img height="205" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image_thumb22.png" width="442" border="0" /></a> </p>
<p>He has bought several products so let’s tweak this some more. We need to add the TOPN2 Filter for product by customer by year.</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image23.png"><img height="151" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image_thumb23.png" width="445" border="0" /></a> </p>
<p>Just add as an extra column.</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image24.png"><img height="271" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image_thumb24.png" width="429" border="0" /></a> </p>
<p>Let’s put it in a pivot to make it even more readable:</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image25.png"><img height="204" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image_thumb25.png" width="452" border="0" /></a> </p>
<p>Till Next Time</p>
]]></content:encoded>
			<wfw:commentRSS>http://knowledge.ciber.nl/weblog/?feed=rss2&amp;p=253</wfw:commentRSS>
		</item>
		<item>
		<title>OBIEE Playing With TopN Part 1</title>
		<link>http://knowledge.ciber.nl/weblog/?p=252</link>
		<comments>http://knowledge.ciber.nl/weblog/?p=252#comments</comments>
		<pubDate>Thu, 20 May 2010 19:13:00 +0000</pubDate>
		<dc:creator>John Minkjan</dc:creator>
		
	<category>Microsoft</category>
	<category>Business Intelligence</category>
		<guid isPermaLink="false">http://knowledge.ciber.nl/weblog/?p=252</guid>
		<description><![CDATA[Basic question Give back the Top10 Customers:
 


Simple add a TopN filter to request:
 
Most manager won’t be satisfied with this report because there isn’t a time element present. Let’s add a year:
 
&#160; 
Okay what about the top10 for each year? Here is one solution:
First convert the filter to SQL:
 
 
Add a by [...]]]></description>
			<content:encoded><![CDATA[<p>Basic question Give back the Top10 Customers:</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image9.png"><img height="351" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image_thumb9.png" width="452" border="0" /></a> </p>
</p>
<p><a id="more-252"></a></p>
<p>Simple add a TopN filter to request:</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image10.png"><img height="94" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image_thumb10.png" width="244" border="0" /></a> </p>
<p>Most manager won’t be satisfied with this report because there isn’t a time element present. Let’s add a year:</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image11.png"><img height="55" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image_thumb11.png" width="244" border="0" /></a> </p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image12.png"><img height="232" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image_thumb12.png" width="367" border="0" /></a>&#160; </p>
<p>Okay what about the top10 for each year? Here is one solution:</p>
<p>First convert the filter to SQL:</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image13.png"><img height="160" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image_thumb13.png" width="472" border="0" /></a> </p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image14.png"><img height="120" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image_thumb14.png" width="474" border="0" /></a> </p>
<p>Add a by to the TOPN Part:</p>
<p>TOPN(&quot;F1 Revenue&quot;.&quot;1-01&#160; Revenue&#160; (Sum All)&quot;,10 <strong>by &quot;D0 Time&quot;.&quot;T05 Per Name Year&quot;</strong> ) &lt;= 10</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image15.png"><img height="201" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image_thumb15.png" width="446" border="0" /></a> </p>
</p>
</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image16.png"><img height="434" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image_thumb16.png" width="445" border="0" /></a> </p>
<p>What about showing the top 2 products for each top10 customer? I will discus that in part2.</p>
<p>Till Next Time</p>
]]></content:encoded>
			<wfw:commentRSS>http://knowledge.ciber.nl/weblog/?feed=rss2&amp;p=252</wfw:commentRSS>
		</item>
		<item>
		<title>OBIEE Events Calendar</title>
		<link>http://knowledge.ciber.nl/weblog/?p=251</link>
		<comments>http://knowledge.ciber.nl/weblog/?p=251#comments</comments>
		<pubDate>Fri, 14 May 2010 18:07:00 +0000</pubDate>
		<dc:creator>John Minkjan</dc:creator>
		
	<category>Oracle</category>
	<category>Business Intelligence</category>
		<guid isPermaLink="false">http://knowledge.ciber.nl/weblog/?p=251</guid>
		<description><![CDATA[&#160; 
First of all Kudos to Hitesh for laying the ground work: http://hiteshbiblog.blogspot.com/2010/04/obiee-showing-data-on-calendar.html


First you have to go to the MooTools site and download the basics:
The mootools core: http://mootools.net/download =&#62; choose the uncompressed version, it makes debugging easier. 
Next get the More building blocks Date, Scroller, Tips: http://mootools.net/more&#160;
Finally get the calendar control: http://dansnetwork.com/mootools/events-calendar/download/
Put everything in a [...]]]></description>
			<content:encoded><![CDATA[<p>&#160;<a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image3.png"><img height="304" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image_thumb3.png" width="460" border="0" /></a> </p>
<p>First of all Kudos to Hitesh for laying the ground work: <a title="http://hiteshbiblog.blogspot.com/2010/04/obiee-showing-data-on-calendar.html" href="http://hiteshbiblog.blogspot.com/2010/04/obiee-showing-data-on-calendar.html">http://hiteshbiblog.blogspot.com/2010/04/obiee-showing-data-on-calendar.html</a></p>
</p>
<p><a id="more-251"></a></p>
<p>First you have to go to the MooTools site and download the basics:</p>
<p>The mootools core: <a title="http://mootools.net/download" href="http://mootools.net/download">http://mootools.net/download</a> =&gt; choose the uncompressed version, it makes debugging easier. </p>
<p>Next get the More building blocks Date, Scroller, Tips: <a title="http://mootools.net/more" href="http://mootools.net/more">http://mootools.net/more</a>&#160;</p>
<p>Finally get the calendar control: <a title="http://dansnetwork.com/mootools/events-calendar/download/" href="http://dansnetwork.com/mootools/events-calendar/download/">http://dansnetwork.com/mootools/events-calendar/download/</a></p>
<p>Put everything in a subfolder of the Res folder (if you are using OC4J as webserver, you have to sync both RES folders):</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image4.png"><img height="210" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image_thumb4.png" width="442" border="0" /></a> </p>
</p>
<p>Let’s get some base data to work with: Startdate, Enddate, dayofweek, brand, revenue:</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image5.png"><img height="372" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image_thumb5.png" width="420" border="0" /></a> </p>
<p>Now we add a narrative view:    <br /><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image6.png"><img height="121" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image_thumb6.png" width="244" border="0" /></a> </p>
<p>In the prefix part we first select the size of the calendar control:</p>
<blockquote><p>&lt;link rel=&quot;stylesheet&quot; type&quot;text/css&quot; href=&quot;./res/mooTools/mooECalLarge.css&quot;&gt;</p>
<p>or </p>
<p>&lt;link rel=&quot;stylesheet&quot; type&quot;text/css&quot; href=&quot;./res/mooTools/mooECal.css&quot;&gt;</p>
<p>or</p>
<p>&lt;link rel=&quot;stylesheet&quot; type&quot;text/css&quot; href=&quot;./res/mooTools/mooECalSmall.css&quot;&gt;</p>
</blockquote>
<p>Next we add the references to the javscript:</p>
<blockquote><p>&lt;script language=&quot;javascript&quot; src=&quot;./res/mooTools/mootools-1.2.4-core-nc.js&quot;&gt;&lt;/script&gt;      <br />&lt;script language=&quot;javascript&quot; src=&quot;./res/mooTools/mootools-1.2.4.4-more.js&quot;&gt;&lt;/script&gt;       <br />&lt;script language=&quot;javascript&quot; src=&quot;./res/mooTools/mooECal.js&quot;&gt;&lt;/script&gt;</p>
</blockquote>
<p>as div tag to hold the body:</p>
<blockquote><p>&lt;div id=&quot;calBody&quot;&gt;&lt;/div&gt;</p>
</blockquote>
<p>and a function to set the background and font color:</p>
<p>&lt;script language=&quot;javascript&quot;&gt; </p>
<blockquote><p>function getDiv(holFlag)      <br />{       <br />if(holFlag==&#8217;1&#8242; || holFlag==&#8217;7&#8242;)       <br />{       <br />return &#8216;&lt;div style=&quot;background-color:#990000;color:#ffffff;&quot;&gt;&#8217;;       <br />}       <br />else       <br />{       <br />return &#8216;&lt;div style=&quot;background-color:#999900;color:#ffffff;&quot;&gt;&#8217;;       <br />}       <br />}</p>
</blockquote>
<p>finally the header of the control:</p>
<blockquote><p>new Calendar({calContainer:&#8217;calBody&#8217;, newDate:&#8217;1/3/2007&#8242;,      <br />cEvents:new Array(</p>
</blockquote>
<p>The date is the date on which the control wil be opened.</p>
<p>The total prefix should look like this:</p>
<blockquote><p>&lt;link rel=&quot;stylesheet&quot; type&quot;text/css&quot; href=&quot;./res/mooTools/mooECalLarge.css&quot;&gt;      <br />&lt;script language=&quot;javascript&quot; src=&quot;./res/mooTools/mootools-1.2.4-core-nc.js&quot;&gt;&lt;/script&gt;       <br />&lt;script language=&quot;javascript&quot; src=&quot;./res/mooTools/mootools-1.2.4.4-more.js&quot;&gt;&lt;/script&gt;       <br />&lt;script language=&quot;javascript&quot; src=&quot;./res/mooTools/mooECal.js&quot;&gt;&lt;/script&gt;       <br />&lt;div id=&quot;calBody&quot;&gt;&lt;/div&gt;       <br />&lt;script language=&quot;javascript&quot;&gt; </p>
<p>function getDiv(holFlag)      <br />{       <br />if(holFlag==&#8217;1&#8242; || holFlag==&#8217;7&#8242;)       <br />{       <br />return &#8216;&lt;div style=&quot;background-color:#990000;color:#ffffff;&quot;&gt;&#8217;;       <br />}       <br />else       <br />{       <br />return &#8216;&lt;div style=&quot;background-color:#999900;color:#ffffff;&quot;&gt;&#8217;;       <br />}       <br />}       <br />new Calendar({calContainer:&#8217;calBody&#8217;, newDate:&#8217;1/3/2007&#8242;,       <br />cEvents:new Array(</p>
</blockquote>
<p>In the narrative part we fill the array:</p>
<blockquote><p>{      <br />title: getDiv(&#8217;@3&#8242;) +&#8217;@4: &#8216;+ &#8216;@5 &lt;/div&gt;&#8217;,       <br />start: &#8216;@1&#8242;,       <br />end: &#8216;@2&#8242;,       <br />location: &#8216;&#8217;       <br />}</p>
</blockquote>
<p>In the postfix we close the array:</p>
<blockquote><p>)      <br />}); &lt;/script&gt;</p>
</blockquote>
<p>Set the separator to “,”</p>
<p><strong><em><u>Warning if you try to save this from the narrative view you will get the ‘opaque’ save screen</u></em></strong>….</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image7.png"><img height="107" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image_thumb7.png" width="244" border="0" /></a> </p>
<p>switch to the criteria view first and then save!</p>
<p>Add the narrative to your compound lay-out:</p>
<p><a href="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image8.png"><img height="210" alt="image" src="http://knowledge.ciber.nl/weblog/wp-content/uploads/2010/05/image_thumb8.png" width="458" border="0" /></a> </p>
<p>Till Next Time</p>
]]></content:encoded>
			<wfw:commentRSS>http://knowledge.ciber.nl/weblog/?feed=rss2&amp;p=251</wfw:commentRSS>
		</item>
	</channel>
</rss>
