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

<channel>
	<title>Bahchi&#039;s Technologies</title>
	<atom:link href="http://www.bahchis.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bahchis.com</link>
	<description>DevOps &#38; Data Engineering</description>
	<lastBuildDate>Sat, 24 Sep 2016 09:33:10 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.6.1</generator>
<site xmlns="com-wordpress:feed-additions:1">35636697</site>	<item>
		<title>Why I Am Happy For Getting The Chance To Learn PHP</title>
		<link>http://www.bahchis.com/why-i-am-happy-for-getting-the-chance-to-learn-php/</link>
		<comments>http://www.bahchis.com/why-i-am-happy-for-getting-the-chance-to-learn-php/#comments</comments>
		<pubDate>Wed, 14 May 2014 19:07:58 +0000</pubDate>
		<dc:creator><![CDATA[Sergey Bahchissaraitsev]]></dc:creator>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.bahchis.com/?p=652</guid>
		<description><![CDATA[<p>The post <a rel="nofollow" href="http://www.bahchis.com/why-i-am-happy-for-getting-the-chance-to-learn-php/">Why I Am Happy For Getting The Chance To Learn PHP</a> appeared first on <a rel="nofollow" href="http://www.bahchis.com">Bahchi&#039;s Technologies</a>.</p>
<p>About 8 years ago I decided to learn PHP and it was my first programming language. I started with no knowledge at all, researched  the necessary topics, did a few self initiated projects and after a few months, I was able to get my first job as a PHP developer. Looking back, I am still happy for learning it. It gave me a good basis for being able to work with other technologies I was required to and it is now my partial income.</p>
]]></description>
				<content:encoded><![CDATA[<p>The post <a rel="nofollow" href="http://www.bahchis.com/why-i-am-happy-for-getting-the-chance-to-learn-php/">Why I Am Happy For Getting The Chance To Learn PHP</a> appeared first on <a rel="nofollow" href="http://www.bahchis.com">Bahchi&#039;s Technologies</a>.</p>
<p>About 8 years ago I decided to learn PHP and it was my first programming language. I started with no knowledge at all, researched  the necessary topics, did a few self initiated projects and after a few months, I was able to get my first job as a PHP developer. Looking back, I am still happy for learning it. It gave me a good basis for being able to work with other technologies I was required to and it is now my partial income.</p>
<div style="text-align: center;"><img class="aligncenter wp-image-678 size-full" src="http://bahchis.com/wp-content/uploads/2014/05/php.jpg" alt="PHP" width="500" height="346" srcset="http://www.bahchis.com/wp-content/uploads/2014/05/php.jpg 500w, http://www.bahchis.com/wp-content/uploads/2014/05/php-300x208.jpg 300w" sizes="(max-width: 500px) 100vw, 500px" /><span style="font-size: 0.9em; display: block; margin-bottom: 0.5em;">photo credit: <a href="http://www.flickr.com/photos/polarity/3138680190/" rel="nofollow">Robert Agthe</a> via <a href="http://photopin.com" rel="nofollow">photopin</a> <a href="http://creativecommons.org/licenses/by/2.0/" rel="nofollow">cc</a></span></div>
<p>The last few weeks, I have read a few articles about PHP. Some are good, endorsing it. Some are bad, saying things like it is a broken language. Of course, PHP has it&#8217;s own ups and downs, but I am here neither to prettify or disfigure it. I can only say, that you should build on the positive and deal with the negative.<br />
I don&#8217;t know, maybe, that is what got me writing this kind of post in the first place.</p>
<p>The reasons I am thankful for learning PHP:</p>
<ol>
<li>Researching technology on your own is never easy, but I believe it is an essential skill in High Tech. Learning this language was a huge milestone on the way getting that skill for me.</li>
<li>It taught me the basics of scripting and OOP. I had to adapt when I started programming Java, but it was much easier than just knocking on the Object Oriented Programming door on your own for the first time.</li>
<li>HTML, JavaScript and CSS &#8211; I was learning one programming language, but got 4 in the same package, learning those other languages, which usually any PHP work combines.</li>
<li>The community is huge. PHP people, PHP people everywhere.</li>
<li>The knowledge resources are full of&#8230; uum&#8230; knowledge. You can always find relevant examples and how other developers attended similar problems.</li>
<li>It gave me an opportunity to go further, than just the programming language. WordPress, Drupal, Joomla, Magento and many more are all Content Management Systems or similar, which are leading in the industry. Those systems are based on PHP and as PHP Freelancer, I have worked with those systems or can easily get myself to be able to do so. Something, that not any developer in other programming language can say.</li>
<li>It is one more skill for me. There is a lot of work, employed or freelance, involving PHP (some say too many work and even more developers). It can always be a full or a part time income.</li>
</ol>
<p>For conclusion, I am happy for learning PHP, It was a fun ride when I started, it opened up some great opportunities and helped me in evolving my skills. Further more, those are interesting times in the PHP world, there are a lot of frameworks, open source projects and APIs. Special notice to the Facebook <a title="Hack Lang" href="http://hacklang.org/" target="_blank">Hack Language</a> and <a title="HHVM" href="http://hhvm.com/" target="_blank">HHVM</a>, two recent interesting developments, which I will try for sure.  So, since 2006, I choose to &lt;?php?&gt;.</p>
<p>You are welcome to share your opinion and experience with PHP.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bahchis.com/why-i-am-happy-for-getting-the-chance-to-learn-php/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">652</post-id>	</item>
		<item>
		<title>3 Tips For ODI SQL Code Standards</title>
		<link>http://www.bahchis.com/3-tips-for-odi-sql-code-standards/</link>
		<comments>http://www.bahchis.com/3-tips-for-odi-sql-code-standards/#respond</comments>
		<pubDate>Fri, 04 Apr 2014 13:55:59 +0000</pubDate>
		<dc:creator><![CDATA[Sergey Bahchissaraitsev]]></dc:creator>
				<category><![CDATA[Data Engineering]]></category>
		<category><![CDATA[Oracle Data Integrator]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://bahchis.com/?p=427</guid>
		<description><![CDATA[<p>The post <a rel="nofollow" href="http://www.bahchis.com/3-tips-for-odi-sql-code-standards/">3 Tips For ODI SQL Code Standards</a> appeared first on <a rel="nofollow" href="http://www.bahchis.com">Bahchi&#039;s Technologies</a>.</p>
<p>You can write SQL in a variety of places when designing an interface or a procedure with ODI, but a lot of times we forget to take care of somebody. This somebody, is the next person. This person can be anybody, you, friend, colleague or your boss. I had to return and edit my own SQL codes and other's more than once.</p>
]]></description>
				<content:encoded><![CDATA[<p>The post <a rel="nofollow" href="http://www.bahchis.com/3-tips-for-odi-sql-code-standards/">3 Tips For ODI SQL Code Standards</a> appeared first on <a rel="nofollow" href="http://www.bahchis.com">Bahchi&#039;s Technologies</a>.</p>
<p>You can write SQL in a variety of places when designing an interface or a procedure with ODI, but a lot of times we forget to take care of somebody. This somebody, is the next person. This person can be anybody, you, friend, colleague or your boss. I had to return and edit my own SQL codes and other&#8217;s more than once. I wish that we had some standards from the very beginning. In this post, I will try to keep 3 tips for ODI SQL standards simple enough, to be able to follow them with no real hassle, but also to benefit very greatly for the next time you look at your own code.</p>
<p>Lets start with a test case. Mapping a field in a interface, which will execute the following logic:</p>
<div>
<blockquote>
<ol>
<li>If the field is null, insert &#8216;unknown&#8217;.</li>
<li>Replace values of &#8216;bad&#8217;, &#8216;wrong&#8217; and &#8217;empty&#8217; with &#8216;unknown-replaced&#8217;</li>
<li>Select a replacement for the string from a table.</li>
<li>If no replacement is found, enter the value as is.</li>
</ol>
</blockquote>
</div>
<p>Sounds simple enough, lets give it a try with mapping that SQL into an interface column. This is how it looks like without applying the tips on the SQL. I will focus only on the SQL of that specific column and the general SQL generated when executing the interface as an example for my point. Here is the code for the logic above:</p>
<blockquote>
<div><span style="font-size: medium;">case when mytable.myfield is null then &#8216;unknown&#8217; when mytable.myfield in (&#8216;bad&#8217;,&#8217;wrong&#8217;,&#8217;empty&#8217;) then &#8216;unknown-replaced&#8217; </span><span style="font-size: medium;">else nvl(</span><span style="font-size: medium;"><span style="font-size: medium;">(select reps.replacement from myschema.replacetable reps where reps.origval = </span><span style="font-size: medium;"><span style="font-size: medium;">mytable.myfield</span>), </span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">mytable.myfield</span></span></span></span>) end</span></div>
</blockquote>
<p>Now, lets apply some tips.</p>
<p>1. <strong>Line breaks</strong> &#8211; Just by a simple line break in the right place and the SQL code becomes a lot clearer:</p>
<div>
<blockquote>
<div><span style="font-size: medium;">case<br />
when mytable.myfield is null<br />
then &#8216;unknown&#8217;<br />
when mytable.myfield in (&#8216;bad&#8217;,&#8217;wrong&#8217;,&#8217;empty&#8217;)<br />
then &#8216;unknown-replaced&#8217;<br />
</span><span style="font-size: medium;">else<br />
nvl(<br />
</span><span style="font-size: medium;"><span style="font-size: medium;">(<br />
select reps.replacement<br />
from myschema.replacetable reps<br />
where reps.origval = </span><span style="font-size: medium;"><span style="font-size: medium;">mytable.myfield<br />
</span>),<br />
</span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">mytable.myfield</span></span></span></span>)<br />
end</span></div>
</blockquote>
</div>
<p>2. <strong>Tabs</strong> &#8211; A few tabs here and there, will make the code much more readable:</p>
<div>
<div>
<blockquote>
<div><span style="font-size: medium;">case<br />
when mytable.myfield is null<br />
</span><span style="font-size: medium;"><span style="font-size: medium;">     </span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span>then &#8216;unknown&#8217;<br />
</span><span style="font-size: medium;"><span style="font-size: medium;">     </span>when mytable.myfield in (&#8216;bad&#8217;,&#8217;wrong&#8217;,&#8217;empty&#8217;)<br />
</span><span style="font-size: medium;"><span style="font-size: medium;">     </span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span>then &#8216;unknown-replaced&#8217;<br />
</span><span style="font-size: medium;"><span style="font-size: medium;">     </span>else<br />
</span><span style="font-size: medium;"><span style="font-size: medium;">     </span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span>nvl(<br />
</span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span>(<br />
</span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span>select reps.replacement<br />
</span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span>from myschema.replacetable reps<br />
</span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span>where reps.origval = </span><span style="font-size: medium;"><span style="font-size: medium;">mytable.myfield<br />
</span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span>),<br />
</span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span>mytable.myfield</span></span></span></span>)<br />
end</span></div>
</blockquote>
</div>
</div>
<p>&nbsp;</p>
<p>3. <strong>Capitalize the fields, catalogs, schemas, tables and aliases (just like ODI does)</strong> &#8211; This will make it easy to distinguish where an actual resource is being referenced and where it is pure SQL:</p>
<div>
<div>
<div>
<blockquote>
<div><span style="font-size: medium;">case<br />
when MYTABLE.MYFIELD is null<br />
</span><span style="font-size: medium;"><span style="font-size: medium;">     </span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span>then &#8216;unknown&#8217;<br />
</span><span style="font-size: medium;"><span style="font-size: medium;">     </span>when </span><span style="font-size: medium;"><span style="font-size: medium;">MYTABLE.MYFIELD</span> in (&#8216;bad&#8217;,&#8217;wrong&#8217;,&#8217;empty&#8217;)<br />
</span><span style="font-size: medium;"><span style="font-size: medium;">     </span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span>then &#8216;unknown-replaced&#8217;<br />
</span><span style="font-size: medium;"><span style="font-size: medium;">     </span>else<br />
</span><span style="font-size: medium;"><span style="font-size: medium;">     </span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span>nvl(<br />
</span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span>(<br />
</span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span>select </span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">REPS</span></span>.REPLACEMENT<br />
</span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span>from MYSCHEMA.REPLACETABLE REPS<br />
</span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span>where </span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">REPS</span></span>.ORIGVAL = </span></span><span style="font-size: medium;">MYTABLE.MYFIELD</span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><br />
</span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;">),<br />
</span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">     </span></span></span></span></span></span></span><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;"><span style="font-size: medium;">MYTABLE.MYFIELD</span></span></span></span></span>)<br />
end</span></div>
</blockquote>
</div>
</div>
</div>
<div></div>
<div>This was a (really) simple test case. Those tips, should make much easier reading the code after a while, especially, when the SQL Logic is complicated. I hope by reading this post, you will make yours and somebody&#8217;s else life a little easier in the future.</div>
<div></div>
<div>You are welcome to share any of your tips for ODI SQL Standards in the comments, thanks.</div>
]]></content:encoded>
			<wfw:commentRss>http://www.bahchis.com/3-tips-for-odi-sql-code-standards/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">427</post-id>	</item>
		<item>
		<title>Oracle Open World 2012</title>
		<link>http://www.bahchis.com/oracle-open-world-2012/</link>
		<comments>http://www.bahchis.com/oracle-open-world-2012/#comments</comments>
		<pubDate>Mon, 08 Oct 2012 12:14:15 +0000</pubDate>
		<dc:creator><![CDATA[Sergey Bahchissaraitsev]]></dc:creator>
				<category><![CDATA[Data Engineering]]></category>
		<category><![CDATA[Oracle Data Integrator]]></category>

		<guid isPermaLink="false">http://bahchis.com/?p=535</guid>
		<description><![CDATA[<p>The post <a rel="nofollow" href="http://www.bahchis.com/oracle-open-world-2012/">Oracle Open World 2012</a> appeared first on <a rel="nofollow" href="http://www.bahchis.com">Bahchi&#039;s Technologies</a>.</p>
<p>This year, I was able to participate in the Oracle Open World. After a week of walking through session in the Moscone center and some Hotels in San Francisco, I just wanted to share my Oracle Open World experience and a few key things I found interesting. So, fighting laziness and jet leg, here we go.</p>
]]></description>
				<content:encoded><![CDATA[<p>The post <a rel="nofollow" href="http://www.bahchis.com/oracle-open-world-2012/">Oracle Open World 2012</a> appeared first on <a rel="nofollow" href="http://www.bahchis.com">Bahchi&#039;s Technologies</a>.</p>
<p>This year, I was able to participate in the Oracle Open World. After a week of walking through session in the Moscone center and some Hotels in San Francisco, I just wanted to share my Oracle Open World experience and a few key things I found interesting. So, fighting laziness and jet leg, here we go.</p>
<p>The first thing I have learned about Open World San Francisco is, that there are a lot of sessions, a lot of rooms and more than one location to go to. So, preparation was in order, this way it is possible to get into the sessions, which interest you the most.  I am not saying you should prepare for a month, just look at the Oracle Open World catalog and choose the most interesting sessions for you. Then, the night before, decide which session you will be attending the next day. At least, this is how it worked for me, since I am an Oracle employee. I am not sure though, if customer or anybody else should register beforehand. One tip I can give you if you are attending the next Oracle Open World conference, try to get a hard copy of the catalog, this will make your life easier.</p>
<p>The next thing I find interesting are the Demo Grounds. Walking around a bit, there are a lot of interesting demos about various Oracle products and many other companies that come there to present their products. Well, the most important tip of the day is&#8230; get free stuff :). This is the place to go around, listen to people, scan your badge and get free gadgets and other small, but sometimes cool items. I enjoyed walking around the Demo Grounds, a lot of things to see and people to talk to. For example, I got a chance to talk to two Developers from ODI team about their demo. They presented how to work with ODI and Hadoop, I enjoyed the conversation and learned new things.</p>
<p>The sessions themselves, are about 1 hour and there is a 30 minutes period between each session. This is, probably, for us to be able to move around between different locations and get into our next session in time.</p>
<p>There are a few session I have enjoyed the most. The first is <a title="Oracle Data Integrator Product Update and Future Strategy" href="https://oracleus.activeevents.com/connect/sessionDetail.ww?SESSION_ID=8650" target="_blank">Oracle Data Integrator Product Update and Future Strategy</a>. At which, Denis Gray has talked about current Oracle Data Integrator 11g features and the direction they are headed. One the features I liked, is the ability to run Knowledge Module steps in parallel with the upcoming version of ODI, Oracle Data Integrator 12c.</p>
<p>The second session I have enjoyed is <a title="Real-Time Data Integration with Oracle Data Integrator at Raymond James" href="https://oracleus.activeevents.com/connect/sessionDetail.ww?SESSION_ID=6614" target="_blank">Real-Time Data Integration with Oracle Data Integrator at Raymond James</a> by Tim Garrod and Ryan Fonnett from Raymond James. They presented their solution to integrating journalized data in real time with ODI CDC. Their goal is to capture data and load it with in a 30 seconds time period, which they have successfully implemented. They have talked about the issue that come up when trying to develop such a solution, like parallel executions with CDC, scheduling and load balance, large amount of repository logs and more. They also presented how they have overcame each issue.</p>
<p>There are more sessions I have enjoyed, but I am running out of paper. To finish, I would say, I really enjoyed Oracle Open World and San Francisco, as well. If you are attending the next Oracle Open World, remember three things. Learn new stuff about things that interest you, talk to people and enjoy.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bahchis.com/oracle-open-world-2012/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">535</post-id>	</item>
		<item>
		<title>ODI 11g New Features</title>
		<link>http://www.bahchis.com/odi-11g-new-features/</link>
		<comments>http://www.bahchis.com/odi-11g-new-features/#respond</comments>
		<pubDate>Mon, 28 May 2012 19:50:26 +0000</pubDate>
		<dc:creator><![CDATA[Sergey Bahchissaraitsev]]></dc:creator>
				<category><![CDATA[Data Engineering]]></category>
		<category><![CDATA[Oracle Data Integrator]]></category>

		<guid isPermaLink="false">http://bahchis.com/?p=467</guid>
		<description><![CDATA[<p>The post <a rel="nofollow" href="http://www.bahchis.com/odi-11g-new-features/">ODI 11g New Features</a> appeared first on <a rel="nofollow" href="http://www.bahchis.com">Bahchi&#039;s Technologies</a>.</p>
<p>ODI 11g has introduced a lot of new features and each major release continued to add more and more ODI 11g [&#8230;]</p>
]]></description>
				<content:encoded><![CDATA[<p>The post <a rel="nofollow" href="http://www.bahchis.com/odi-11g-new-features/">ODI 11g New Features</a> appeared first on <a rel="nofollow" href="http://www.bahchis.com">Bahchi&#039;s Technologies</a>.</p>
<p>ODI 11g has introduced a lot of new features and each major release continued to add more and more ODI 11g new features, which accumulated into a lot of features distributed between different releases, starting from ODI 11.1.1.3, continuing with ODI 11.1.1.5 and finishing, with the latest, ODI 11.1.1.6 new features. For example, in my previous post I talked some about <a title="ODI 11.1.1.6 and Java 7" href="http://bahchis.com/2012/04/28/odi-11-1-1-6-and-java-7-support/">ODI 11.1.1.6 and Java 7</a>.</p>
<p>To tell the truth it is a little annoying reading the new features by going through separate PDFs, each covering one version of ODI 11g new features. If you perform a quick search on Google, you probably will be hitting the different PDFs first, but looking a little further (in my case, second page &#8211; from different computers and different logins) you can find an ODI White Paper called &#8220;Oracle Data Integrator 11g New Features Overview&#8221;, which summarizes the new features of all the releases of ODI 11g until now.</p>
<p>Don&#8217;t worry, I am not going to send you searching on Google. Here is the PDF I am talking about:</p>
<p><a href="http://www.oracle.com/technetwork/middleware/data-integrator/overview/odi-11g-new-features-overview-1622677.pdf">ODI 11g New Features</a></p>
<p>Hope this helps to get familiar with the ODI 11g new features, and if I I ever see new ODI White Papers covering more features from newer releases, I will try to keep this post up to date.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bahchis.com/odi-11g-new-features/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">467</post-id>	</item>
		<item>
		<title>Oracle Data Integrator</title>
		<link>http://www.bahchis.com/oracle-data-integrator/</link>
		<comments>http://www.bahchis.com/oracle-data-integrator/#respond</comments>
		<pubDate>Sun, 13 May 2012 19:33:54 +0000</pubDate>
		<dc:creator><![CDATA[Sergey Bahchissaraitsev]]></dc:creator>
				<category><![CDATA[Data Engineering]]></category>
		<category><![CDATA[Oracle Data Integrator]]></category>

		<guid isPermaLink="false">http://localhost/bahchis/?p=572</guid>
		<description><![CDATA[<p>The post <a rel="nofollow" href="http://www.bahchis.com/oracle-data-integrator/">Oracle Data Integrator</a> appeared first on <a rel="nofollow" href="http://www.bahchis.com">Bahchi&#039;s Technologies</a>.</p>
<p>What is Oracle Data Integrator? Oracle Data Integrator, also known as Oracle ODI or just ODI, is Data Integration solution [&#8230;]</p>
]]></description>
				<content:encoded><![CDATA[<p>The post <a rel="nofollow" href="http://www.bahchis.com/oracle-data-integrator/">Oracle Data Integrator</a> appeared first on <a rel="nofollow" href="http://www.bahchis.com">Bahchi&#039;s Technologies</a>.</p>
<p>What is Oracle Data Integrator?<br />
Oracle Data Integrator, also known as Oracle ODI or just ODI, is Data Integration solution from Oracle, based on the <a title="ELT Approach" href="http://bahchis.com/2011/02/07/elt-drill-down/" target="_blank">ELT approach</a>. For me, it is what I do every day at work, unfortunately, some times at home as well.</p>
<p>ODI is divided into a few main components:</p>
<ol>
<li><strong>Repository</strong> &#8211; This where the ODI objects are saved, everything you do in ODI is located at one of the repositories. You can read more about it on a post I wrote a while ago, <a title="ODI Repositories" href="http://bahchis.com/2011/03/03/odi-repositories/" target="_blank">ODI Repositories</a>.</li>
<li><strong>Agent</strong> &#8211; This is the server side of Oracle Data Integrator. This is the component, which can be installed anywhere, as long as it have access to the right resource to do the requested job. It can be located on the target database, source or even a dedicated server. Starting from 11g version, it can be deployed both, as standalone or Java EE agent.</li>
<li><strong>GUI</strong> &#8211; This is the client. It is partitioned into 4 parts: Designer, Operator, Topology and Security Manager. Those, help you design data integration projects, monitor them and control your entire ODI environment.</li>
<li><strong>ODI SDK</strong> &#8211; 11g version has added a nice addition, ODI SDK, which is a group of classes, that can be used to develop extensions to ODI in order to automate procedures and add flexibility to any part of a project, either in design or run time.</li>
</ol>
<p>Oracle Data Integrator is a Java based application. It leverages Java as the main technology for connectivity. Using standards like JDBC, JNDI, JMS and more, ODI can connect to many technologies out of the box. This fact, also keeps the door open for ODI to connect to new technologies, as long as the right driver is in place and it supports those standards.</p>
<p>One of the features I like the most about ODI, is the customization level. Almost everything can be customized to meet your goals.  <a title="Knowledge Modules, Procedures or Open Tools" href="http://bahchis.com/2011/10/25/knowledge-modules-procedures-or-open-tools/" target="_blank">Knowledge modules, ODI Procedures and Open Tools</a> &#8211; provide high modification abilites. The main power behind these is, of course, the ODI Substitution methods and Java. Such level of customization is a good thing, but can easily turn into a bad thing, if customized badly, because no planning was done properly. All this, depends on the project goals, size and complication.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bahchis.com/oracle-data-integrator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">572</post-id>	</item>
		<item>
		<title>ODI 11.1.1.6 and Java 7 support</title>
		<link>http://www.bahchis.com/odi-11-1-1-6-and-java-7-support/</link>
		<comments>http://www.bahchis.com/odi-11-1-1-6-and-java-7-support/#comments</comments>
		<pubDate>Sat, 28 Apr 2012 17:36:51 +0000</pubDate>
		<dc:creator><![CDATA[Sergey Bahchissaraitsev]]></dc:creator>
				<category><![CDATA[Data Engineering]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Oracle Data Integrator]]></category>

		<guid isPermaLink="false">http://bahchis.com/?p=379</guid>
		<description><![CDATA[<p>The post <a rel="nofollow" href="http://www.bahchis.com/odi-11-1-1-6-and-java-7-support/">ODI 11.1.1.6 and Java 7 support</a> appeared first on <a rel="nofollow" href="http://www.bahchis.com">Bahchi&#039;s Technologies</a>.</p>
<p>ODI 11.1.1.6 is out for some time now, and I still did not had a change to share anything about [&#8230;]</p>
]]></description>
				<content:encoded><![CDATA[<p>The post <a rel="nofollow" href="http://www.bahchis.com/odi-11-1-1-6-and-java-7-support/">ODI 11.1.1.6 and Java 7 support</a> appeared first on <a rel="nofollow" href="http://www.bahchis.com">Bahchi&#039;s Technologies</a>.</p>
<p>ODI 11.1.1.6 is out for some time now, and I still did not had a change to share anything about it or even play with it as I should have. The 11.1.1.6 version introduces some really nice new features and it also supports Java 7 (!) on certain platforms, which are listed in the <a title="Oracle Fusion Middleware Supported System Configurations" href="http://www.oracle.com/technetwork/middleware/ias/downloads/fusion-certification-100350.html" target="_blank">Oracle Fusion Middleware Supported System Configurations</a>.</p>
<p>Well,  maybe the exclamation mark was too much, since I am still to discover what this really means, ODI combined with Java 7. But, let me think for a second&#8230;</p>
<ol>
<li>Will this increase performance?<br />
This is probably the first question anyone would ask and according to a few interesting articles I have found online, it will. There is the <a title="Java 7 performance enhancements" href="http://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html" target="_blank">Java 7 performance enhancements</a> in the Java 7 documentation. It is very technical and it is hard to understand, how it will impact Oracle Data Integrator. To give a little perspective, I have found the <a title="Java 7 , 6 and 5 performance benchmark" href="http://geeknizer.com/java-7-whats-new-performance-benchmark-1-5-1-6-1-7/" target="_blank">Performance Benchmark 1.5 1.6 1.7</a> , which actually gives some numbers and some nice graphs at the bottom.</li>
<li>What about implementing Java 7 in ODI?<br />
Many developers get to develop different components for ODI in Java, I have discussed some of these, in my previous posts: <a title="Knowledge Modules, Procedures or Open Tools" href="http://bahchis.com/2011/10/25/knowledge-modules-procedures-or-open-tools/" target="_blank">Knowledge Modules, Procedures or Open Tools</a> and <a title="Open Tool Tips" href="http://bahchis.com/2011/10/15/open-tool-tips/" target="_blank">Open Tool Tips</a>. So it is most relevant than ever to mention, that if you have two Oracle Data Integrator environments and the first uses JDK 1.7, what you develop might not run on the second environment running JDK 1.6 , while it probably will vice versa.</li>
<li>Use HotSpot for development and JRockit for production, right?<br />
There is a common guide line running between weblogic professionals to install development environments with the HotSpot JVM and the production with the JRockit JVM.<br />
Well&#8230; I don&#8217;t see how it is going to work out with Java 7, because Java 7 is a best of breed, it is actually a start of an years long process, which will merge between the HotSpot JVM and the JRockit JVM. To simplify, best JRockit features will move to the HotSpot. According to <a title="Java 7 Questions &amp; Answers" href="https://blogs.oracle.com/henrik/entry/java_7_questions_answers" target="_blank">Java 7 Questions &amp; Answers</a> , JRockit is not going to be entitled the Java 7 features. One JVM for both, development and production?</li>
</ol>
<p>These are my quick thoughts about Java 7 and Oracle data Integrator. To tell the truth, these can probably be applied on ,almost, any other software out there running on Java, especially Oracle Fusion Middleware. But, Oracle Data Integrator running on JDK 1.7 is an interesting thing to try and I will soon do so, more posts will come&#8230;</p>
<p>Feel free to say what you think about Java 7 and Oracle Data Integrator in the comments. Thanks.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bahchis.com/odi-11-1-1-6-and-java-7-support/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">379</post-id>	</item>
		<item>
		<title>Unexpected Java Runtime Environment Errors Starting ODI Agent</title>
		<link>http://www.bahchis.com/unexpected-java-runtime-environment-errors-starting-odi-agent/</link>
		<comments>http://www.bahchis.com/unexpected-java-runtime-environment-errors-starting-odi-agent/#respond</comments>
		<pubDate>Fri, 23 Mar 2012 15:05:12 +0000</pubDate>
		<dc:creator><![CDATA[Sergey Bahchissaraitsev]]></dc:creator>
				<category><![CDATA[Data Engineering]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Oracle Data Integrator]]></category>

		<guid isPermaLink="false">http://bahchis.com/?p=215</guid>
		<description><![CDATA[<p>The post <a rel="nofollow" href="http://www.bahchis.com/unexpected-java-runtime-environment-errors-starting-odi-agent/">Unexpected Java Runtime Environment Errors Starting ODI Agent</a> appeared first on <a rel="nofollow" href="http://www.bahchis.com">Bahchi&#039;s Technologies</a>.</p>
<p>Unexpected Java Runtime Environment Error&#8230; These are the kind of errors I like the most. When you see such an [&#8230;]</p>
]]></description>
				<content:encoded><![CDATA[<p>The post <a rel="nofollow" href="http://www.bahchis.com/unexpected-java-runtime-environment-errors-starting-odi-agent/">Unexpected Java Runtime Environment Errors Starting ODI Agent</a> appeared first on <a rel="nofollow" href="http://www.bahchis.com">Bahchi&#039;s Technologies</a>.</p>
<p>Unexpected Java Runtime Environment Error&#8230;<br />
These are the kind of errors I like the most. When you see such an error being thrown when starting ODI agent in a production environment, you can go ahead and cancel dinner. Fortunately, for me, this error was on development server, so I had quite a nice dinner that evening.</p>
<p>I wanted to publish this post for some time now, thinking I will get to the cause of it later, my mistake for thinking in the first place. Now, as all the traces of the errors and the log files are beyond my reach, I decided just to share the information. The agent mentioned in this post is ODI 10g agent. Although, I don&#8217;t see a reason why such issue cannot arise with at least the 11g standalone agent.</p>
<p>I don&#8217;t know exactly what caused these errors, all I know is what I have done to resolve the situation.</p>
<p>The errors:</p>
<blockquote>
<pre># An unexpected error has been detected by Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=&lt;...&gt;, pid=&lt;...&gt;, tid=&lt;...&gt;
#
# Java VM: Java HotSpot(TM) 64-Bit Server VM (11.0-b16 mixed mode linux-amd64)
# Problematic frame:
# V  [libjvm.so+...]
<span style="font-family: monospace;">#</span><span style="font-family: monospace;"># If you would like to submit a bug report, please visit: </span># http://java.sun.com/webapps/bugreport/crash.jsp # The crash happened outside the Java Virtual Machine in native code. # See problematic frame for where to report the bug.</pre>
</blockquote>
<p>I have found a nice discussion about the first error on <a title="stackoverflow.com discussion about SIGSEGV libjvm" href="http://stackoverflow.com/questions/6448163/a-fatal-error-has-been-detected-by-the-java-runtime-environment-sigsegv-libjvm" target="_blank">stackoverflow.com: SIGSEGV, libjvm</a>. At the end, it was a hardware failure according to that discussion.</p>
<blockquote>
<pre># An unexpected error has been detected by Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=&lt;...&gt;, pid=&lt;...&gt;, tid=&lt;...&gt;
#
# Java VM: Java HotSpot(TM) 64-Bit Server VM (11.0-b16 mixed mode linux-amd64)
# Problematic frame:
# C  [libclntsh.so.10.1+...]
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp # The crash happened outside the Java Virtual Machine in native code. # See problematic frame for where to report the bug.</pre>
</blockquote>
<p>While searching for the solution, I have seen different sayings about these kind of errors on the web. Starting from hardware failure and finishing with the wind blowing west.</p>
<p>The first error I have solved by asking to move that virtual machine to another physical host, based on the discussion I mentioned earlier. This had changed the error a little, notice that the problematic frame is different in the second error.</p>
<p>Finally, I came across another saying, which claimed that the second error is caused by a jar file being modified, while the application was still using it. Unfortunately, I don&#8217;t remember the link.</p>
<p>Well, it was worth a try, I have copied the entire &#8220;drivers&#8221; and &#8220;lib&#8221; directories under $ODI_HOME from another identical server. This indeed solved the issue, the agent came right up.<br />
The most natural thing, of course, was to try and reproduce the problem and I tried, but when trying to replace or delete jars in the &#8220;drivers&#8221; or &#8220;lib&#8221; directories &#8211; nothing happens and restarting the agent works without any problems.</p>
<p>Well to wrap it up, the first error was solved by moving to another physical host, while the second by replacing jar files. The errors came one after another without any period in between. I would say:</p>
<ul>
<li>Definitely, Unexpected errors <img src="https://s.w.org/images/core/emoji/2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></li>
<li>Both errors issued the SIGSEGV signal, so it must be a memory related issue, here is what Wikipedia has to say about that: <a title="SIGSEGV - invalid memory reference by a process" href="http://en.wikipedia.org/wiki/SIGSEGV" target="_blank"><code>SIGSEGV</code> is the signal sent to a process when it makes an invalid memory reference</a>.</li>
<li>Although, I am not sure right now, how the errors were caused, I hope, I have provided some useful information for whoever is expriencing similar problems and if I find out more about any of this, I will update this post.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.bahchis.com/unexpected-java-runtime-environment-errors-starting-odi-agent/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">215</post-id>	</item>
		<item>
		<title>Knowledge Modules, Procedures or Open Tools</title>
		<link>http://www.bahchis.com/knowledge-modules-procedures-or-open-tools/</link>
		<pubDate>Tue, 25 Oct 2011 20:42:09 +0000</pubDate>
		<dc:creator><![CDATA[Sergey Bahchissaraitsev]]></dc:creator>
				<category><![CDATA[Data Engineering]]></category>
		<category><![CDATA[Oracle Data Integrator]]></category>

		<guid isPermaLink="false">http://bahchis.com/?p=237</guid>
		<description><![CDATA[<p>The post <a rel="nofollow" href="http://www.bahchis.com/knowledge-modules-procedures-or-open-tools/">Knowledge Modules, Procedures or Open Tools</a> appeared first on <a rel="nofollow" href="http://www.bahchis.com">Bahchi&#039;s Technologies</a>.</p>
<p>Deciding when to use knowledge module, ODI procedure or an OpenTool is a debate every ODI user will have to face [&#8230;]</p>
]]></description>
				<content:encoded><![CDATA[<p>The post <a rel="nofollow" href="http://www.bahchis.com/knowledge-modules-procedures-or-open-tools/">Knowledge Modules, Procedures or Open Tools</a> appeared first on <a rel="nofollow" href="http://www.bahchis.com">Bahchi&#039;s Technologies</a>.</p>
<p>Deciding when to use knowledge module, ODI procedure or an OpenTool is a debate every ODI user will have to face eventually. When facing such a decision, there are some points that make it an easier choice to make.</p>
<p>This post is not written to explain ODI KM, ODI Open Tool, ODI procedure or any technical issues around them. It is more for explaining the concept and when to use each one, as I look at things.</p>
<p><strong>Knowledge module, what is it really?</strong></p>
<p>Actually, despite of what many people might think, knowledge modules do not contain all the functionality one might need for his integration project. They contain common functionality for the technologies which ODI supports out of the box and are templates, which could be learned from and modified in order to meet one&#8217;s more specific needs or other technologies. Before starting any project, the assumption that you have all the functionality you need in the KMs should be verified, because if you do &#8211; it is nice. If you don&#8217;t, it will cost you time and this time should be included in your project schedule, otherwise you will lag behind your timeline. It might happen, that in order to meet the requirements of a project further KM development is required. Although, modifying a KM is not something you do too often, before so, it needs to be assured, that there is no other out of the box KM, which does what is needed, the one we intend to modify is the right one for the job and still does not satisfy. Another thing, usually a KM modification will be needed for features, which we will want to use later on and maybe in other projects as well. As I see it, when modifying a template, you should be creating another template. Modifying KMs all the time, can become a pretty messy thing.</p>
<p><strong><br />
Procedure is like an interface without GUI.</strong></p>
<p>You basically, can achieve almost everything you do in an interface and more by writing procedures, but writing procedures is a much more time consuming procedure :). It is more an object for a single project, you hit a wall and need to add some functionality, which is not built into ODI? &#8220;OK&#8221;, write a procedure, just don&#8217;t be reusing it on right and left, otherwise you might &#8220;KO&#8221; (excuse me for my geeky humor). Knowledge modules are designed to be reused in different projects while using logical schemas, procedures are not. This would make harder to reuse a procedure for doing the same thing on another logical schema, for this you would need to duplicate the procedure and remember to choose another schema from the drop down menu, such things slow down the development of your projects and are pointless, you know&#8230; remembering stuff. Another word on duplication of procedures, I don&#8217;t think it is right to maintain two or more objects with the same functionality in one project, just because you need to connect to a different DBs, do you? What if a change will be required? Good luck.<br />
Reusing the procedure with no schema connectivity or within the same connection (for example, locking different tables) is possible and might be fine , as long as the option are used correctly. Although, either way I would not advise to go and distributing it between different projects, if you need a global object, create one. Use either KM or open tool, depending on the task.</p>
<p><strong><br />
Open tool is the way to integrate your own functionality.</strong></p>
<p>I will say right away, that not many are up for such a solution, either because this requires a more deeper java knowledge or the time it might take to develop such a thing is a little longer. This is the right spirit to pull you back in the long run. Developing and maintaining fundamental tools for your organization is a must and part of the job. If you need a tool to be reused in your projects, this is is the way and it will be available for you anywhere an ODI tool is. The biggest difference from KM or procedure, is the fact that open tool will not share the transactions within your package, it is more a global standalone and persistent step in a package. Also, this tool should achieve its goal with minimal functionality, because you would need to be able to have some kind of backwards compatibility when modifying the class you have developed. You can read more on Open Tools in  my previous <a title="Open Tool Tips" href="http://bahchis.com/?p=261">post</a>.</p>
<p>So&#8230;<br />
KMs, Open Tools or procedures? What are you using the most?</p>
]]></content:encoded>
		<post-id xmlns="com-wordpress:feed-additions:1">237</post-id>	</item>
		<item>
		<title>Open Tool Tips</title>
		<link>http://www.bahchis.com/open-tool-tips/</link>
		<comments>http://www.bahchis.com/open-tool-tips/#comments</comments>
		<pubDate>Sat, 15 Oct 2011 07:23:15 +0000</pubDate>
		<dc:creator><![CDATA[Sergey Bahchissaraitsev]]></dc:creator>
				<category><![CDATA[Data Engineering]]></category>
		<category><![CDATA[Oracle Data Integrator]]></category>

		<guid isPermaLink="false">http://bahchis.com/?p=261</guid>
		<description><![CDATA[<p>The post <a rel="nofollow" href="http://www.bahchis.com/open-tool-tips/">Open Tool Tips</a> appeared first on <a rel="nofollow" href="http://www.bahchis.com">Bahchi&#039;s Technologies</a>.</p>
<p>Developing an ODI Open Tool is quite simple. Some Java skills and understanding are required, but it is totally not [&#8230;]</p>
]]></description>
				<content:encoded><![CDATA[<p>The post <a rel="nofollow" href="http://www.bahchis.com/open-tool-tips/">Open Tool Tips</a> appeared first on <a rel="nofollow" href="http://www.bahchis.com">Bahchi&#039;s Technologies</a>.</p>
<p>Developing an ODI Open Tool is quite simple. Some Java skills and understanding are required, but it is totally not needed to be an expert. The guide is pretty good, it explains how to build OpenTools and how to put them for Oracle Data Integrator to use. The tutorial can be found in the ODI documentation.</p>
<p>The one thing I was missing in the documentation is the jars (probably, I was just too lazy to look further&#8230;), which I had to add to my classpath in order  to be able to develop my code in my IDE of choice. <del>The Jar is odi-core.jar, in the 11G version is located at &lt;install directory&gt;/oracledi.sdk/lib/, after adding it to your project classpath you will be able to use Open Tool classes</del>.<br />
<span style="text-decoration: underline;"><strong>Update:</strong></span> The jars which should be included in the classpath are <span style="text-decoration: underline;">all the jars,</span> that are located at &lt;install directory&gt;/oracledi.sdk/lib/ . Otherwise, the following exception is thrown when trying to use the OpenToolExecutionException in the Execute() method as described in the documentation:</p>
<blockquote><p>No exception of type OpenToolExecutionException can be thrown; an exception type must be a subclass of Throwable</p></blockquote>
<p>&nbsp;</p>
<p>The process of developing such a tool is straightforward (OK. I am not going copy/paste from the official documentation, so I will just give you the links):</p>
<p>1. Develop the class as described here:<br />
<a title="Developing Open Tools" href="http://docs.oracle.com/cd/E14571_01/integrate.1111/e12643/appendix_a.htm#CEGGCCJC" target="_blank">Developing Open Tools</a></p>
<p>2. Put your jar in the classpath as described here:<br />
<a title="Add Additional Drivers and Open Tools" href="http://docs.oracle.com/cd/E21764_01/core.1111/e16453/configure.htm#ODING297" target="_blank">Add Additional Drivers and Open Tools</a></p>
<p>3. Add the tool into ODI following these steps:<br />
<a title="Installing and Declaring an Open Tool" href="http://docs.oracle.com/cd/E14571_01/integrate.1111/e12643/appendix_a.htm#CEGGBDCD" target="_blank">Installing and Declaring an Open Tool</a></p>
<p>So far, so good. Although, as you continue to develop, you will encounter a few questions and maybe even some pitfalls, which are better addressed from the beginning. Some are pointed out int the documentation and some are not.</p>
<ol>
<li>Do I really need an Open Tool for this task? This is the first question to ask before starting coding. Open Tools are usually things to reuse in multiple packages and multiple projects, which serve a very specific task. If it is not your case, you are better off with a KM or procedure.</li>
<li>The best way to start is by extending the OpenToolAbstract class. If you are extending your own class and since, extending more than more class is not allowed in Java, than make sure you have implemented the IOpenTool interface.</li>
<li>Open tool is not supposed to be a complicated Java class. Overwhelming it with a large amount of parameters and methods is a bad thing.  A much smarter thing to do, is break large difficult tasks, into small and specific multiple mini tasks, then create an Open Tool for each one.</li>
<li>Modifications and updates, if you have deployed many scenarios using your Open Tool and you have created a new version of it, than updating the Jar in the classpath, will result in all the scenarios, packages or anything else using your tool advancing instantly to the new version. This means, that any update should be deployed with much care and backwards compatibility. This is the main reason for me, not to make my Open Tools too complicated.</li>
<li>This is Java. you get, what you have written. Performance, cleanup and bugs are your responsibility.</li>
<li>The parameters must be validated within the Open Tool code. The &#8220;Mandotory&#8221; Boolean parameter passed when initiating the OpenToolParameter class are just for displaying in the UI and ODI will not validate these parameters are set correctly or set at all, even if the parameter is initiated with this variable set to true.</li>
<li>getSyntax() method is very simple, but has a lot of influence. The name of the tool and the parameter&#8217;s initial values will be determined by this method.</li>
<li>Create nice icons for your tools.</li>
</ol>
<div>Those things are better taken into account before starting writing the code. It is a very simple process and I suggest starting by writing something, that does not require much coding. <a title="Keep It Simple Stupid" href="http://en.wikipedia.org/wiki/KISS_principle" target="_blank">KISS</a>.</div>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bahchis.com/open-tool-tips/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">261</post-id>	</item>
		<item>
		<title>Python Custom Files In ODI</title>
		<link>http://www.bahchis.com/python-custom-files-in-odi/</link>
		<comments>http://www.bahchis.com/python-custom-files-in-odi/#comments</comments>
		<pubDate>Thu, 26 May 2011 12:03:07 +0000</pubDate>
		<dc:creator><![CDATA[Sergey Bahchissaraitsev]]></dc:creator>
				<category><![CDATA[Data Engineering]]></category>
		<category><![CDATA[Oracle Data Integrator]]></category>

		<guid isPermaLink="false">http://bahchis.com/?p=189</guid>
		<description><![CDATA[<p>The post <a rel="nofollow" href="http://www.bahchis.com/python-custom-files-in-odi/">Python Custom Files In ODI</a> appeared first on <a rel="nofollow" href="http://www.bahchis.com">Bahchi&#039;s Technologies</a>.</p>
<p>Some time ago I saw an email on one of the email lists in which, the author asked how to [&#8230;]</p>
]]></description>
				<content:encoded><![CDATA[<p>The post <a rel="nofollow" href="http://www.bahchis.com/python-custom-files-in-odi/">Python Custom Files In ODI</a> appeared first on <a rel="nofollow" href="http://www.bahchis.com">Bahchi&#039;s Technologies</a>.</p>
<p>Some time ago I saw an email on one of the email lists in which, the author asked how to import custom python modules into ODI. When reading this email, I did not know, what would be the best way to perform such a thing and that made me a little curious. After a while, trying to find the answer on the net and waiting for replies on the email lists, I have decided to check it out on my own. The best solution, in my opinion, would be using the -Dpython.path Java argument. The main reasons for this would be:</p>
<ul>
<li>Simple.</li>
<li>This is more a Jython problem than ODIs and therefore, the solution should be, as well, at Jythons level.</li>
<li>Another good thing is that this argument could easily rely on the, well known, $PYTHONPATH environment variable. Resulting, in insurance that all applications are using the same version of the files.</li>
<li>Anyone importing custom modules into ODI would like to maintain some kind of portability option, just in case, the decision of moving the python files will come. In this case, all that will be required is changing the $PYTHONPATH environment variable to the new location and restart the agents so the change will take effect.</li>
</ul>
<p><span style="text-decoration: underline;"><strong>How To:</strong></span></p>
<p>1. Configure the $PYTHONPATH environment variable. For example in linux:</p>
<blockquote><p>export PYTHONPATH=/path/to/my/python/files</p></blockquote>
<p>2. Edit the ODI_ADDITIONAL_JAVA_OPTIONS in your odiParams.sh/bat and append &#8220;$PYTHONPATH&#8221; to it. For example in linux:</p>
<blockquote><p>ODI_ADDITIONAL_JAVA_OPTIONS=&#8221;-Dpython.path=$PYTHONPATH&#8221;</p></blockquote>
<p>3. Restart.</p>
<p>Now, if you try using your python files they will be successfully imported into Jython from within ODI. Also, to make sure that the changes have taken effect, you can print the sys.path variable from Jython in order to see what is included in your path.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bahchis.com/python-custom-files-in-odi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">189</post-id>	</item>
	</channel>
</rss>
