tag:blogger.com,1999:blog-88003865911810699312024-03-12T20:30:41.717-07:00Huysmans Industry Three ThousandHuysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.comBlogger32125tag:blogger.com,1999:blog-8800386591181069931.post-14631216020674717762019-06-03T07:37:00.001-07:002019-06-03T07:37:23.799-07:00ORDS Remove entire schema info<h3>
Business Case</h3>
<div>
While deploying more and more ORDS based solutions, we need to be able to clean ORDS completely for a certain schema.</div>
<div>
<br /></div>
<h3>
Solution</h3>
<div>
We created our own procedure for this cleanup. While it works in our cases, maybe it is not complete for your environment. Testing is always crucial.</div>
<div>
<br /></div>
<div>
Follow the following steps to create the procedure:<br />
<br />
<ol>
<li>Login with sys of your database or pluggable db</li>
<li>Execute the following script:</li>
</ol>
<div>
<blockquote class="tr_bq">
create or replace procedure ords_metadata.remove_schema_entries<br />authid definer<br />is<br /> v_user constant varchar2(200) := SYS_CONTEXT('USERENV', 'SESSION_USER');<br />begin<br /> dbms_output.put_line('start remove schema entries for '||v_user);<br /> delete from ords_handlers where created_by = v_user;<br /> delete from ords_modules where created_by = v_user;<br /> delete from ords_objects where created_by = v_user;<br /> delete from ords_parameters where created_by = v_user;<br /> delete from ords_templates where created_by = v_user;<br /> delete from ords_url_mappings where created_by = v_user;<br /> delete from sec_authenticators where created_by = v_user;<br /> delete from sec_keys where created_by = v_user;<br /> delete from sec_origins_allowed_modules where created_by = v_user;<br /> delete from sec_privilege_auths where created_by = v_user;<br /> delete from sec_privilege_mappings where created_by = v_user;<br /> delete from sec_privilege_modules where created_by = v_user;<br /> delete from sec_privilege_roles where created_by = v_user;<br /> delete from sec_privileges where created_by = v_user;<br /> delete from sec_role_mappings where created_by = v_user;<br /> delete from sec_roles where created_by = v_user;<br /> delete from ords_schemas where created_by = v_user;<br /> commit;<br /> dbms_output.put_line('end remove schema entries');<br />end remove_schema_entries;<br />/<br />grant execute on ords_metadata.remove_schema_entries to public; </blockquote>
<blockquote class="tr_bq">
create public synonym ords_remove_schema_entries for ords_metadata.remove_schema_entries;</blockquote>
</div>
<div>
<br /></div>
<div>
To use this procedure, execute it with the following syntax:</div>
<br />
<blockquote>
set serveroutput on<br /><br />begin<br /> ords_remove_schema_entries;<br />end;<br />/</blockquote>
<br />
This solution has been developed with ORDS 18.3. </div>
Huysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.comtag:blogger.com,1999:blog-8800386591181069931.post-38526205947932199602018-07-16T00:28:00.005-07:002018-07-16T00:28:39.511-07:00APEX 5.0 Cascading reports<h3>
Business case</h3>
<div>
You want to create a page with two or more reports that are connected with each other. A kind of master-detail for reports.</div>
<div>
In this example we show the list of departments and as a child report we show the employees of that department.</div>
<div>
<br /></div>
<h3>
Solution</h3>
<div>
We start with building a blank page for our reports. Add the different report regions on the page. Whether you are using interactive reports or classic ones, it doesn't matter. The solution works for both.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxPhu1YqXnZCexIlHgLi6XMh370aX7HVgNaylQSaMBsoknglkOrjFctKNMJlLeVpYRxyyC3FnlGU49thU3j8BcsTt8TRi_lodWoDXeTbQAyumkDtyF_IvGN4S1sjWAvN_a16JDquKYj7Q/s1600/cascading_reports_01.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="754" data-original-width="1600" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxPhu1YqXnZCexIlHgLi6XMh370aX7HVgNaylQSaMBsoknglkOrjFctKNMJlLeVpYRxyyC3FnlGU49thU3j8BcsTt8TRi_lodWoDXeTbQAyumkDtyF_IvGN4S1sjWAvN_a16JDquKYj7Q/s320/cascading_reports_01.JPG" width="320" /></a></div>
<div>
<br /></div>
<div>
Once the reports are present and working independently, we can start making them connected.</div>
<div>
The first report is called master and the second one is called the detail report.</div>
<div>
<br /></div>
<div>
Follow these steps to connect the reports:<br />
<br />
<ol>
<li>Create the necessary page items to hold the information to be passed on to the detail report. In my case this is only the primary key. So I create a page item called P7_DEPT_PK_ID. These page items can be set to hidden, since they have no added value for the end-user. But for testing purposes, we lease them visible so we can see what is being passed on. You can make them hidden, once everything is working correctly.<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtiTY1ylCl-Lc-_LiCScJlVmjyZ8Vuka9AHZP7JwfU-eM-UpDVc_v7kH3TxDcy2FQ8imNqB416VDMUDHzeYKctvz0Iizt3x_XqXUoA5YUbcg-OYC9yhj2_3-lg11oCsGrwQL4MItkKZag/s1600/cascading_reports_02.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="270" data-original-width="298" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtiTY1ylCl-Lc-_LiCScJlVmjyZ8Vuka9AHZP7JwfU-eM-UpDVc_v7kH3TxDcy2FQ8imNqB416VDMUDHzeYKctvz0Iizt3x_XqXUoA5YUbcg-OYC9yhj2_3-lg11oCsGrwQL4MItkKZag/s200/cascading_reports_02.JPG" width="200" /></a></div>
</li>
<li>Now we need some javascript-code to pass the values of the current selected master record to these page items. The easiest way is by using a link column on the master report. As target for this link-column, we use an URL with the following destination:<br /><div style="text-align: center;">
javascript:$s('P7_DEPT_PK_ID','#DEPARTMENT_ID#');</div>
You can see here that we are using a method called "$s", which can be used to put values in items. As parameters we give the name of the destination parameter and the value, which in this case is the DEPARTMENT_ID from the currently selected master record.<br /><div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-ZNvxVNiPCTSeu8J3HXeGbS7FR8hRCAI05GhpS9-gHwHcjMQ8xpfTuttzs7xSjCkw1PRmmlJY4d_gKygljD19Syb90pO9xlRBNX7vOAutg3m0QLAme-YGHUhDKjX6GK1WBphtjeNjTpM/s1600/cascading_reports_03.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="572" data-original-width="1559" height="117" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-ZNvxVNiPCTSeu8J3HXeGbS7FR8hRCAI05GhpS9-gHwHcjMQ8xpfTuttzs7xSjCkw1PRmmlJY4d_gKygljD19Syb90pO9xlRBNX7vOAutg3m0QLAme-YGHUhDKjX6GK1WBphtjeNjTpM/s320/cascading_reports_03.JPG" width="320" /></a>
</div>
<br />Some nice explanation on these javascript functions can be found in this blog: <a href="https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/6341/index-en.html">https://apex.oracle.com/pls/apex/germancommunities/apexcommunity/tipp/6341/index-en.html</a>.</li>
<li>Once the value of the PK is now in this page item, we still need to refresh the detail report. This can be done through the use of a dynamic action. In this dynamic action we indicate that whenever the page item P7_DEPT_PK_ID is changed, we need to refresh the detail report.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi85E_7eyOvFItkuPvjn0M0othUy5stblZi5LIJo8-p6ULaEIdM0j0nU9tQA2AK58S1P6kR4LZQKXu6PjQ36PHpG7aBRuXoHtogxTvAefG4N_yAL0Kr6gYJrJpMkiD-im-tg7gdjoj49mc/s1600/cascading_reports_04.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="188" data-original-width="365" height="102" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi85E_7eyOvFItkuPvjn0M0othUy5stblZi5LIJo8-p6ULaEIdM0j0nU9tQA2AK58S1P6kR4LZQKXu6PjQ36PHpG7aBRuXoHtogxTvAefG4N_yAL0Kr6gYJrJpMkiD-im-tg7gdjoj49mc/s200/cascading_reports_04.JPG" width="200" /></a>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO8-k8374yGfM-oz8f-q591cshXJqHxrd-Iedlzo4IL5z-Mf7_nM-O9p9VoiGB_F8KWlLu2JOkuivSf5IJFbBj2U8IS3vRYZreNouK6rQpxbrIJa9-wGhYXC93-JQ-i7JHLfdtZIjwgDw/s1600/cascading_reports_05.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="401" data-original-width="434" height="184" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO8-k8374yGfM-oz8f-q591cshXJqHxrd-Iedlzo4IL5z-Mf7_nM-O9p9VoiGB_F8KWlLu2JOkuivSf5IJFbBj2U8IS3vRYZreNouK6rQpxbrIJa9-wGhYXC93-JQ-i7JHLfdtZIjwgDw/s200/cascading_reports_05.JPG" width="200" /></a>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtBg79DoJDm3IlO4MT3B4N5c6HANpeKfPnYsplL5DbgiUANF_Gz0O4ZYpYzlVo5kPsBlmsXlxoyuk_8GLWJmXHXsWRty4Wh0JaatEBzM7Bnh-ssdRIZEZbNrTBe9tfoUZ1dadVDpVFMCI/s1600/cascading_reports_06.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="502" data-original-width="431" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtBg79DoJDm3IlO4MT3B4N5c6HANpeKfPnYsplL5DbgiUANF_Gz0O4ZYpYzlVo5kPsBlmsXlxoyuk_8GLWJmXHXsWRty4Wh0JaatEBzM7Bnh-ssdRIZEZbNrTBe9tfoUZ1dadVDpVFMCI/s200/cascading_reports_06.JPG" width="171" /></a>
</li>
<li>The only remaining thing to do is to use the page item in the query of the detail report.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5hOmdYIlPntZuwgYGCejVxyI7alLtjdAmAD8OAiyjidnqOOpxT4FiQO_XICHaOGcdbsIGFxWi6ikR4m6Sx6-HBsBSb6h4i1-i_A3kHcmphaQpnqfyJFpcw5ad9jq97VSo2X9maQ3szKc/s1600/cascading_reports_07.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="352" data-original-width="520" height="135" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5hOmdYIlPntZuwgYGCejVxyI7alLtjdAmAD8OAiyjidnqOOpxT4FiQO_XICHaOGcdbsIGFxWi6ikR4m6Sx6-HBsBSb6h4i1-i_A3kHcmphaQpnqfyJFpcw5ad9jq97VSo2X9maQ3szKc/s200/cascading_reports_07.JPG" width="200" /></a></div>
</li>
<li>Because we are using javascript to fill in the page item, we need to submit the page item to the server, when we are refreshing the detail report. This is done through the property 'Page Items to Submit' on the detail report.<br /><div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggulRVrpZs5OCJfs7O68o_3WDbnfoQCmpjSLcL6j1cdZvudKFjnVxL6c_C5r4n_wl7Ip-c7HlYLFsv2w9o-FFdB1izzfsQuJmjyIUK5pxHm1teqNtZ32eonLqDt752Ay8jS3tI0JxCUIc/s1600/cascading_reports_08.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="496" data-original-width="370" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggulRVrpZs5OCJfs7O68o_3WDbnfoQCmpjSLcL6j1cdZvudKFjnVxL6c_C5r4n_wl7Ip-c7HlYLFsv2w9o-FFdB1izzfsQuJmjyIUK5pxHm1teqNtZ32eonLqDt752Ay8jS3tI0JxCUIc/s200/cascading_reports_08.JPG" width="148" /></a></div>
</li>
<li>Now you can run your solution</li>
</ol>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirW93h1a9jhkRV5ScB2zPvF54CONQM_afzQFDpx9KY54QQE1UCkgWhiib6RS4Y-M6eb5oeUQVjWAaTq-wCE_oJz7hKXLBMAVID0gzISnqzReri1noAP8G386kRNMTSj5YvuZkqzZUFy7o/s1600/cascading_reports_09.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="797" data-original-width="1526" height="167" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirW93h1a9jhkRV5ScB2zPvF54CONQM_afzQFDpx9KY54QQE1UCkgWhiib6RS4Y-M6eb5oeUQVjWAaTq-wCE_oJz7hKXLBMAVID0gzISnqzReri1noAP8G386kRNMTSj5YvuZkqzZUFy7o/s320/cascading_reports_09.JPG" width="320" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
Huysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.com14Prins Boudewijnlaan 43, 2650 Edegem, België51.148999895349057 4.435296533920336551.14775489534906 4.4327750339203362 51.150244895349054 4.4378180339203368tag:blogger.com,1999:blog-8800386591181069931.post-66886125639782372012018-07-06T08:19:00.002-07:002018-07-15T23:27:59.896-07:00APEX 5.0 Example use of collectionsThis is my first attempt in using collections within Oracle APEX.<br />
I just save this code for later use.<br />
<br />
I used APEX 5.0 on the Oracle cloud.<br />
<br />
I created 2 pages:<br />
<br />
<ul>
<li>Overview Page</li>
<li>Edit Page</li>
</ul>
<div>
In the Overview page I load through a select-statement the data into a collection during the Pre-Rendering > Before Header > Processes > PL/SQL action, with the following code:</div>
<div>
<pre class="brush:sql">Declare
l_query varchar2(300) := 'select department_id, department_name, manager_id from departments';
l_coll_name varchar2(50) := 'DEPARTMENTS';
Begin
APEX_DEBUG.ENABLE();
APEX_DEBUG.INFO('Start fetchData');
if not APEX_COLLECTION.COLLECTION_EXISTS(l_coll_name)
then
APEX_DEBUG.INFO('Collection ' ||l_coll_name||' does not exist, creating a new one');
-- Create the collection from the query
APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERY_B (
p_collection_name => l_coll_name,
p_query => l_query);
end if;
APEX_DEBUG.INFO('End fetchData');
End;
</pre>
<br />
I'm creating the collection only the first time that I'm entering the page. So when changes are made on the second page, these changes are immediately shown on this page on returning.<br />
<br />
To show the data in a report, you can use a classic report with a query which looks like this one:<br />
<pre class="brush:sql">select
c001,
c002,
c003,
c004,
c005
from apex_collections
where collection_name = 'DEPARTMENTS'
;
</pre>
<br />
In this simple example, I just copy the values from the collections to the editable fields on the Edit Page through the link-functionality.<br />
When showing the Edit page, I add a save button, which on submitting the page saves the changes in the collection and the db if needed. These operations are performed in the Processing > Processes > PL/SQL code with the following code:<br />
<br />
<pre class="brush:sql">declare
cursor c_get_seq
is
SELECT seq_id
FROM APEX_collections
WHERE collection_name = 'DEPARTMENTS'
AND c001 = :P6_DEPTID
;
r_seq c_get_seq%rowtype;
begin
open c_get_seq;
fetch c_get_seq into r_seq;
if c_get_seq%found
then
APEX_DEBUG.INFO('Collection found, updating);
APEX_COLLECTION.UPDATE_MEMBER (
p_collection_name => 'DEPARTMENTS',
p_seq => r_seq.seq_id,
p_c001 => :P6_DEPTID,
p_c002 => :P6_DEPTNAME,
p_c003 => :P6_MANAGER);
commit;
-- update departments set department_name = :P6_DEPTNAME, manager_id = :P6_MANAGER where department_id = :P6_DEPTID;
else
APEX_DEBUG.ERROR('Collection not found!!');
end if;
close c_get_seq;
end;
</pre>
<br />
After clicking on the save-button, the collection gets updated and the user returned to the previous page.</div>
Huysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.comtag:blogger.com,1999:blog-8800386591181069931.post-74703238403016446762016-12-08T06:42:00.000-08:002016-12-08T06:42:45.456-08:00Finding jdbc/db connection leaks<h3>
Reason</h3>
<div>
Once I started creating my own application module instances, I got database connections not being released anymore. And because we are all working in complex and big application, I didn't found the cause of the leak.</div>
<div>
This blog will help you in finding the cause for the jdbc leak.</div>
<div>
All my knowledge is based on the blog from Raul Castillo:<a href="http://blog.sysco.no/db/locking/jdbc-leak/" target="_blank">JDBC Connection Leak</a></div>
<div>
<br /></div>
<h3>
Finding that you have leaks</h3>
<div>
The first thing to do is finding whether you have leaks. This can be done through the end-users stating that the application returns an error stating no connections are available anymore.</div>
<div>
Now you can start investigating the cause of this issue.</div>
<div>
You can use the Fusion Middleware console to investigate from which datasource the connections are not freed anymore. It has a lot of helpfull statistics.</div>
<div>
<ol>
<li>Log in the Fusion Middleware Console : http(s)://<host>:<port>/em</li>
<li>Go to your application on the left side under Farm and Application Deployments</li>
<li>Click on the name of your application</li>
<li>In the Application Deployment menu you can choose for Performance Summary.</li>
<li>This will bring you to a new screen showing some default selected diagrams. </li>
<li>Click on the "Show Metric Palette" button to change the diagrams being showed.</li>
<ol>
<li>For this use case, you want to go to Related Targets > ServerName > Metrics > Datasource metrics > YourDataSourceName, domain level</li>
<li>Here can select the following interessanting ones:</li>
<ol>
<li>Datasource - Available connections</li>
<li>Datasource - Connection Leaks</li>
<li>Datasource - Connection Pool size</li>
<li>Datasource - Connections in use</li>
</ol>
</ol>
</ol>
<div>
These graphs are very handy when you want to see the evolution of the use of the connections of the datasource. You can open multiple graphs from different datasource at the same time. So you can correctly define the datasource that is being leaking connections.</div>
</div>
<div>
<br /></div>
<div>
Once you have determined the datasource causing the leaks, you need to make sure WebLogic Server is cleaning them up after a while. This can be configured in the WebLogic console:</div>
<div>
<ol>
<li>Login to WLS Console : http(s)://<host>:<port>/console</li>
<li>Go to the datasources defined in the domain</li>
<li>Select the datasource causing the leaks</li>
<li>Go to Configuration > Connection Pool > Advanced </li>
<li>Make sure the parameter Inactive Connection Timeout is a positive number. Put it to 5 for testing. This parameter will cause WebLogic Server to cleanup stuck db connections and causing a nice error message in the log files.</li>
<li>You can find the logging in your <WLS managed server name>.log file.</li>
<li>It is this error message that you need. The Inactive Connection Timeout identifies after how many seconds he will try to cleanup the db connections. When he finds db connections leaking, he will log a java stack trace indicating from where the leak is originating. Here is an example:<br /><br />####<Dec 8, 2016 8:12:07 AM CET> <Warning> <Common> <zcorinthe-1> <dev01-S1mc> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <1bf3554408c0f552:-3a194c43:158d428de6f:-8000-0000000000002b61> <1481181127371> <BEA-000620> <<b>Forcibly releasing inactive resource</b> "autoCommit=false,enabled=true,isXA=false,isJTS=false,vendorID=100,connUsed=false,doInit=false,'null',destroyed=true,poolname=MCPrintDev,appname=null,moduleName=null,connectTime=87,dirtyIsolationLevel=false,initialIsolationLevel=2,infected=false,lastSuccessfulConnectionUse=1481181100045,secondsToTrustAnIdlePoolConnection=10,currentUser=java.lang.Exception<br /> at weblogic.jdbc.common.internal.ConnectionEnv.setup(ConnectionEnv.java:366)<br /> at weblogic.common.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:373)<br /> at weblogic.common.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:339)<br /> at weblogic.jdbc.common.internal.ConnectionPool.reserve(ConnectionPool.java:469)<br /> at weblogic.jdbc.common.internal.ConnectionPool.reserve(ConnectionPool.java:363)<br /> at weblogic.jdbc.common.internal.ConnectionPoolManager.reserve(ConnectionPoolManager.java:125)<br /> at weblogic.jdbc.common.internal.ConnectionPoolManager.reserve(ConnectionPoolManager.java:158)<br /> at weblogic.jdbc.pool.Driver.connect(Driver.java:132)<br /> at weblogic.jdbc.jts.Driver.getNonTxConnection(Driver.java:658)<br /> at weblogic.jdbc.jts.Driver.connect(Driver.java:127)<br /> at weblogic.jdbc.common.internal.RmiDataSource.getConnectionInternal(RmiDataSource.java:548)<br /> at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:513)<br /> at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:506)<br /> at oracle.jbo.server.DBTransactionImpl.establishNewConnection(DBTransactionImpl.java:1056)<br /> at oracle.jbo.server.DBTransactionImpl.initTransaction(DBTransactionImpl.java:1237)<br /> at oracle.jbo.server.DBTransactionImpl.initTxn(DBTransactionImpl.java:6964)<br /> at oracle.jbo.server.DBTransactionImpl2.connectToDataSource(DBTransactionImpl2.java:304)<br /> at oracle.jbo.server.DBTransactionImpl2.connectToDataSource(DBTransactionImpl2.java:335)<br /> at oracle.jbo.common.ampool.DefaultConnectionStrategy.connect(DefaultConnectionStrategy.java:203)<br /> at oracle.jbo.server.ApplicationPoolMessageHandler.doPoolConnect(ApplicationPoolMessageHandler.java:620)<br /> at oracle.jbo.server.ApplicationPoolMessageHandler.doPoolMessage(ApplicationPoolMessageHandler.java:425)<br /> at oracle.jbo.server.ApplicationModuleImpl.doPoolMessage(ApplicationModuleImpl.java:9518)<br /> at oracle.jbo.common.ampool.ApplicationPoolImpl.sendPoolMessage(ApplicationPoolImpl.java:4529)<br /> at oracle.jbo.common.ampool.ApplicationPoolImpl.prepareApplicationModule(ApplicationPoolImpl.java:2459)<br /> at oracle.jbo.common.ampool.ApplicationPoolImpl.doCheckout(ApplicationPoolImpl.java:2269)<br /> at oracle.jbo.common.ampool.ApplicationPoolImpl.useApplicationModule(ApplicationPoolImpl.java:3168)<br /> at oracle.jbo.common.ampool.SessionCookieImpl.useApplicationModule(SessionCookieImpl.java:592)<br /> at oracle.jbo.http.HttpSessionCookieImpl.useApplicationModule(HttpSessionCookieImpl.java:224)<br /> at oracle.jbo.common.ampool.SessionCookieImpl.useApplicationModule(SessionCookieImpl.java:525)<br /> at oracle.jbo.common.ampool.SessionCookieImpl.useApplicationModule(SessionCookieImpl.java:520)<br /> at oracle.jbo.client.Configuration.getApplicationModule(Configuration.java:1609)<br /> at oracle.jbo.client.Configuration.createRootApplicationModule(Configuration.java:1514)<br /> at oracle.jbo.client.Configuration.createRootApplicationModule(Configuration.java:1485)<br /> at <b>be.contribute.demo.adf.DocumentManagement.createAMInstance</b>(DocumentManagement.java:127)<br /> at be.contribute.demo.adf.DocumentManagement.<init>(DocumentManagement.java:110)<br /> at be.contribute.demo.adf.DocumentManagement.<init>(DocumentManagement.java:67)<br /> at be.contribute.demo.adf.SimpleDocumentGeneration.<init>(SimpleDocumentGeneration.java:83)<br /> at be.contribute.demo.adf.bipublisher.SimpleEnvelopeDocumentGeneration.<init>(SimpleEnvelopeDocumentGeneration.java:38)<br /> at be.contribute.demo.adf.bipublisher.AcknowledgmentRecieptGeneration.<init>(AcknowledgmentRecieptGeneration.java:23)<br /> at be.contribute.demo.adf.bipublisher.ReportDataControl.generateReportMotives(ReportDataControl.java:503)<br /> at sun.reflect.GeneratedMethodAccessor1991.invoke(Unknown Source)<br /> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br /><br /> at java.lang.reflect.Method.invoke(Method.java:606)<br /> at oracle.adf.model.binding.DCInvokeMethod.invokeMethod(DCInvokeMethod.java:690)<br /> at oracle.adf.model.binding.DCDataControl.invokeMethod(DCDataControl.java:2181)<br /></li>
<li>Now you look for your classes in the stack trace and make sure that for every creation of an am instance, you also close it correctly.</li>
</ol>
<div>
Hope this can help you in finding database leaks.</div>
</div>
<div>
<br /></div>
<div>
Have fun.</div>
Huysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.com1tag:blogger.com,1999:blog-8800386591181069931.post-90529954793355423802014-04-15T06:44:00.001-07:002014-04-15T06:45:54.672-07:00ContributeGroep Sessions for OOW14 & JavaOne14In the spirit of sharing the wonderful things our consultants do at customers, we entered a few of their efforts as proposals for Oracle Open World and JavaOne.<br />
<br />
Here is the list of our entries:<br />
<br />
<br />
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse; width: 785px;">
<!--StartFragment-->
<colgroup><col style="width: 65pt;" width="65"></col>
<col style="mso-width-alt: 20053; mso-width-source: userset; width: 470pt;" width="470"></col>
<col style="mso-width-alt: 7893; mso-width-source: userset; width: 185pt;" width="185"></col>
<col style="width: 65pt;" width="65"></col>
</colgroup><tbody>
<tr height="16" style="height: 16.0pt;">
<td class="xl66" height="16" style="height: 16.0pt; width: 65pt;" width="65"><u><b>ID</b></u></td>
<td class="xl66" style="width: 470pt;" width="470"><u><b>Proposed Session Title</b></u></td>
<td class="xl66" style="width: 185pt;" width="185"><b><u>Type</u></b></td>
<td class="xl66" style="width: 65pt;" width="65"><b><u>Event</u></b></td>
</tr>
<tr height="16" style="height: 16.0pt;">
<td height="16" style="height: 16.0pt;">CON4630</td>
<td class="xl65">Integration of Neo4j with Webcenter Content</td>
<td class="xl65">Conference Session</td>
<td>OOW</td>
</tr>
<tr height="102" style="height: 102.0pt; mso-height-source: userset;">
<td class="xl64" height="102" style="height: 102.0pt;"></td>
<td class="xl67" colspan="3" style="width: 720pt;" width="720">Had enough of the
linear searching into your documents?
Needing a dynamic search path in runtime? Welcome to the world of graph
databases. Using a graph database to
perform searches, allows you to add functionality from a totally different
order. Think about searches on
relationships between documents or show recommendations of other users into
your information model, just to name a few.
Basically, we add relationships between metadata, content, persons,
applications, even if they didn’t exist before. Graph databases allow for a dynamic search
structure in runtime, providing more flexibility and agility to your portal.</td>
</tr>
<tr height="16" style="height: 16.0pt;">
<td height="16" style="height: 16.0pt;">CON3759</td>
<td class="xl65">Securing web services - How to make a complex task look easy?</td>
<td class="xl65">Conference Session</td>
<td>JavaOne</td>
</tr>
<tr height="104" style="height: 104.0pt; mso-height-source: userset;">
<td class="xl64" height="104" style="height: 104.0pt;"></td>
<td class="xl67" colspan="3" style="width: 720pt;" width="720">Not many developers
like to implement or expose secured web services. This is probably because securing web
services is a complex matter. Next to
the complexity, the client/server architecture comes into play. Both sides, client and server, will have
their own implementation. In an ideal
world your backend code will not be impacted with the technologies in which
it is build, nor which type of security you would choose. Since we are not
living in a perfect world, those differences do have a big impact on your
approach in bridging those 2 worlds. During this session we will explain how
an enterprise service bus could help you out.
Not only in solving this predicament, also in adding clarity in your
separation of concerns design.</td>
</tr>
<tr height="16" style="height: 16.0pt;">
<td height="16" style="height: 16.0pt;">CON3690</td>
<td class="xl65">Single-click deployment in Application Express</td>
<td class="xl65">Conference Session</td>
<td>OOW</td>
</tr>
<tr height="131" style="height: 131.0pt; mso-height-source: userset;">
<td class="xl64" height="131" style="height: 131.0pt;"></td>
<td class="xl67" colspan="3" style="width: 720pt;" width="720">Software development
with Oracle Application Express is by no means affiliated with enterprise web
development. Oracle itself positions APEX as a so-called rapid application
development tool, but recommends other products as soon as projects get
larger and more complex. I honestly believe, that APEX has the potential to
cope with these large-scale projects. Needless to say, you need more than
just plain APEX... <br />
<br />
We have managed to incorporate a set of powerful tools in our day-to-day
development process. These tools in combination with APEX allow teams to
build high-quality database applications in a professional way. It takes no
more than a single click on a button to fully deploy your application(s) to a
target environment.</td>
</tr>
<tr height="16" style="height: 16.0pt;">
<td height="16" style="height: 16.0pt;">CON4662</td>
<td class="xl65">Taskflows on Sale</td>
<td class="xl65">Conference Session</td>
<td>OOW</td>
</tr>
<tr height="89" style="height: 89.0pt; mso-height-source: userset;">
<td height="89" style="height: 89.0pt;"></td>
<td class="xl67" colspan="3" style="width: 720pt;" width="720">Get ready for an
alternative way of navigating between taskflows within ADF. Instead of
providing only the valid navigation route, we allow for a more flexible
system avoiding dependency problems. This opens the way for a free form
navigation keeping into account security and his history. One of the
possible implementations of this solution is the creation of a menu that is
based on beans or configuration files. Introducing history to this system can
overcome the use of the browser back button.</td>
</tr>
<tr height="37" style="height: 37.0pt; mso-height-source: userset;">
<td height="37" style="height: 37.0pt;"></td>
<td class="xl67" colspan="3" style="width: 720pt;" width="720">The pattern is already
in use at a Belgian customer in providing web(ADF)-based solutions. This
customer will be present to explain the business value and agility this
brings to their application.</td>
</tr>
<!--EndFragment-->
</tbody></table>
Huysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.com0tag:blogger.com,1999:blog-8800386591181069931.post-72479394460177959892014-03-24T01:51:00.001-07:002014-03-24T12:04:32.419-07:00User Experience Event @AMISI had the pleasure to join the user experience event @AMIS in the Netherlands. It was an event organised together with Oracle UX Team. <br />
As a general impression: very well done. Parking, event location, different themes and very good content are the main positive points that jumps into my mind.<br />
Unfortunately were the sessions programmed without buffer time, so that when you followed one session you are certainly to be late for the next session in another room. Luckily sessions were repeated, so I didn't have to miss anything and I was able to visit the different Oracle stands explaining the diversity of UX.<br />
<br />
For a full list of the sessions, take a look at <a href="http://www.amis.nl/UxEvent/Lecture_details.html">http://www.amis.nl/UxEvent/Lecture_details.html</a>.<br />
Here are some impressions I took from a couple of sessions:<br />
<h4>
UX Directions with HTML 5</h4>
This session was presented by a surprise act, in the sense that it was not Noel Portugal as presented on the site, instead it was a Belgian Oracle UX team member, namely Mark Vilrokx. He showed us what they are working on. It is very interesting to see how Oracle is investing into new technologies. The things this guy showed us, was even new to our UX designer. He focused on new possibilities with browser interactions in the mobile devices. Knowing that a server can actually track your whereabouts, how bright it is in the room, whether you are using the application or not, is astonishing. Not only passive information was gathered, also actions were triggered on the device. Things like activating the vibrating functionality, playing a movie without user interaction. This is a clear step forward for the browser in the war against native/hybrid applications. Which made the off-line capability the only remaining drawback of the browser app in the mobile environment.<br />
<br />
The architecture he used was a standard one: HTML5 -> Ajax calls -> REST Services. To develop the mobile app, he used the Fuse Bootstrap, which is an adapted version of the Twitter Bootstrap.<br />
<br />
Not presented in this session, but linked to the presenter is the <b>Oracle Voice </b>product. It is a standalone product that will be released with the version 9 of HCM Cloud application. It is an app that you can install on your phone or tablet, allowing you to speak to the application. Not only in a question-response mode, where you answer to the question of the device, but also in entire sentences.<br />
Example: Create a new appointment Follow up meeting at Contribute next monday. Not only will the solution interpret the sentence, it will also automatically fill in the fields of the new appointment. For the missing information, extra questions will be asked. When you have multiple opportunities for this account, a list of the possible opportunities for that account will be presented.<br />
What is even more amazing is that the application does not need to learn. You used to spend an hour saying/pronouncing bizarre and difficult words, this is not needed anymore. Which indirectly means that you need to speak American English very well, preferably with a Californian accent :-).<br />
A nice site note for my Belgian friends, this product uses Nuance for the Speech-to-Text and Text-to-Speech functionality. Nuance bought the voice recognition software from our West-Vlaamse creatives L&H and is using their solution as one of the possible resolution software for the Speech-to-Text challenge.<br />
<br />
<h4>
Oracle's Strategy for Cloud User Experience</h4>
This session was presented by Jeremy Ashley, what a presenter. It is not the content that struck me, instead his way of presenting and the feeling of clarity he gave us about this topic. A must seen presenter!!<br />
Back to the content. The three main topics for Oracle UX are Simplicity, Mobility and Extensibility.<br />
Simplicity is referring to the completeness of your solution. It must be no too much, neither not too little, it must be exact for the job at hand.<br />
Mobility is not about the mobile devices, instead it focusses on the way we work. How we work differently now and in the future, then a couple of years ago.<br />
The audience of these type of applications are people who will be using these not too often. Hence the importance of keeping the distance between wanting to do something and doing it, must be a as small as possible. The process that is the main driver, listens to the expression: Glass - Scan - Commit. Resulting in an application giving the user an high level overview of the data, allowing him to drill down for more detail and then close his action. This approach is very closely linked to the idea of 10-90-90, meaning that 10% of the tasks are performed by 90% of the users in 90% of the time. These 10% are the main focus of these applications. For full feature functionality, the user will be brought to the actual application.<br />
Based on their experience with the Oracle Cloud solutions and fusion applications, the UX team delivers a set of patterns for you to use. These can be found at <a href="http://www.oracle.com/ux">http://www.oracle.com/ux</a>.<br />
While most of the development and testing is done through HTML5 and then pushed to the ADF team, APEX is gaining momentum here. In the "near" future, the APEX team will also include these patterns, just like ADF does.<br />
<br />
<h4>
UX Today with ADF</h4>
A presentation done by Sten Vesterli. This session was really focused on ADF, like the title mention. From the first moment it was clear that Sten was a guy with a lot of experience. Here are some of his main points during the session:<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="http://www.vesterli.com/blog/wp-content/uploads/2014/03/UX-patterns.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" src="http://www.vesterli.com/blog/wp-content/uploads/2014/03/UX-patterns.png" height="269" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="font-size: 13px; text-align: center;">From http://www.vesterli.com/2014/03/20/good-user-experience-at-low-cost/</td></tr>
</tbody></table>
<ul>
<li>A clear graph on the different types of applications you can build:</li>
<li>Use GUI mockup tools to create samples of your UI which don't have a high fidelity. Reason: possible no feedback from end-users due to the hard work already done AND the possible feedback you get is that it could be finished tomorrow. Conclusion: make sketches. Possible tool: <a href="http://balsamiq.com/products/mockups" target="_blank">Balsamiq</a></li>
<li> Another great point made by the presenter is the difference in type of application you can build between Forms,Apex and ADF. While Forms and Apex applications have a 1-1 relationship with the underlying data model, ADF doesn't. With ADF you have more a n-n relationship, allowing for a far greater UI experience. Conclusion here: do not generate your UI screens.<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih87xYfeWA6fsHonxVJLcbzF9SQTEmxDuwdndhMGsghgQ1yPX8C6xfrMe2eZha2Hk9j-D4RPdSo-Zb_SMS_dvQYHbvoWu5abMerDUcvvwOYiIZQxEq7LsI8hFwJ9YfceqG-TGvl0LoJsA/s3200/Screen+Shot+2014-03-24+at+09.11.17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih87xYfeWA6fsHonxVJLcbzF9SQTEmxDuwdndhMGsghgQ1yPX8C6xfrMe2eZha2Hk9j-D4RPdSo-Zb_SMS_dvQYHbvoWu5abMerDUcvvwOYiIZQxEq7LsI8hFwJ9YfceqG-TGvl0LoJsA/s3200/Screen+Shot+2014-03-24+at+09.11.17.png" height="179" width="320" /></a></div>
</li>
</ul>
<h4>
Don't generate your user interface, design IT!</h4>
<div>
Session given by Lonneke Dikmans from Vennster, ACE Director in SOA & BPM.</div>
<div>
The problem according to Lonneke is:</div>
<div>
<ul>
<li>Using BPEL/BPM Human Tasks</li>
<ul>
<li>too fine grained</li>
<li>too much data in process</li>
<ul>
<li>need to adapt the process to changes in the UI</li>
<li>inflexible for use -> ex. no bulk operations possible</li>
</ul>
<li>not enough data for the UI -> only task data is available</li>
</ul>
</ul>
<div>
The solution for this is to take an alternative approach:</div>
</div>
<div>
<ul>
<li>separate both solutions => BPEL/BPM and UX</li>
<li>take the following actions in your project</li>
<ul>
<li>Define the different personas. Who will be using the application, how often, from which type of devices, do they have knowledge of the app, ...</li>
<li>Define different scenario's for different type of personas</li>
<li>Design the interaction process</li>
</ul>
<li>Ex: while the HR persons define the process, it should be the users themselves who define the UX/App</li>
</ul>
<div>
My question for Lonneke: how should we build BPM applications then? From the BPM flow or build a separate application that calls on the BPM API's?</div>
</div>
<div>
Answer from Lonneke: take the latter one. This way the UI is really build for the end user and you have more flexibility.</div>
<div>
<br /></div>
<h4>
Leveraging FMW for UX</h4>
<div>
Another session from Lonneke Dikmans. This session was a simple overview of the main components of the FMW stack of Oracle. Some points worth remembering:</div>
<div>
<ul>
<li>How to test the experience:</li>
<ul>
<li>Do Usability testing</li>
<li>Do SCA testing => use mock responses</li>
<li>Do Load testing</li>
</ul>
<li>Tip: learning by doing : learn whether something works or not</li>
<ul>
<li>ex: google class: 1st version done in 2 days</li>
</ul>
<li>Monitoring</li>
</ul>
<h4>
Oracle and Mobile: From Design to Device; The tools that make it happen</h4>
</div>
<div>
Session by Luc Bors. Simple overview of ADF Mobile.</div>
<div>
There seems to be a misunderstanding in the comparison between ADF mobile or hybrid solutions and native solutions. According to Luc and Oracle(Oracle is saying this also, I know I did it also before), the effort in making a native app is a lot bigger and more difficult then making a hybrid solution for multiple platforms. It is true that you need to make an app for each platform and that reuse at the level of the mobile app is almost zero. Nevertheless, making these mobile apps is only a small part of the total project. The major effort resides in building the back-end services, including security.</div>
<div>
Take into account that the hybrid solution from Oracle only supports 2 platforms, while there are 4 in the market. </div>
<div>
<br /></div>
<div>
According to me is Oracle ADF great at the data oriented apps, while building great looking apps are better done in native solutions. One of our main references in this area is the Royal Belgian Football Association, who are really looking at their target audience and decide on the technology uses, like Oracle Forms, ADF, ADF Mobile and native mobile applications.</div>
<div>
<br /></div>
<h4>
Conclusion</h4>
<div>
A great event with may thanks to AMIS and Oracle for organising this. All speakers at this event where ACE Directors or Oracle employees, pushing the available knowledge at this event at a great height. Looking forward for a next event like this.<br />
At the following URL you can have a look at the presentations themselves: <a href="http://technology.amis.nl/2014/03/24/sharing-the-slides-of-the-ux-event-presentations/">http://technology.amis.nl/2014/03/24/sharing-the-slides-of-the-ux-event-presentations/</a><br />
<br /></div>
Huysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.com1tag:blogger.com,1999:blog-8800386591181069931.post-30552009663110793252014-01-03T07:02:00.002-08:002014-01-03T07:02:53.765-08:00ADF: Putting IE in a certain document mode<h3>
Problem</h3>
<div>
In our ADF application we used some javascript to put the focus on the first field of an af:query component. This seems to work great when running directly from JDeveloper, but doesn't if the application is deployed on a separate WLS.</div>
<div>
<br /></div>
<h3>
Solution</h3>
<div>
First we thought it is the javascript itself, but this was not possible since we do not change the code.</div>
<div>
One of our JSF experts, Rudy De Busscher, figured out that the compatibility mode of IE changed between both deployments. How or why, remains still a mystery.</div>
<div>
<br /></div>
<div>
So, now we need to force IE to keep his IE8 compatibility mode. To do this, you need to put a meta tag in the header of your page. This is easy enough to do in ADF, in the af:document tag, add a facet with this tag in, like this:</div>
<div>
<br /></div>
<pre class="brush:java">
<af:document id="d1" title="Test Javascript">
<f:facet name="metaContainer">
<f:verbatim>
<meta http-equiv="x-ua-compatible" content="IE=8"/>
</f:verbatim>
</f:facet>
....
</pre>
<div>
<br /></div>
<div>
The problem with this solution is that the meta-tag will be put after your stylesheet tags, which will result in the fact that this meta-tag is not taken into account.</div>
<div>
To solve this problem, you need to perform a small operation. Since this seems to be a hack, I'm not sure it will work in all ADF versions. I tested it with ADF 11.1.1.3.0.</div>
<div>
Make your code look like the following:</div>
<div>
<br /></div>
<pre class="brush:java">
<f:view>
<f:verbatim>
<head><meta http-equiv=x-uq-compatible" content="IE=8"/></head>
</f:verbatim>
<af:document id="d1" title="Test Javascript">
...
</pre>
<div>
To check whether IE is taken this into account, use the F12 key to open the Developer Tools, in the top menu you will find the Document Mode. This will indicate in which mode you are operating. Also have a look at the header of the document, the meta-tag of http-equiv should be after the title, but proceeding the stylesheet tags.</div>
<div>
<br /></div>
<div>
Have Fun.</div>
<div>
<br /></div>
<div>
F.</div>Huysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.com0tag:blogger.com,1999:blog-8800386591181069931.post-50634442040831774662014-01-02T06:59:00.001-08:002014-01-02T06:59:02.783-08:00ADF BC: Find out what is really happening in the database<h3>
Problem</h3>
<div>
While there are multiple ways (see <a href="http://huysmansitt.blogspot.be/2012/09/adf-bc-logging.html" target="_blank">previous blog</a>) within ADF BC to see what is being generated and executed in the database, perhaps you are not satisfied with the information provided nor the overhead of the other loggings which are blocking your clear view on the matter.</div>
<div>
Or perhaps you are missing information like how many times a query is executed, how long it took, how many fetches were used, ... </div>
<div>
<br /></div>
<h3>
Solution</h3>
<div>
Use the logging of the database to find the required information. You can enable your sessions or even the entire database to activate logging that can be used to give you a clear overview on what is being asked from the database.</div>
<div>
To activate this logging you need to perform the following actions:</div>
<div>
<ol>
<li>Activate the logging in your session<br />Execute the following statement : alter session set sql_trace=true<br />You can execute this command in your application module impl class by overriding the afterConnect() method. I'm also using this method to set some optimizer hints for my queries, like optimizer_index_cost_adj and optimizer_index_caching.<br />Example:</li>
<ul>
<li>@Override<br />protected void afterConnect() {<br /> super.afterConnect();<br /> executeCommand("alter session set sql_trace=true");<br />}</li>
</ul>
<li>Perform the necessary actions in your application for which you want to have the trace.</li>
<li>You can now stop the trace by executing the following statement: alter session set sql_trace=false<br />or just perform action 4.</li>
<li>At this point the database will have generated a very detailed, not easy to read and understand trace file. This file can be found under the user dump directory, which is defined by the database parameter user_dump_dest (show parameter user). </li>
<li>Now we need to parse this file to a more readable file by executing the following statement: <br />tkprof <sid>_ora_<pidid>.trc <result_file> sort=fchela<br />Since it is very hard to know what process id you need, I just always took the last one :-)<br />I added the sorting criteria to see the statements first with the biggest elapsed time. Information on all parameters for tkprof can be found <a href="http://docs.oracle.com/cd/B10500_01/server.920/a96533/sqltrace.htm#15653" target="_blank">here</a>.<br />Example : tkprof orcl_ora_2463.trc test.txt sort=fchela </li>
<li>Now you have a file that is readable, namely test.txt. This file will give an overview of all statements being executed by your sessions and at the end an overview. Let's have a look at output for 1 statement.</li>
<li>Only take the statements into account where the parsing user is not SYS. The latter is used for database internal queries and do not adhere to the same tuning rules as your custom queries.</li>
</ol>
<div>
Here is an example output for a very simple query:</div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1Ov-gVN5KyAtlEjp8lKLaIFhewkKtfnw31u-ochGIBTePyon4hjDz5ANfXhW0sXbDudFK6h-Wyy5g33Q8FVTnSfKJJUGp15kjZAxX7wlx-iBP6BvDMk50lgcis7Kq0g3C1bsgpRaqWpU/s1600/Screen+Shot+2014-01-02+at+15.29.55.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="159" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1Ov-gVN5KyAtlEjp8lKLaIFhewkKtfnw31u-ochGIBTePyon4hjDz5ANfXhW0sXbDudFK6h-Wyy5g33Q8FVTnSfKJJUGp15kjZAxX7wlx-iBP6BvDMk50lgcis7Kq0g3C1bsgpRaqWpU/s320/Screen+Shot+2014-01-02+at+15.29.55.png" width="320" /></a></div>
<div>
Let's have a look at the important bits of information:</div>
<div>
<ul>
<li>As 3th part of information you see the query like it has been asked at the db. Here you see whether correct bind variables are used. The only drawback of this technique is that this query is not linked directly to a certain view object. It is up to you to determine which view object has generated this query.</li>
<li>The count column of the Parse row, should be 1 or as low as possible. This indicates how many times the db needed to parse this particular statement. If you are not using bind variables, you will see that for each value a new statement overview is given and that the parse count will still be 1.</li>
<li>The count column of the Execute row, should represent the number of times this query should be executed. If you would have expected a lower number then the one appearing here, then BC has executed this query more often. To solve this problem, you will need to look at the page definition files to determine when and how often the query is executed or even in your custom code when you asked to execute query on an iterator.</li>
<li>Normally the cpu time of the execute row, should be very low. If this is not the case, then it indicates that the query itself is very complex and has a lot of hierarchies of tables. Or it could be because it is a DML-statement.</li>
<li>Now comes the most important row, the Fetch-row. The fetch count number indicates how many times the application has fetched rows for this query. If the execute count is 1 and the fetch count is 10, this means that ADF BC has executed the query once, but needed to go 10 times to the db to get all data. To resolve this problem, just change the 'in Batches of'-tuning parameter of your view object. Look at the <a href="http://huysmansitt.blogspot.be/2013/10/simple-tuning-principles-for-adf.html" target="_blank">following blog</a> for some tuning guides.</li>
</ul>
<div>
These were for me the most important pieces of information to be able to tune my ADF application.</div>
</div>
<div>
<br /></div>
<div>
Have Fun.</div>
<div>
<br /></div>
<div>
F</div>
<div>
<br /></div>
Huysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.com0tag:blogger.com,1999:blog-8800386591181069931.post-24929586485555641982014-01-02T05:08:00.001-08:002014-01-02T05:10:55.826-08:00ADF BC: Adapting the where-clause of a view criteria<h3>
Problem</h3>
You have build a working ADF BC application. After some tuning tests, it seems that your application can use some tuning. So you, or someone above you, decides to call an expert DBA or SQL tuning specialist.
<br />
<br />
Result : you need to change the way the where-clauses are created.
<br />
If you are lucky, it is just a where-clause you have written.
<br />
If you are less lucky, it is a where-clause created by a view criteria, in this case you can not change it. You can only activate or deactivate some properties.
<br />
<br />
In our case this wasn't enough. The ADF BC framework generated clauses like<br />
<center>
UPPER(LAST_NAME) LIKE UPPER(:LastName_bvar || '%')</center>
<br />
<br />
<h3>
Solution</h3>
The first thing you need to do is to remove the upper-statement. This can easily been done by deselecting the 'Ignore Case' property in the edit view criteria screen.
<br />
<br />
So now you are getting the following clause
<br />
<center>
LAST_NAME LIKE (:LastName_bvar || '%')</center>
<br />
While this seems fine for you, your tuning specialist still isn't happy. He wants to get rid of the wildcard.
<br />
<br />
To accomplish this requirement you will need to get more creative.<br />
Add the following code to your ViewImpl class or your base ViewImpl class:<br />
<pre class="brush:java"> /**
* Source : http://tompeez.wordpress.com/2011/08/21/extending-viewcriteria-to-use-sql-contains-4/
* Adapting the creation of the where-clause to remove the '%' after the bind variables of the like statements
* At the same time we add the '%' wildcart at the end of the variable value.
* We will do this for all bind variables with custom property LIKE_CLAUSE=CUSTOM
* This method gets called for all bind variables
* @param viewCriteriaItem
* @return
* @author Filip Huysmans
*/
@Override
public String getCriteriaItemClause(ViewCriteriaItem viewCriteriaItem) {
ArrayList<ViewCriteriaItemValue> lArrayList = viewCriteriaItem.getValues();
if (lArrayList != null) {
ViewCriteriaItemValue itemValue = (ViewCriteriaItemValue)lArrayList.get(0);
if (itemValue.getIsBindVar()) {
Variable lBindVariable = itemValue.getBindVariable();
// check for the special LIKE_CLAUSE in the used bind variable
Object obj2 = lBindVariable.getProperty("LIKE_CLAUSE");
String likeClause = (obj2 != null ? obj2.toString() : "null");
if (likeClause != null && !likeClause.isEmpty() &&
!"null".equals(likeClause)) {
if (viewCriteriaItem.getViewCriteria().getRootViewCriteria().isCriteriaForQuery()) {
// normal query execution
return getLikeClauseForDatabaseUse(viewCriteriaItem,
likeClause);
} else {
// for in memory we don't need to anything so just return '1=1'
return "1=1";
}
} else {
// no special treatment for all other CriteriaItems
return super.getCriteriaItemClause(viewCriteriaItem);
}
}
}
// fallback call
return super.getCriteriaItemClause(viewCriteriaItem);
}
protected String getLikeClauseForDatabaseUse(ViewCriteriaItem aVCI,
String typeLikeClause) {
ArrayList<ViewCriteriaItemValue> lArrayList = aVCI.getValues();
ViewCriteriaItemValue itemValue = (ViewCriteriaItemValue)lArrayList.get(0);
String whereClause = "1=1";
if (itemValue.getIsBindVar()) {
Variable lBindVariable = itemValue.getBindVariable();
Object objVarVal = ensureVariableManager().getVariableValue(lBindVariable.getName());
String varVal = null;
if (objVarVal != null) {
// Adding the wildcard to the bind variable and putting the bind variable in upper-case
varVal = (objVarVal.toString().toUpperCase() + "%");
ensureVariableManager().setVariableValue(lBindVariable,
varVal);
} else {
// No value specified => return no where clause
return null;
}
String bindVarName = lBindVariable.getName();
if ("UPPER".equals(typeLikeClause))
whereClause =
"UPPER(" + aVCI.getColumnName() + ") like :" + bindVarName +
" ";
if ("CUSTOM".equals(typeLikeClause))
whereClause =
aVCI.getColumnName() + " like :" + bindVarName + " ";
}
return whereClause;
}
</pre>
As mentioned in the java doc of this code block, you need to add a custom property to the bind variables for which you want this to take effect. Add a custom property with the name 'LIKE_CLAUSE' and a value of 'UPPER' or 'CUSTOM'.
<br />
<br />
From this situation you can add any functionality you want to make the where-clause exact what your tuning specialist is looking for.
<br />
<br />
Have Fun.
<br />
<br />
FHuysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.com0tag:blogger.com,1999:blog-8800386591181069931.post-20997828850159098442013-12-16T09:34:00.001-08:002013-12-16T09:35:30.530-08:00ADF: annoying warnings<h3>
Fact</h3>
In the logging of your application server, you see often the following warning :<br />
<br />
<span style="color: #999999;"><i><SimpleSelectOneRenderer><_getSelectedIndex> Could not find selected item matching value "0" in RichSelectOneChoice[UIXEditableFacesBeanImpl, id=value70]</i></span><br />
<br />
<h3>
Problem </h3>
You are probably using a component which generates fields dynamically, like the query-component. If you have defined a LOV for one of the fields this component needs to show and you have specified that it needs a "No Selection" item in the UI Hints of the LOV, then this warning will popup.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0HPVQvyTLjbDrDCDLQvE_AvDyyRn4Z7wDZlHemesVT-t_1E5dQZOuWhuerCqFYKqhEBb3oOkwOzGYXwwdmz0m0kx26QFPZjqkAluKNyu_Y6NIMmjqogdfm42-JOWb8R6e9VoxUdLXVNc/s1600/LOV_UIHints.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0HPVQvyTLjbDrDCDLQvE_AvDyyRn4Z7wDZlHemesVT-t_1E5dQZOuWhuerCqFYKqhEBb3oOkwOzGYXwwdmz0m0kx26QFPZjqkAluKNyu_Y6NIMmjqogdfm42-JOWb8R6e9VoxUdLXVNc/s320/LOV_UIHints.png" width="318" /></a></div>
<br />
The warning you are getting is just saying that he tries to map a selected value "0" to the list he recieves, in which case he did not find it. The id is pointing to the field in the query component in this case. The fields are numberd from value00, value10, value20 to valueXX.<br />
<br />
<h3>
Solution</h3>
The solution is to remove the selection of the "No Selection"-item, but this will probably add another problem to your list. To solve this problem you can do the following depending on the type of the view-component of your LOV.<br />
<br />
<ul>
<li><b>View based on static values.</b><br />In this case just add an empty row and put it on top. The order for these kind of views is determined by the order in the list.</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqWKwlqrKzpfEFb_6e2SiC1fuZznRXwV_BHevvhsRTatxP3yC21jgzsSkGxQtjiRF18bWcYKdiA_KfnjkcQdFWUFJvqpU2darXTvIFfgVMgAkFwzVs6pl8jrYBnnYq5y8uwbt1dqn-ie4/s1600/LOV_StaticView.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="98" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqWKwlqrKzpfEFb_6e2SiC1fuZznRXwV_BHevvhsRTatxP3yC21jgzsSkGxQtjiRF18bWcYKdiA_KfnjkcQdFWUFJvqpU2darXTvIFfgVMgAkFwzVs6pl8jrYBnnYq5y8uwbt1dqn-ie4/s320/LOV_StaticView.png" width="320" /></a></div>
<br />
<ul>
<li><b>View based on a query.</b><br />In this case just add an union-clause and add an empty row through the dual-table. Also add an order by-clause to put the null-row first.</li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQn_GexI3GXbgJthuegBt1xQLl4hmavUr14FTohZMl5QFyf_pXXNA-6BM0ZdLjdblqedWOznsZ0aTQyNHHHRq-AF7wOlY3gyvPHr0U1vXk5NgfjelRiFpBKnumVof7hg-eizXglkLuwNQ/s1600/LOV_query.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="198" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQn_GexI3GXbgJthuegBt1xQLl4hmavUr14FTohZMl5QFyf_pXXNA-6BM0ZdLjdblqedWOznsZ0aTQyNHHHRq-AF7wOlY3gyvPHr0U1vXk5NgfjelRiFpBKnumVof7hg-eizXglkLuwNQ/s320/LOV_query.png" width="320" /></a></div>
Huysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.com0tag:blogger.com,1999:blog-8800386591181069931.post-71811161144173527422013-10-03T09:22:00.002-07:002013-10-03T09:22:50.017-07:00Simple tuning principles for ADFHello everyone,<br />
<br />
Most of the time when people are talking about tuning, it starts to get quickly quite ugly technical.<br />
I had the opportunity to do some tuning for a customer myself, I didn't pushed the pedal to the metal, but found some simple rules I could follow.<br />
<br />
<br />
<ul class="ul1">
<li class="li1">BC View Tuning</li>
<ul class="ul2">
<li class="li1">as-needed = iterator range size</li>
<li class="li1">fetch size batches = rows displayed + 1</li>
<li class="li1">max fetch size = -1</li>
</ul>
<li class="li1">AM</li>
<ul class="ul2">
<li class="li1">jbo.ampool.initpoolsize=10% more then concurrent users</li>
<li class="li1">jbo.recycletreshold = nbr concurrent users</li>
<li class="li1">jbo.ampool.monitorsleepinterval= 14400000 = 4uur</li>
<li class="li1">jbo.dofailover=true</li>
<li class="li1">jbo.locking.mode=optimistic</li>
<li class="li1">jbo.doconnectionpooling=false</li>
</ul>
<li class="li1">Pagedefinition</li>
<ul class="ul2">
<li class="li1">Iterator Rangesize = number of rows displayed</li>
<li class="li1">Iterator RowCountTreshold = -1</li>
</ul>
<ul class="ul2">
</ul>
<li class="li1">Taskflows</li>
<ul class="ul2">
<li class="li1">activation = defer</li>
</ul>
</ul>
<div>
Everything else is common sense :-).</div>
<div>
<br /></div>
<div>
Hopes this gets you started.</div>
<div>
<br /></div>
<div>
F</div>
Huysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.com1tag:blogger.com,1999:blog-8800386591181069931.post-33583962153368545342013-10-03T08:43:00.003-07:002013-10-03T09:15:18.730-07:00Unconventional Overview of OOW13Hello everyone,<br />
<br />
Due to the huge amount of readers of my last year’s blogs on OOW, I restrict myself this year to the overall conclusion I made on OOW13.<br />
The idea’s and opinions expressed in this blog are my own. So if you want copy or use them, please send a donation to charity ☺.<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju7icoSoQFpxsdIuhgjbsuImpkZ2HQDRivzYhWtDI2wnjNgpWnQRFzMxbXKSxfVcJ24XShyIWSLu1Y7PjfzS6ulHsyEgFHLKFg4TZ9H6Lw0CuXwffGsO5HGdFW5ykU5bu8e2TgBh3GQfc/s1600/oow13figures.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju7icoSoQFpxsdIuhgjbsuImpkZ2HQDRivzYhWtDI2wnjNgpWnQRFzMxbXKSxfVcJ24XShyIWSLu1Y7PjfzS6ulHsyEgFHLKFg4TZ9H6Lw0CuXwffGsO5HGdFW5ykU5bu8e2TgBh3GQfc/s320/oow13figures.png" width="262" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">@https://www.facebook.com/OracleOpenWorld</td></tr>
</tbody></table>
As aspected this year's Oracle Open World focused on Cloud, Big Data, Social, Customer Experience, M2M(IoT) and Mobile. <br />
No surprises here, until you look further. Until you start looking further then the sessions being given, further then buzzwords, even further then keynote speeches.<br />
<br />
First major change, it is not about mobile, it is about mobile-first. No longer the desktop browser is king in the land of the developer, according to Oracle, but the mobile devices are. They control the development of frameworks, architectures and solutions. They define how application will be made in the future and how they will look like.<br />
We came from a couple of years of developing desktop web browser applications and making the mobile brothers alike for them, to making mobile applications and given their big brother applications the look&feel they need.<br />
While this seems a small shift, it will totally change your view on application development.<br />
Does this mean you need to throw all your current projects away and start over again, no.<br />
Remember that it is Oracle's vision that is presented at Open World, giving you a year or two to react upon.<br />
<br />
Another change is in the Cloud proposal, but this change we all expected: more, bigger and more social. The solutions presented covering the cloud offering of Oracle, were numerous. I was impressed in the total package of Oracle, extra features on the existing offerings, new offerings in the IAAS, PAAS and SAAS area. While I'm not an Oracle applications guy, the list of offerings in the SAAS area overwhelmed me. Off course, their SAAS-cloud offering doesn't cover all the functionalities delivered by their mature sisters like PeopleSoft, Siebel, EBusiness Suite or JD Edwards. Nor is that the purpose. How many times did you hear that the cloud would change the way you do business?<br />
When there wouldn't be any difference between those solutions, where would the change in doing business be?<br />
But this isn't change this is evolution. The change lies in opening of their cloud offering. <br />
How do you open a cloud offering you might ask? It is not only Oracle's cloud that gives you your favorite products at your fingertips, also Microsoft's Azure-cloud solution will enable you to run your business in the cloud on Oracle software.<br />
Who said that Oracle isn't a cloud company?<br />
<i>Small remark on the side: MS was putting a lot of focus on the fact that you could run the Oracle database, WebLogic Server and Java in their cloud. While the first two make sense, the last one is a bit strange. Since it's slogan is "Develop once, run anywhere".</i><br />
<br />
Finally, big data or should I say smart data. While last year big data was al about capturing, this year it is all about integrating and delivering solutions for the business. The examples given during such a conference are breath taking.<br />
Coming from a very small country myself, I was wondering what could mean big/smart data for the Belgium market. And in essence it is not about the absolute size of data that need to be handled, but the relative portion of that data that resides above the normal expected working parameters of your business. Since Oracle always looks at the big players in all market segments, the hardware solutions they put forward are equally big. So it is far more opportune to not look at the hardware side of things, but the architecture side of it. Perhaps your business doesn't need the power of treating billions of rows of data a day, but it might well be that it is interested in the same insights. <br />
Insights into your business, insights into your way of working, insights into your customers, insights into the business of your customers and perhaps the most business interruptive power of them all: social media.<br />
Big/smart data is not about data; it is about thinking differently about building solutions based on data. Now it all comes together, network, hardware, software, maturity and social allowing for a new final frontier of analytics.<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGKw9FYJNiSMT8uhTOl1uScf2gC6noukTtf_9QJr1pzjncL04e6JNn5xIzU9pAd6hxp1jB5x3z7in8FzolaNzAF0sNHmZtYivZI2gJO3Y1PhfF_JMysNIChel3JrffttCTBZJqDIOxY04/s1600/m2m.jpeg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="179" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGKw9FYJNiSMT8uhTOl1uScf2gC6noukTtf_9QJr1pzjncL04e6JNn5xIzU9pAd6hxp1jB5x3z7in8FzolaNzAF0sNHmZtYivZI2gJO3Y1PhfF_JMysNIChel3JrffttCTBZJqDIOxY04/s320/m2m.jpeg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">@https://www.facebook.com/OracleOpenWorld</td></tr>
</tbody></table>
Let’s not forget the new kid on the block, M2M. It is hardly new; it was already presented the year before, but then only on JavaOne. While you need to go to J1 for the dirty technical details about it, you can now join OOW for the business side of things. What M2M appeals to me is that it, like big data, let’s you rethink solutions for the business. Now it is a lot easier to not only build a solution based on software, but also include a hardware portion. We are not confined anymore to expense and unique in the market devices, probably vendor locked-in also, but we get now this breath taken possibilities of cheap and commodity hardware that we can shape to our needs. The fact that this topic got his own keynote means that Oracle thinks that their customers are ready to embrace this technology, which probably result in a boost of projects being started.<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimMuj4ajyqFRL6mfSBK2ZIalt05h3_mejvHV0BjLuGAlMRpHTqHxoTuc1AszM1ns_cWA8vCxwqwADhWF1xWmHWVzPzMtrBvEvkHbyJN_d4vGbkyQSuE8PK7EktjZWhrI6XlU8Tbp5uOa0/s1600/oowbuildingblocks.jpeg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="111" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimMuj4ajyqFRL6mfSBK2ZIalt05h3_mejvHV0BjLuGAlMRpHTqHxoTuc1AszM1ns_cWA8vCxwqwADhWF1xWmHWVzPzMtrBvEvkHbyJN_d4vGbkyQSuE8PK7EktjZWhrI6XlU8Tbp5uOa0/s200/oowbuildingblocks.jpeg" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">@https://www.facebook.com/OracleOpenWorld</td></tr>
</tbody></table>
If you think I covered all the major topics by now, cloud/mobile/big data/m2m/social, you are in for a surprise.<br />
At last year's conference, we had a couple of talks about the way Oracle tries to deliver applications that are end-user friendly. They even had planned a short trip to HQ, to convince us about the effort they put into it.<br />
Who could ever thought, that this topic would be the biggest one of them all the year after? I'm not counting the number of sessions nor the seats in the rooms of those sessions; instead I'm looking at impact of it on all previously discussed topics.<br />
"Customer Experience", it seems so easy and logical. It is the reason why there are so many conventions around the world. It is the reason why companies invest in development, marketing and sales. Frankly, it is probably the outcome of customer experience that drives companies or better-put "people".<br />
Once you start talking about customer experience, you are dealing with a totally different set of KPI’s. It is no longer about bits and bytes, no longer about how fast and well we can treat information, it is not about how much money we put into IT, what the hell it is not about IT.<br />
It is about ... you, the customer, partner, employee and family and how we can make our business more suited for you. <br />
Finally, once a department starts thinking about the service it can deliver, instead of the great wonderful technical things they can do, that's the day that it becomes the corner stone of a company.<br />
<br />
<br />
Here are a few examples to illustrate the power of it.<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8X0tq7Oh4lLfTu73X5G2vMyY_K1Y_lNRVwUy8HU2R6QDmSVTvNVOvNrg1upBqnclmxFBNKBJAYrYEBdKiLv7kcs8uNYL9I1Mfbz4ZeJBcmsH2VgTZwQ3UczJdGjA3BnjiP4GBb5hYJus/s1600/hawordstreet.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8X0tq7Oh4lLfTu73X5G2vMyY_K1Y_lNRVwUy8HU2R6QDmSVTvNVOvNrg1upBqnclmxFBNKBJAYrYEBdKiLv7kcs8uNYL9I1Mfbz4ZeJBcmsH2VgTZwQ3UczJdGjA3BnjiP4GBb5hYJus/s200/hawordstreet.jpg" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">@http://kentgraziano.com/</td></tr>
</tbody></table>
<ul>
<li>I already tweeted about it, so I'll start with the event itself. Not only was the event bigger in size, it was also bigger in the overall experience for the visitor. For me it is not so much about the big, too cold air-conditioned session rooms (they were there last year also ☺), it is about the fact that the company Oracle is more then just a supplier of hard- and software, it delivers now also entertainment, passion and vision outside of the IT-landscape.<br /><br />Walking around on the Oracle plaza, which was on Howard Street (between North and South Moscone), gave you a sense of the power of Oracle in the Bay area. This year there was no closed tent hiding Howard Street. This year it was an open, inviting and socially appealing place to linger. Coming out of a keynote, hearing fantastic music, feeling the sun warming your body and only seeing smiling people, pushes you into the only possible conclusion: Life @/with Oracle is great. On top of that, add the suspense of the America's Cup, and you know there is more to live then IT even @Oracle.<br /><br /><i>Short remark on the side concerning Larry Ellison ditching his cloud keynote in favor of the boat race, so what? Larry has the fortune to have now 2 boats (metaphorically speaking). One is a very big one, with still a lot of potential but more importantly 5 great captains. This boat is not ready, nor willing, to lose. It has a great history of good and bad moments, but always came out strong. The other one is fairly new, has only 1 captain and a smaller crew. It has equally great potential, but still need guidance, hence their victory in the America's Cup.</i><i>Larry didn't stand up 60.000 people, there would never be 60.000 people looking at the keynote. So many of them were also looking at the boat race or having lunch with customers or partners. Isn't it great to see that the team behind Larry is capable of standing by their captain?</i></li>
</ul>
<ul>
<li>Another example is the testimony of Lego. What a great inside into their company's marketing vision. How else can you do a campaign for 100$? Admitting that Lego already had a good brand name, so it can more easily make use of crowd sourcing, but nevertheless a good example how small and simple things can bring great results (trying to avoid saying big here).<br />It is all about finding the social needs of your customers and using that to open new worlds for them and yourself.<br /><br /></li>
<li>Now for the last example, a more of a personal note. First a warning: all characters appearing in this story are fictitious. Any resemblance to real persons, living or dead, is purely coincidental.<br /><br />So I was wondering around finding my way to Moscone North for the keynote of JavaOne. Assuming a lot of people would take the direct route through the Moscone North entry, I took my changes via Moscone South. As a few of you know, there is a direct passage from South to North. Still standing in South and looking on to the passage of North, I see a sea of people waiting to go to the keynote. So a bit uneasy I put myself back in line ready for a long period of queuing. Still not sure I'm really in the right lane, I ask a person next to me whether this is really the queue for the keynote.<br />Naturally she could answer, "Off course, what else would all those people be queuing for?" and probably thinking "Again a foreigner, probably from a small country like Belgium where they've never seen such an interest in a keynote".<br />Strangely enough she didn't, instead she said, "Yes, it is". A bit surprised by the calmness of her answer and given my capability of not stopping speaking, I asked a couple of more questions. Strangely enough, she didn't figure out that I was a foreigner right away and so she kept on answering my curiosity. Suddenly the roles got inverted. She was now starting to ask questions and I was more then willing to reply. After 10 minutes going back and forth like this, something changed. We stopped with asking and started telling stories about things that happened or would be happening in the near future. We watched the keynote together and gave our very personal opinion on every topic. More often then not, we were thinking in the same direction. After the keynote, we exchanged numbers and fought our way through JavaOne for her and Open World for me.<br /><br />Now what has this to do with customer experience? Well read the story again and replace "me" with yourself, "she" with your partner, customer and the "keynote" with social media. Now tell me, is this not how you make the first contact with new customers/partners?</li>
</ul>
<br />
<br />
The final thoughts I want you to take with you are that all the fancy buzzwords like cloud, mobile, big data should be enablers for your business and not a goal in itself. When looking beyond IT and seeing the bigger picture, will allow you to do bigger and longer projects that stand the test of time and will be better appreciated and used by the business.<br />
<br />
Hoped you enjoyed the reading.<br />
<br />
FHuysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.com0tag:blogger.com,1999:blog-8800386591181069931.post-39070476208910340702013-05-28T09:56:00.000-07:002013-05-28T09:56:26.881-07:00ADF BC: JBO-25014: Another user has changed the row with primary key<h3>
Challenge</h3>
You receive the error mentioned in the title, but you are quite sure this is not the case and nothing has changed in the database due to triggers or pl/sql-code.<br />
<h3>
Context</h3>
Jdeveloper: 11gR1<br />
<h3>
Solution</h3>
There are already quite a few blogs on this error within ADF. They all talk about the fact that something has changed in the database, without BC knowing about it. This can be done through another user, a batch-script, a trigger or any other pl/sql-code.<br />
But what if you are 100% sure this is not the case, then read on.<br />
<br />
There is also another reason why this happen: the comparison of the different attributes didn't go well. Although the documentation clearly state that the oracle.jbo.domain-classes should solve this issue, we still have found ourselves multiple times in this situation and mostly due to Date-attributes.<br />
There are 2 ways to handle this:<br />
<ol>
<li>You can identify an attribute in your entity as a “Change Indicator”. Once you have identified such an attribute in your entity, the BC-code will no longer compare all attributes, instead it will only compare those with the “Change Indicator” activated.<br />
<br />
To set this indicator on an attribute, just open the editor of the attribute to see the “Change Indicator” property.<br />
</li>
<li>You can remove the attribute that is causing the problem from the comparison. This is easier said than done, because you need to know which attribute is causing the problem. <br />
<br />
To find this out, just activate the JBO-diagnostic logging, you can do this by adding the following “-Djbo.debugoutput=console” to the Java-options of your run-configuration.<br />
Now run the application again and simulate the problem. You should find something like this:<br />
<pre class="brush:java"><EntityImpl><compare> [508] Entity compare failed for attribute HireDate
<EntityImpl><compare> [509] Original value :19-06-1987
<EntityImpl><compare> [510] Target value :19-06-1987
</pre>
Now you know it is the HireDate-Attribute. Now add the following code to the Impl-class of your entity:<br />
<pre class="brush:java">@Override
protected boolean compare(SparseArray sparseArray) {
// Removing the HIREDATE attribute from the array
if (sparseArray != null && !sparseArray.isEmpty()) {
for (int i=0; i<sparseArray.length(); i++) {
Object value = sparseArray.get(i);
if (value != null) {
if (i == HIREDATE) sparseArray.clear(i);
}
}
}
// Calling the standard compare method
return super.compare(sparseArray);
}
</pre>
You can do this for as many attributes as you need, just add them to the 3th if-statement.</li>
</ol>
<br />Huysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.com0tag:blogger.com,1999:blog-8800386591181069931.post-89324844292740188512013-05-07T07:10:00.001-07:002013-05-07T07:15:02.704-07:00JDeveloper 11.1.2.4 on Mac Lion<br />
<h3>Challenge</h3>Installing JDeveloper 11.1.2.4 on a MAC Lion<br />
<h3>Context</h3>Mac: 10.7.5<br />
Jdeveloper: 11.1.2.4.0<br />
Java: 1.7.0_17<br />
<br />
<br />
<h3>Solution</h3>I encountered 2 problems during installation:<br />
<br />
<ol><li>In the Installation wizard, when you use Custom instead of Typical, you need to find the correct Java version yourself. If you use Typical, the default Java is set per default.</li>
<li>When trying to run the WebLogic Server for the first time, I receive the following output:<br />
<pre class="brush:java">[Waiting for the domain to finish building...]
[03:54:51 PM] Creating Integrated Weblogic domain...
[03:55:21 PM] Extending Integrated Weblogic domain...
[03:55:29 PM] Integrated Weblogic domain processing completed successfully.
*** Using HTTP port 7101 ***
*** Using SSL port 7102 ***
/Users/filiphuysmans/.jdeveloper/system11.1.2.4.39.64.36/DefaultDomain/bin/startWebLogic.sh
[waiting for the server to complete its initialization...]
.
.
JAVA Memory arguments: -Xms256m -Xmx512m
.
Unrecognized option: -jrockit
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
WLS Start Mode=Development
.
CLASSPATH=/Users/filiphuysmans/programs/JDev111240/oracle_common/modules/oracle.jdbc_11.1.1/ojdbc6dms.jar:/Users/filiphuysmans/programs/JDev111240/patch_wls1035/profiles/default/sys_manifest_classpath/weblogic_patch.jar:/Users/filiphuysmans/programs/JDev111240/patch_jdev1112/profiles/default/sys_manifest_classpath/weblogic_patch.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home/lib/tools.jar:/Users/filiphuysmans/programs/JDev111240/wlserver_10.3/server/lib/weblogic_sp.jar:/Users/filiphuysmans/programs/JDev111240/wlserver_10.3/server/lib/weblogic.jar:/Users/filiphuysmans/programs/JDev111240/modules/features/weblogic.server.modules_10.3.5.0.jar:/Users/filiphuysmans/programs/JDev111240/wlserver_10.3/server/lib/webservices.jar:/Users/filiphuysmans/programs/JDev111240/modules/org.apache.ant_1.7.1/lib/ant-all.jar:/Users/filiphuysmans/programs/JDev111240/modules/net.sf.antcontrib_1.1.0.0_1-0b2/lib/ant-contrib.jar:/Users/filiphuysmans/programs/JDev111240/oracle_common/modules/oracle.jrf_11.1.1/jrf.jar:/Users/filiphuysmans/programs/JDev111240/wlserver_10.3/common/derby/lib/derbyclient.jar:/Users/filiphuysmans/programs/JDev111240/wlserver_10.3/server/lib/xqrl.jar
.
PATH=/Users/filiphuysmans/programs/JDev111240/wlserver_10.3/server/bin:/Users/filiphuysmans/programs/JDev111240/modules/org.apache.ant_1.7.1/bin:/Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home/jre/bin:/Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home/bin:/usr/bin:/bin:/usr/sbin:/sbin
.
***************************************************
* To start WebLogic Server, use a username and *
* password assigned to an admin-level user. For *
* server administration, use the WebLogic Server *
* console at http://hostname:port/console *
***************************************************
starting weblogic with Java version:
Starting WLS with line:
/Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home/bin/java -jrockit -Xms256m -Xmx512m -Dweblogic.Name=DefaultServer -Djava.security.policy=/Users/filiphuysmans/programs/JDev111240/wlserver_10.3/server/lib/weblogic.policy -Djavax.net.ssl.trustStore=/var/tmp/trustStore875832875455889226.jks -Dhttp.proxyHost=proxy.iconos.be -Dhttp.proxyPort=8080 -Dhttp.nonProxyHosts=local|*.local|169.254/16|*.169.254/16|127.0.0.1|localhost|*.localhost|localhost.localdomain|::1|10.99.9.23|Filips-MacBook-Pro-2.local -Dhttps.proxyHost=proxy.iconos.be -Dhttps.proxyPort=8080 -Doracle.jdeveloper.adrs=true -Dweblogic.nodemanager.ServiceEnabled=true -Xverify:none -da -Dplatform.home=/Users/filiphuysmans/programs/JDev111240/wlserver_10.3 -Dwls.home=/Users/filiphuysmans/programs/JDev111240/wlserver_10.3/server -Dweblogic.home=/Users/filiphuysmans/programs/JDev111240/wlserver_10.3/server -Djps.app.credential.overwrite.allowed=true -Dcommon.components.home=/Users/filiphuysmans/programs/JDev111240/oracle_common -Djrf.version=11.1.1 -Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger -Ddomain.home=/Users/filiphuysmans/.jdeveloper/system11.1.2.4.39.64.36/DefaultDomain -Djrockit.optfile=/Users/filiphuysmans/programs/JDev111240/oracle_common/modules/oracle.jrf_11.1.1/jrocket_optfile.txt -Doracle.server.config.dir=/Users/filiphuysmans/.jdeveloper/system11.1.2.4.39.64.36/DefaultDomain/config/fmwconfig/servers/DefaultServer -Doracle.domain.config.dir=/Users/filiphuysmans/.jdeveloper/system11.1.2.4.39.64.36/DefaultDomain/config/fmwconfig -Digf.arisidbeans.carmlloc=/Users/filiphuysmans/.jdeveloper/system11.1.2.4.39.64.36/DefaultDomain/config/fmwconfig/carml -Digf.arisidstack.home=/Users/filiphuysmans/.jdeveloper/system11.1.2.4.39.64.36/DefaultDomain/config/fmwconfig/arisidprovider -Doracle.security.jps.config=/Users/filiphuysmans/.jdeveloper/system11.1.2.4.39.64.36/DefaultDomain/config/fmwconfig/jps-config.xml -Doracle.deployed.app.dir=/Users/filiphuysmans/.jdeveloper/system11.1.2.4.39.64.36/DefaultDomain/servers/DefaultServer/tmp/_WL_user -Doracle.deployed.app.ext=/- -Dweblogic.alternateTypesDirectory=/Users/filiphuysmans/programs/JDev111240/oracle_common/modules/oracle.ossoiap_11.1.1,/Users/filiphuysmans/programs/JDev111240/oracle_common/modules/oracle.oamprovider_11.1.1 -Djava.protocol.handler.pkgs=oracle.mds.net.protocol -Dweblogic.jdbc.remoteEnabled=false -Dwsm.repository.path=/Users/filiphuysmans/.jdeveloper/system11.1.2.4.39.64.36/DefaultDomain/oracle/store/gmds -Dweblogic.management.discover=true -Dwlw.iterativeDev= -Dwlw.testConsole= -Dwlw.logErrorsToConsole= -Dweblogic.ext.dirs=/Users/filiphuysmans/programs/JDev111240/patch_wls1035/profiles/default/sysext_manifest_classpath:/Users/filiphuysmans/programs/JDev111240/patch_jdev1112/profiles/default/sysext_manifest_classpath weblogic.Server
Unrecognized option: -jrockit
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
Process exited.
</pre></li>
</ol><div>2 things go wrong here:</div><div><ul><li>He tries to use the -jrockit VM-type.</li>
<li>There is no setting for the PermGenSpace</li>
</ul></div><div>To solve this problem, perform the following steps:</div><div><ul><li>Go to the domain directory to find the setDomainEnv.sh file.<br />
This file can be found in <your home directory>/.jdeveloper/system11.1.2.4.39.64.36/DefaultDomain/bin</li>
<li>Find the line with 'SUN_JAVA_HOME=""' and change/modify it to</li>
<ul><ul><li><span style="text-align: center;">SUN_JAVA_HOME=$BEA_JAVA_HOME</span></li>
<li><span style="text-align: center;">JAVA_VENDOR=Sun</span></li>
<li><span style="text-align: center;">export SUN_JAVA_HOME JAVA_VENDOR</span></li>
</ul></ul><li>Save the file and try to start the WLS Server</li>
</ul></div>Huysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.com0tag:blogger.com,1999:blog-8800386591181069931.post-44521798080679249102013-04-12T06:08:00.000-07:002013-04-12T06:12:48.870-07:00Submitted Sessions for Oracle Open World and JavaOne 2013It is again this time of year, were everyone is searching for their best English and write a small piece of text to convince a group of people. Also we did the same exercise and handed over our papers for Oracle Open World and JavaOne.<br />
<br />
Here is our, Contributes, list of papers for 2013:<br />
<br />
<style>table { }td { padding-top: 1px; padding-right: 1px; padding-left: 1px; color: black; font-size: 12pt; font-weight: 400; font-style: normal; text-decoration: none; font-family: Calibri,sans-serif; vertical-align: bottom; border: medium none; white-space: nowrap; }.xl63 { font-weight: 700; }</style>
<br />
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse; width: 614px;">
<colgroup><col style="mso-width-alt: 2304; mso-width-source: userset; width: 54pt;" width="54"></col>
<col style="mso-width-alt: 16597; mso-width-source: userset; width: 389pt;" width="389"></col>
<col style="mso-width-alt: 7296; mso-width-source: userset; width: 171pt;" width="171"></col>
</colgroup><tbody>
<tr height="15" style="height: 15.0pt;">
<td class="xl63" height="15" style="height: 15.0pt; width: 54pt;" width="54"><span style="mso-spacerun: yes;"> </span>ID</td>
<td class="xl63" style="width: 389pt;" width="389"><span style="mso-spacerun: yes;"> </span>Proposed Session Title</td>
<td class="xl63" style="width: 171pt;" width="171"><span style="mso-spacerun: yes;"> </span>Type</td>
</tr>
<tr height="15" style="height: 15.0pt;">
<td height="15" style="height: 15.0pt;">TUT4879</td>
<td><span style="mso-spacerun: yes;"> </span>Building your stock management
solution for no more then $299</td>
<td><span style="mso-spacerun: yes;"> </span>Tutorial</td>
</tr>
<tr height="15" style="height: 15.0pt;">
<td height="15" style="height: 15.0pt;">CON4907</td>
<td><span style="mso-spacerun: yes;"> </span>Making Open-Source & Oracle
security best friends. The Mazda story.</td>
<td><span style="mso-spacerun: yes;"> </span>Conference Session</td>
</tr>
<tr height="15" style="height: 15.0pt;">
<td height="15" style="height: 15.0pt;">CON4872</td>
<td><span style="mso-spacerun: yes;"> </span>No SOA without Service
Orchestration</td>
<td><span style="mso-spacerun: yes;"> </span>Conference Session</td>
</tr>
<tr height="15" style="height: 15.0pt;">
<td height="15" style="height: 15.0pt;">CON4901</td>
<td><span style="mso-spacerun: yes;"> </span>Score with the right Oracle
technology for the right audience. The RBFA story.</td>
<td><span style="mso-spacerun: yes;"> </span>Conference Session</td>
</tr>
<tr height="15" style="height: 15.0pt;">
<td height="15" style="height: 15.0pt;">CON1846</td>
<td><span style="mso-spacerun: yes;"> </span>Taking You from Forms to ADF
Mobile: a Journey</td>
<td><span style="mso-spacerun: yes;"> </span>User Group Forum (Sunday Only)</td>
</tr>
</tbody></table>
<br />
<br />
I would advice everyone else to do the same, but .... on different topics preferably ;-).<br />
<br />
Thanks to everyone who helped building up this list and everyone who is going help to get some talks accepted.<br />
<br />
Very much appreciated.<br />
<br />
FilipHuysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.com0tag:blogger.com,1999:blog-8800386591181069931.post-92149732983397145352013-04-09T09:36:00.000-07:002013-04-09T09:36:38.282-07:00Installing HTTP_Server with WebGate<h3>Challenge</h3>Installing an HTTP Server and configure it to be used as entry point for OAM.<br />
<h3>Context</h3>OAM 11.1.2 running on WLS 10.3.6.0<br />
<br />
<h3>Solution</h3>Installing the HTTP_Server <br />
<ul><li>Unzipping the HTTP_Server software<br />
<ul><li>cd /opt/install/oam</li>
<li>mkdir patch6</li>
<li>unzip WebTier_11Patch6.zip -d patch6</li>
<li>cp patch6/Disk1/stage/Response/WebTierInstallAndConfigure.rsp ./WebTierInstallAndConfigurePatch6.rsp</li>
<li>cp patch6/Disk1/stage/Response/staticports.ini .</li>
<li>mv staticports.ini webtier_staticport.ini</li>
<li>Adapt the WebTierInstallAndConfigurePatch6.rsp <br />
<pre class="brush:java">[ENGINE]
#DO NOT CHANGE THIS.
Response File Version=1.0.0.0.0
[GENERIC]
#Set this to true if you wish to specify a directory where latest updates are downloaded. This option would use the software updates from the specified directory
SPECIFY_DOWNLOAD_LOCATION=false
#
SKIP_SOFTWARE_UPDATES=true
#If the Software updates are already downloaded and available on your local system, then specify the path to the directory where these patches are available and set SPECIFY_DOWNLOAD_LOCATION to true
SOFTWARE_UPDATES_DOWNLOAD_LOCATION=
#Set this to true if installation and configuration need to be done, all other required variables need to be provided. Variable "INSTALL AND CONFIGURE LATER TYPE" must be set to false if this is set to true as the variables are mutually exclusive
INSTALL AND CONFIGURE TYPE=true
#Set this to true if only Software only installation need to be done. If this is set to true then variable "INSTALL AND CONFIGURE TYPE" must be set to false, since the variables are mutually exclusive.
INSTALL AND CONFIGURE LATER TYPE=false
#Provide the Oracle Home location. The Oracle Home directory name may only contain alphanumeric , hyphen (-) , dot (.) and underscore (_) characters, and it must begin with an alphanumeric character. The total length has to be less than or equal to 128 characters. The location has to be an empty directory or a valid WebTier Oracle Home.
ORACLE_HOME=/u01/app/oam/product/webtier/OHS
#Provide existing Middleware Home location.
MIDDLEWARE_HOME=/u01/app/oam/product/webtier
#The name of the Oracle Instance. Instance name must begin with an alphabetic character, may only contain alphanumeric characters, or the underscore (_) or hyphen (-) characters and are 4 to 30 characters long.
INSTANCE_HOME=/u01/app/oam/product/webtier/instances/instance1
#Provide the Oracle Instance location. The Oracle Instance directory name may only contain alphanumeric , hyphen (-) , dot (.) and underscore (_) characters, and it must begin with an alphanumeric character. The total length has to be less than or equal to 128 characters. The location has to be an empty or non existing directory.
INSTANCE_NAME=instance1
#If set to true, installer will auto assign ports
AUTOMATIC_PORT_DETECT=false
#This is required if "AUTOMATIC_PORT_DETECT" variable is set to false, absolute path of a staticports file location need to be provided with values for ports.\nThe template for staticports.ini can be found from Disk1/staget/Response directory of the shiphome.
STATICPORT INI FILE LOCATION=/opt/install/oam/webtier_staticport.ini
#Provide the My Oracle Support Username. If you wish to ignore Oracle Configuration Manager configuration provide empty string for user name.
MYORACLESUPPORT_USERNAME=
#Provide the My Oracle Support Password
MYORACLESUPPORT_PASSWORD=
#Set this to true if you wish to decline the security updates. Setting this to true and providing empty string for My Oracle Support username will ignore the Oracle Configuration Manager configuration
DECLINE_SECURITY_UPDATES=true
#Set this to true if My Oracle Support Password is specified
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
#Provide the Proxy Host
PROXY_HOST=
#Provide the Proxy Port
PROXY_PORT=
#Provide the Proxy Username
PROXY_USER=
#Provide the Proxy Password
PROXY_PWD=
[SYSTEM]
#Set true to configure Oracle HTTP Server, else skip Oracle HTTP Server configuration
CONFIGURE_OHS=true
#Set true to configure Oracle Web Cache, else skip Oracle Web Cache configuration
CONFIGURE_WEBCACHE=false
#The Oracle HTTP Server (OHS) component name (required only if CONFIGURE_OHS is set to true). OHS component name must begin with an alphabetic character, may only contain alphanumeric characters, or the underscore (_) or hyphen (-) characters and are 4 to 30 characters long.
OHS_COMPONENT_NAME=ohs1
#The Web Cache component name (required only if CONFIGURE_WEBCACHE is set to true). Web Cache component name must begin with an alphabetic character, may only contain alphanumeric characters, or the underscore (_) or hyphen (-) characters and are 4 to 30 characters long.
WEBCACHE_COMPONENT_NAME=
#Valid passwords are 5 to 30 characters long, must begin with an alphabetic character, use only alphanumeric, underscore (_), dollar ($) or pound (#) characters and include at least one number.
WEBCACHE_ADMINISTRATOR_PASSWORD=
#The confirmation password for Web Cache administrator.
WEBCACHE_ADMINISTRATOR_PASSWORD_CONFIRM=
[APPLICATIONS]
[RELATIONSHIPS]
#If set to true, the instance and components will be registered with an existing weblogic server
ASSOCIATE_WEBTIER_WITH_DOMAIN=false
#Provide an existing domain host name. Required only if ASSOCIATE_WEBTIER_WITH_DOMAIN is set to true
DOMAIN_HOST_NAME=
#Provide the existing domain port number. Required only if ASSOCIATE_WEBTIER_WITH_DOMAIN is set to true
DOMAIN_PORT_NO=
#Provide the domain user name. Required only if ASSOCIATE_WEBTIER_WITH_DOMAIN is set to true
DOMAIN_USER_NAME=
#The domain user password. Required only if ASSOCIATE_WEBTIER_WITH_DOMAIN is set to true
DOMAIN_USER_PASSWORD=
</pre></li>
<li>Adapt the webtier_staticport.ini file<br />
<pre class="brush:java">#######################################################################################
#This file is a template file for staticports.ini
#This file must be edited to provide the ports which required to be set
#Those ports which are not provided explicitly in this file will be assigned automatically
#The ports should be specified as a single port
#Keep in mind to uncomment the port no
#######################################################################################
########################Begin section for OPMN Port No################################
######################################################################################
[OPMN]
#This port indicates the OPMN Local Port
OPMN Local Port = 6700
#This port indicates the OPMN Local Port
OPMN Remote Port = 6701
########################Begin section for ohs component################################
#This port nos will be considered only if OHS is selected for configuration
#######################################################################################
[OHS]
#The http_main port for ohs component
OHS Port = 8888
#This port indicates the OHS Proxy Port
OHS Proxy Port = 8889
#This port indicates the OHS SSL Port
OHS SSL Port = 4443
########################Begin section for Web Cache component################################
#This port nos will be considered only if Web Cache is selected for configuration
#######################################################################################
[WEBCACHE]
#The port indicates the Web Cache Listen Port
#Web Cache Listen Port = 7777
#The port indicates the Web Cache Admin Port
#Web Cache Admin Port = 7778
#The port indicates the Web Cache Statistics Port
#Web Cache Statistics Port = 7779
#The port indicates the Web Cache Invalidation Port
#Web Cache Invalidation Port = 7780
#The port indicates the Web Cache SSL Port
#Web Cache SSL Port = 7781
</pre></li>
</ul>I</li>
<li>Installing the HTTP_Server software<br />
<ul><li>patch6/Disk1/runInstaller -silent -responseFile /opt/install/oam/WebTierInstallAndConfigurePatch6.rsp</li>
<li>Result:<br />
<pre class="brush:text">Starting Oracle Universal Installer...
Checking Temp space: must be greater than 400 MB. Actual 2380 MB Passed
Checking swap space: must be greater than 500 MB. Actual 16383 MB Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2013-02-28_10-04-05AM. Please wait ...[oam@oamhost oam]$ Log: /u01/app/oracle/product/oraInventory/logs/install2013-02-28_10-04-05AM.log
Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
Reading response file..
Expected result: One of oracle-6,oracle-5.6,enterprise-5.4,enterprise-4,enterprise-5,redhat-5.4,redhat-4,redhat-5,SuSE-10,SuSE-11
Actual Result: redhat-Red
Check complete. The overall result of this check is: Failed <<<<
Problem: This Oracle software is not certified on the current operating system.
Recommendation: Make sure you are installing the software on the correct platform.
Warning: Check:CertifiedVersions failed.
Expected result: 1024MB
Actual Result: 15948MB
Check complete. The overall result of this check is: Passed
TotalMemory Check: Success.
Expected result: LD_ASSUME_KERNEL environment variable should not be set in the environment.
Actual Result: Variable Not set.
Check complete. The overall result of this check is: Passed
Check Env Variable Check: Success.
Verifying data......
Copying Files...
-----------20%----------40%----------60%----------80%--------100%
[oam@oamhost oam]$ [CONFIG] Launching Config Actions....
Started Configuration:Web Tier Configuration
[CONFIG]:Create and Start AS Instance (instance1)
[CONFIG] [Web Tier Configuration] [Create and Start AS Instance (instance1)]:Creating Oracle Instance directories...
[CONFIG] [Web Tier Configuration] [Create and Start AS Instance (instance1)]:Recording OPMN ports reservations...
[CONFIG] [Web Tier Configuration] [Create and Start AS Instance (instance1)]:Bootstrapping OPMN configuration files...
[CONFIG] [Web Tier Configuration] [Create and Start AS Instance (instance1)]:Instantiating opmnctl for direct usage...
[CONFIG] [Web Tier Configuration] [Create and Start AS Instance (instance1)]:Skipping instance registration
[CONFIG] SUCCESS:Create and Start AS Instance (instance1)
[CONFIG]:Create and Start OHS Component (ohs1)
[CONFIG] [Web Tier Configuration] [Create and Start OHS Component (ohs1)]:Creating empty component directories...
[CONFIG] [Web Tier Configuration] [Create and Start OHS Component (ohs1)]:Provisioning OHS files for ohs1
[CONFIG] [Web Tier Configuration] [Create and Start OHS Component (ohs1)]:Copying OHS files from ORACLE_HOME to ORACLE_INSTANCE locations
[CONFIG] [Web Tier Configuration] [Create and Start OHS Component (ohs1)]:Customizing httpd.conf
[CONFIG] [Web Tier Configuration] [Create and Start OHS Component (ohs1)]:Adding component's process control to OPMN...
[CONFIG] [Web Tier Configuration] [Create and Start OHS Component (ohs1)]:Skipping ohs1 component registration.
[CONFIG] [Web Tier Configuration] [Create and Start OHS Component (ohs1)]:Invoking opmn reload...
[CONFIG] SUCCESS:Create and Start OHS Component (ohs1)
Configuration:Web Tier Configuration completed successfully
The installation of Oracle AS Common Toplevel Component, Oracle WebTier and Utilities CD completed successfully.
</pre></li>
</ul></li>
<li>Testing the installation: ok</li>
<li>Creating start/stop scripts in the /home/oam directory</li>
</ul>Installing the WebGate component<br />
<ul><li>unzipping software<ul><li>cd /opt/install/oam</li>
<li>mkdir webgates</li>
<li>unzip AccessManagerWebGates_111200.zip -d webgates</li>
<li>cd webgates/Disk1/stage/Response</li>
<li>cp WebgateSampleResponse.rsp ../../../../Webgate.rsp</li>
<li>Adapt Webgate.rsp<br />
<pre class="brush:text">[ENGINE]
#DO NOT CHANGE THIS.
Response File Version=1.0.0.0.0
[GENERIC]
#Provide the Oracle Home location. The location has to be the immediate child under the specified Middleware Home location. The Oracle Home directory name may only contain alphanumeric , hyphen (-) , dot (.) and underscore (_) characters, and it must begin with an alphanumeric character. The total length has to be less than or equal to 128 characters.
ORACLE_HOME=/u01/app/oam/product/webtier/WebGate
#Provide existing Middleware Home location.
MIDDLEWARE_HOME=/u01/app/oam/product/webtier
#Provide Location of GCC Library.
GCC_LIBRARY_LOCATION=/usr/lib
[SYSTEM]
[APPLICATIONS]
[RELATIONSHIPS]</pre></li>
</ul></li>
<li>Installing the webgate<ul><li>webgates/Disk1/runInstaller -silent -responseFile /opt/install/oam/Webgate.rsp -jreLoc /u01/app/oam/product/jdk1.6.0_39/jre</li>
<li>Result<br />
<pre class="brush:text">Starting Oracle Universal Installer...
Checking if CPU speed is above 300 MHz. Actual 2933 MHz Passed
Checking Temp space: must be greater than 150 MB. Actual 2380 MB Passed
Checking swap space: must be greater than 512 MB. Actual 16383 MB Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2013-02-28_10-45-08AM. Please wait ...[oam@oamhost oam]$ Log: /u01/app/oracle/product/oraInventory/logs/install2013-02-28_10-45-08AM.log
Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
Reading response file..
Expected result: One of oracle-6,oracle-5.6,enterprise-5.4,enterprise-4,enterprise-5,redhat-6.1,redhat-6,redhat-5.4,redhat-4,redhat-5,SuSE-10,SuSE-11
Actual Result: redhat-Red
Check complete. The overall result of this check is: Failed <<<<
Problem: This Oracle software is not certified on the current operating system.
Recommendation: Make sure you are installing the software on the correct platform.
Warning: Check:CertifiedVersions failed.
Expected result: 1024MB
Actual Result: 15948MB
Check complete. The overall result of this check is: Passed
TotalMemory Check: Success.
Verifying data......
Copying Files...
-----------20%----------40%----------60%----------80%--------100%
The installation of oracle.as.webgate.top completed successfully.
</pre></li>
</ul></li>
<li>Performing post installation tasks<ul><li>cd /u01/app/oam/product/webtier/WebGate/webgate/ohs/tools/deployWebGate/</li>
<li>./deployWebGateInstance.sh -w /u01/app/oam/product/webtier/instances/instance1/config/OHS/ohs1 -oh /u01/app/oam/product/webtier/WebGate<br />
Copying files from WebGate Oracle Home to WebGate Instancedir</li>
<li>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/u01/app/oam/product/webtier/OHS/lib:/u01/app/oam/product/webtier/WebGate/webgate/ohs/lib</li>
<li>pwd<br />
/u01/app/oam/product/webtier/WebGate/webgate/ohs/tools/deployWebGate</li>
<li>cd ../setup/InstallTools/</li>
<li>./EditHttpConf -w /u01/app/oam/product/webtier/instances/instance1/config/OHS/ohs1 -oh /u01/app/oam/product/webtier/WebGate -o webgate.conf<br />
The web server configuration file was successfully updated<br />
/u01/app/oam/product/webtier/instances/instance1/config/OHS/ohs1/httpd.conf has been backed up as /u01/app/oam/product/webtier/instances/instance1/config/OHS/ohs1/httpd.conf.ORIG</li>
</ul></li>
<li>Registering the new webgate agent<br />
<ul><li>Setting up the rreg tool<br />
<ul><li>cd /u01/app/oam/product/middleware_home/OAM/oam/server/rreg/client</li>
<li>gunzip RREG.tar.gz</li>
<li>tar -xvf RREG.tar</li>
<li>cd rreg/bin</li>
<li>vi oamreg.sh => setting the java_home directly</li>
</ul></li>
<li>Updating the /u01/app/oam/product/middleware_home/OAM/oam/server/rreg/client/rreg/input/OAM11gRequest.xml File<br />
<pre class="brush:xml"><?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
NAME: OAM11GRequest.xml - Template (with all options) for OAM 11G Agent Registration Request file
DESCRIPTION: Modify with specific values and pass file as input to the tool
-->
<OAM11GRegRequest>
<serverAddress>http://oamhost.contribute.be:7001</serverAddress>
<hostIdentifier>RREG_HostId11G</hostIdentifier>
<agentName>TestWebTier_WebGateAgent</agentName>
<agentBaseUrl>http://oamhost.contribute.be:8888</agentBaseUrl>
<virtualHost>false</virtualHost>
<applicationDomain>RREG_OAM11G</applicationDomain>
<autoCreatePolicy>false</autoCreatePolicy>
<maxCacheElems>100000</maxCacheElems>
<cacheTimeout>1800</cacheTimeout>
<tokenValidityPeriod>3600</tokenValidityPeriod>
<maxConnections>1</maxConnections>
<maxSessionTime>24</maxSessionTime>
<failoverThreshold>1</failoverThreshold>
<aaaTimeoutThreshold>-1</aaaTimeoutThreshold>
<sleepFor>60</sleepFor>
<debug>false</debug>
<security>open</security>
<denyOnNotProtected>1</denyOnNotProtected>
<allowManagementOperations>false</allowManagementOperations>
<allowTokenScopeOperations>false</allowTokenScopeOperations>
<allowMasterTokenRetrieval>false</allowMasterTokenRetrieval>
<allowCredentialCollectorOperations>false</allowCredentialCollectorOperations>
<cachePragmaHeader>no-cache</cachePragmaHeader>
<cacheControlHeader>no-cache</cacheControlHeader>
<ipValidation>0</ipValidation>
<ipValidationExceptions>
<ipAddress>10.11.11.11</ipAddress>
<ipAddress>10.11.11.12</ipAddress>
<ipAddress>10.11.11.13</ipAddress>
</ipValidationExceptions>
<logOutUrls>
<url>/logout1.html</url>
<url>/logout2.html</url>
</logOutUrls>
<logoutCallbackUrl>/oam_logout_success</logoutCallbackUrl>
<logoutTargetUrlParamName>end_url</logoutTargetUrlParamName>
<protectedResourcesList>
<resource>/**</resource>
</protectedResourcesList>
<publicResourcesList>
<resource>/public/index.html</resource>
</publicResourcesList>
<excludedResourcesList>
<resource>/excluded/index.html</resource>
</excludedResourcesList>
<protectedAuthnScheme></protectedAuthnScheme>
<userDefinedParameters>
<userDefinedParam>
<name>TestName</name>
<value>testValue1</value>
<value>testValue2</value>
<value>testValue3</value>
</userDefinedParam>
<userDefinedParam>
<name>MaxPostDataLength</name>
<value>750000</value>
</userDefinedParam>
<userDefinedParam>
<name>maxSessionTimeUnits</name>
<value>hours</value>
</userDefinedParam>
<userDefinedParam>
<name>RetainDownstreamPostData</name>
<value>false</value>
</userDefinedParam>
<userDefinedParam>
<name>useIISBuiltinAuthentication</name>
<value>false</value>
</userDefinedParam>
<userDefinedParam>
<name>URLInUTF8Format</name>
<value>true</value>
</userDefinedParam>
<userDefinedParam>
<name>inactiveReconfigPeriod</name>
<value>10</value>
</userDefinedParam>
<userDefinedParam>
<name>WaitForFailover</name>
<value>-1</value>
</userDefinedParam>
<userDefinedParam>
<name>proxySSLHeaderVar</name>
<value>IS_SSL</value>
</userDefinedParam>
<userDefinedParam>
<name>client_request_retry_attempts</name>
<value>1</value>
</userDefinedParam>
<userDefinedParam>
<name>ContentLengthFor401Response</name>
<value>0</value>
</userDefinedParam>
<userDefinedParam>
<name>SUN61HttpProtocolVersion</name>
<value>1.0</value>
</userDefinedParam>
<userDefinedParam>
<name>impersonationCredentials</name>
<value>cred</value>
</userDefinedParam>
<userDefinedParam>
<name>UseWebGateExtForPassthrough</name>
<value>false</value>
</userDefinedParam>
<userDefinedParam>
<name>syncOperationMode</name>
<value>false</value>
</userDefinedParam>
<userDefinedParam>
<name>filterOAMAuthnCookie</name>
<value>true</value>
</userDefinedParam>
</userDefinedParameters>
</OAM11GRegRequest>
</pre></li>
<li>./oamreg.sh inband /u01/app/oam/product/middleware_home/OAM/oam/server/rreg/client/rreg/input/OAM11GRequest.xml</li>
<li>Result:<br />
<pre class="brush:text">JAVA_HOME=/u01/app/oam/product/jdk1.6.0_39
CLASSPATH=./../lib/rreg.jar:./../lib:./../lib/RequestResponse.jar:./../lib/commons-codec-1.3.jar:./../lib/commons-httpclient-3.1.jar:./../lib/commons-logging-1.1.1.jar:./../lib/ojmisc.jar:./../lib/jps-api.jar:./../lib/jps-internal.jar:./../lib/jps-common.jar:./../lib/identitystore.jar:./../lib/identityutils.jar:./../lib/ldapjclnt11.jar:./../lib/dms.jar:./../lib/fmw_audit.jar:./../lib/ojdl.jar:./../lib/oraclepki.jar:./../lib/osdt_cert.jar:./../lib/osdt_core.jar:./../lib/osdt_jce.jar:./../lib/osdt_saml.jar:./../lib/osdt_xmlsec.jar:./../lib/xmlparserv2.jar:./../lib/jps-unsupported-api.jar:./../lib/nap-api.jar:./../lib/utilities.jar:./../lib/jps-ee.jar:.
OAM_REG_HOME=./..
------------------------------------------------
Welcome to OAM Remote Registration Tool!
Parameters passed to the registration tool are:
Mode: inband
Filename: /u01/app/oam/product/middleware_home/OAM/oam/server/rreg/client/rreg/input/OAM11GRequest.xml
Enter admin <a class="external-link" href="http://usernameweblogic/" rel="nofollow">username:weblogic</a>
Username: weblogic
Enter admin password:
Do you want to enter a Webgate password?(y/n):
y
Enter webgate password:
Enter webgate password again:
Password accepted. Proceeding to register..
Feb 28, 2013 1:56:35 PM oracle.security.am.engines.rreg.client.handlers.request.OAM11GRequestHandler getWebgatePassword
INFO: Passwords matched and accepted.
----------------------------------------
Request summary:
OAM11G Agent Name:TestWebTier_WebGateAgent
Base URL:http://oamhost.contribute.be:8888
URL String:RREG_HostId11G
Registering in Mode:inband
Your registration request is being sent to the Admin server at:http://oamhost.contribute.be:7001
----------------------------------------
Feb 28, 2013 1:56:39 PM oracle.security.jps.util.JpsUtil disableAudit
INFO: JpsUtil: isAuditDisabled set to true
Inband registration process completed successfully! Output artifacts are created in the output folder.
</pre></li>
<li>Copying the result to the instance directory of the webgate<br />
<ul><li>cd /u01/app/oam/product/middleware_home/OAM/oam/server/rreg/client/rreg/output/TestWebTier_WebGateAgent</li>
<li>cp * /u01/app/oam/product/webtier/instances/instance1/config/OHS/ohs1/webgate/config/.</li>
</ul></li>
<li>Starting the oam_server1</li>
<li>Restarting the webtier</li>
</ul></li>
</ul><h3> </h3>Huysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.com0tag:blogger.com,1999:blog-8800386591181069931.post-16733785369810545722013-04-09T09:05:00.000-07:002013-04-09T09:37:56.527-07:00Configuring OBIEE to use OAM<h3>
Challenge</h3>
Configuring OBIEE to use OAM as an SSO-solution.<br />
<h3>
Context</h3>
OBIEE 11.1.1.6.0 running on WLS 10.3.5<br />
OAM 11.1.2 running on WLS 10.3.6.0<br />
Both solutions are running on different machines or at lease different images of a virtualization solution.<br />
<br />
<h3>
Solution</h3>
After setting up a common ldap provider, like explained in <a href="http://huysmansitt.blogspot.de/2013/04/configuring-obiee-to-use-ovd-as.html" target="_blank">my previous blog,</a> you are ready to connect OBIEE with your OAM environment. <br />
Here are the steps we performed:<br />
<h4 id="OBIEEIntegration-ConfiguringtheHTTP_Servertoredirecttheurl's">
Configuring the HTTP_Server to redirect the url's</h4>
<div id="OBIEEIntegration-ConfiguringtheHTTP_Servertoredirecttheurl's">
We are going to make use of the Oracle HTTP_Server to redirect the users to the OAM for authentication and authorization. </div>
<ul>
<li>Installing an HTTP_Server with WebGate. See <a href="http://huysmansitt.blogspot.de/2013/04/installing-httpserver-with-webgate.html" target="_blank">this blog</a> for more info. </li>
<li>Adapt the /u01/app/oam/product/webtier/instances/instance1/config/OHS/ohs1/mod_wl_ohs.conf to<br />
<pre class="brush:java"># NOTE : This is a template to configure mod_weblogic.
LoadModule weblogic_module "${ORACLE_HOME}/ohs/modules/mod_wl_ohs.so"
# This empty block is needed to save mod_wl related configuration from EM to this file when changes are made at the Base Virtual Host Level
<IfModule weblogic_module>
WebLogicHost oamhost.contribute.be
WebLogicPort 7001
Debug ON
WLLogFile /tmp/weblogic.log
# MatchExpression *.jsp
</IfModule>
# <Location /weblogic>
# SetHandler weblogic-handler
# PathTrim /weblogic
# ErrorPage <a class="external-link" href="http://http/WEBLOGIC_HOME:WEBLOGIC_PORT/" rel="nofollow">http:/WEBLOGIC_HOME:WEBLOGIC_PORT/</a>
# </Location>
<Location /analytics>
SetHandler weblogic-handler
WebLogicHost obieehost.contribute.be
WebLogicPort 9704
</Location>
<Location /mapviewer>
SetHandler weblogic-handler
WebLogicHost obieehost.contribute.be
WebLogicPort 9704
</Location>
<Location /xmlpserver>
SetHandler weblogic-handler
WebLogicHost obieehost.contribute.be
WebLogicPort 9704
</Location>
</pre>
</li>
<li>Restart the HTTP_Server</li>
</ul>
<h4 id="OBIEEIntegration-ConfiguretheOBIEEcomponentstouseSSO:">
Configure the OBIEE components to use SSO:</h4>
<ul>
<li><div id="OBIEEIntegration-Addinganewidentityasserter">
<b>Adding a new identity asserter</b></div>
<ul>
<li>Go to the WLS console : http://obieehost.contribute.be:7001/console</li>
<li>Login and go to Security Realms -> MyRealm -> Providers(tab)<br />
<img class="confluence-embedded-image confluence-thumbnail" data-image-src="/wiki/download/attachments/185273513/Screen%20Shot%202013-04-05%20at%2009.56.16.png?version=1&modificationDate=1365148651000&api=v2" src="https://mapps.mazdaeur.com/wiki/download/thumbnails/185273513/Screen%20Shot%202013-04-05%20at%2009.56.16.png?version=1&modificationDate=1365148651000&api=v2" width="300" /></li>
<li>Create a new provider with<ul>
<li>Name: OAMProvider</li>
<li>Type: OAMIdentityAsserter</li>
</ul>
<img class="confluence-embedded-image confluence-thumbnail" data-image-src="/wiki/download/attachments/185273513/Screen%20Shot%202013-04-05%20at%2009.59.01.png?version=1&modificationDate=1365148895000&api=v2" src="https://mapps.mazdaeur.com/wiki/download/thumbnails/185273513/Screen%20Shot%202013-04-05%20at%2009.59.01.png?version=1&modificationDate=1365148895000&api=v2" width="300" /></li>
<li>Edit the newly created provider and set the control flag to SUFFICIENT and make sure that Active Type is set to "OAM_REMOTE_USER"<br />
<img class="confluence-embedded-image confluence-thumbnail" data-image-src="/wiki/download/attachments/185273513/Screen%20Shot%202013-04-05%20at%2014.15.12.png?version=1&modificationDate=1365164179000&api=v2" src="https://mapps.mazdaeur.com/wiki/download/thumbnails/185273513/Screen%20Shot%202013-04-05%20at%2014.15.12.png?version=1&modificationDate=1365164179000&api=v2" width="300" /></li>
<li>Reorder the providers to the list : OVDAuthenticator - OAMProvider - DefaultAuthenticator - DefaultIdentityAsserter<br />
<img class="confluence-embedded-image confluence-thumbnail" data-image-src="/wiki/download/attachments/185273513/Screen%20Shot%202013-04-05%20at%2010.02.52.png?version=1&modificationDate=1365148987000&api=v2" src="https://mapps.mazdaeur.com/wiki/download/thumbnails/185273513/Screen%20Shot%202013-04-05%20at%2010.02.52.png?version=1&modificationDate=1365148987000&api=v2" width="300" /></li>
<li>Restart the entire BI-domain</li>
<b> </b></ul>
</li>
<b> </b>
<li><div id="OBIEEIntegration-EnablingSSO">
<b>Enabling SSO</b></div>
<ul>
<li>Go to the EM : http://obieehost.contribute.be:7001/em</li>
<li>Go to the Business Intelligence (folder on the left) -> coreapplication -> Security (tab) -> Single Sign-On (tab)</li>
<li>Enable SSO and set Oracle Access Manager as SSO Provider<br />
<img class="confluence-embedded-image confluence-thumbnail" data-image-src="/wiki/download/attachments/185273513/Screen%20Shot%202013-04-05%20at%2011.44.15.png?version=1&modificationDate=1365155150000&api=v2" src="https://mapps.mazdaeur.com/wiki/download/thumbnails/185273513/Screen%20Shot%202013-04-05%20at%2011.44.15.png?version=1&modificationDate=1365155150000&api=v2" width="300" /><br />
</li>
<li>Restart all OBIEE components</li>
</ul>
<br />
While using the url's of the HTTP_Server, you should be authenticated through OAM. <br />
<br />
Good luck. <br />
<ul></ul>
</li>
</ul>
Huysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.com3tag:blogger.com,1999:blog-8800386591181069931.post-87943271137076404582013-04-02T09:03:00.002-07:002013-04-03T08:34:47.978-07:00Configuring OBIEE to use OVD as authenticator<h3>
Challenge</h3>
Configuring OBIEE to use OVD as an authenticator, allowing user accounts coming from OVD to login into OBIEE.<br />
Most of the blogs you find are talking about integrating OID or AD.<br />
<br />
<h3>
Context</h3>
OBIEE 11.1.1.6.0 running on WLS 10.3.5<br />
OVD 11.1.1.6.0 running on WLS 10.3.6.0<br />
Both solutions are running on different machines or at lease different images of a virtualization solution.<br />
<br />
<h3>
Solution</h3>
Before starting with the technical implementation, we need to clarify something.<br />
There is no concept of multiple authenticators, the <a href="http://docs.oracle.com/cd/E23943_01/bi.1111/e10543/privileges.htm#BABCDCFE" target="_blank">documentation</a> is clearly speaking of "Using Alternative Authentication Providers". This means that you have 2 choices :<br />
<ol>
<li>Use the default authenticator: this is the situation ootb. This means that all users are coming from this default authenticator. Also the BISystemUser and the OracleSystemUser are stored in this authenticator. No other authenticators are in place.</li>
<li>Use a different authenticator: being it an OID-authenticator, an AD-authenticator or OVD-authenticator or even a SQL-authenticator. In this scenario, your new authenticator needs to be the prime one (first in the list of providers in the WLS console) and needs to have all the users and the BISystemUser. The OracleSystemUser may still reside in the default authenticator.</li>
</ol>
While the documentation seems to allow you the option to have both providing user information at the same time, be aware this isn't the case. Bug 16568236 has been raised for this (this is a documentation bug!).<br />
<br />
Now that we have clarified that fact, we know that when we want to use another authentication provider that we need to go all the way, not just adding the provider to list. The latter just works for any j2ee application, but not for OBIEE and I believe neither for WebCenter.<br />
<br />
Here are the steps to perform if you want to use OVD as an "Alternative" authentication provider:<br />
<ul>
<li><b>Configure OVD as a new authenticator</b> in the OBIEE WLS domain. Clearly identify the attributes you want to use as unique identifier for your entity. At the customer we used the sn for the readable name of the groups, while the cn has the unique identifier of the group. OBIEE looks at the name of the group to know which group it is and not the unique identifier. So make sure that you have the right configuration there.</li>
<li>Here is a part of the realm we used :<br />
<realm><br />
<<a class="external-link" href="http://secauthentication-provider/" rel="nofollow">sec:authentication-provider</a> <a href="http://www.blogger.com/blogger.g?blogID=8800386591181069931" rel="nofollow">xsi:type="wls:oracle-virtual-directory-authenticatorType</a>"><br />
<<a class="external-link" href="http://secname/" rel="nofollow">sec:name</a>>OVDAuthenticator</<a class="external-link" href="http://secname/" rel="nofollow">sec:name</a>><br />
<<a class="external-link" href="http://seccontrol-flag/" rel="nofollow">sec:control-flag</a>>SUFFICIENT</<a class="external-link" href="http://seccontrol-flag/" rel="nofollow">sec:control-flag</a>><br />
<<a class="external-link" href="http://wlshost/" rel="nofollow">wls:host</a>>ovd.contribute.be</<a class="external-link" href="http://wlshost/" rel="nofollow">wls:host</a>><br />
<<a class="external-link" href="http://wlsport/" rel="nofollow">wls:port</a>>6501</<a class="external-link" href="http://wlsport/" rel="nofollow">wls:port</a>><br />
<<a class="external-link" href="http://wlsuser-object-class/" rel="nofollow">wls:user-object-class</a>>inetOrgPerson</<a class="external-link" href="http://wlsuser-object-class/" rel="nofollow">wls:user-object-class</a>><br />
<<a class="external-link" href="http://wlsprincipal/" rel="nofollow">wls:principal</a>>cn=orclAdmin</<a class="external-link" href="http://wlsprincipal/" rel="nofollow">wls:principal</a>><br />
<<a class="external-link" href="http://wlsuser-base-dn/" rel="nofollow">wls:user-base-dn</a>>ou=users, dc=contribute, dc=be</<a class="external-link" href="http://wlsuser-base-dn/" rel="nofollow">wls:user-base-dn</a>><br />
<<a class="external-link" href="http://wlsgroup-base-dn/" rel="nofollow">wls:group-base-dn</a>>ou=groups, dc=contribute, dc=be</<a class="external-link" href="http://wlsgroup-base-dn/" rel="nofollow">wls:group-base-dn</a>><br />
<<a class="external-link" href="http://wlsgroup-search-scope/" rel="nofollow">wls:group-search-scope</a>>onelevel</<a class="external-link" href="http://wlsgroup-search-scope/" rel="nofollow">wls:group-search-scope</a>><br />
<<a class="external-link" href="http://wlsgroup-from-name-filter/" rel="nofollow">wls:group-from-name-filter</a>>(&amp;(sn=%g)(objectclass=groupofUniqueNames))</<a class="external-link" href="http://wlsgroup-from-name-filter/" rel="nofollow">wls:group-from-name-filter</a>><br />
<<a class="external-link" href="http://wlsall-groups-filter/" rel="nofollow">wls:all-groups-filter</a>>(&amp;(sn=*)(|(objectclass=groupofUniqueNames)(objectclass=groupofurls)))</<a class="external-link" href="http://wlsall-groups-filter/" rel="nofollow">wls:all-groups-filter</a>><br />
<<a class="external-link" href="http://wlsstatic-group-name-attribute/" rel="nofollow">wls:static-group-name-attribute</a>>sn</<a class="external-link" href="http://wlsstatic-group-name-attribute/" rel="nofollow">wls:static-group-name-attribute</a>><br />
<<a class="external-link" href="http://wlsdynamic-group-name-attribute/" rel="nofollow">wls:dynamic-group-name-attribute</a>>sn</<a class="external-link" href="http://wlsdynamic-group-name-attribute/" rel="nofollow">wls:dynamic-group-name-attribute</a>><br />
<<a class="external-link" href="http://wlsgroup-membership-searching/" rel="nofollow">wls:group-membership-searching</a>>limited</<a class="external-link" href="http://wlsgroup-membership-searching/" rel="nofollow">wls:group-membership-searching</a>><br />
</<a class="external-link" href="http://secauthentication-provider/" rel="nofollow">sec:authentication-provider</a>><br />
</li>
<li>Remark: in the config.xml file you only see the attributes that do not correspond to the default value. That's why not all attributes are mentioned in here. </li>
<li>Restart the entire bi-domain </li>
<li>Make sure that you can see your users and the groups. Also make sure that you can see the group information per user in the WLS-console. It is normal that you can not change the information of the user, nor the group, nor the group-information of the user. These are all read-only information.</li>
<li>To be able to use users from this authenticator, you need to put all others also on 'SUFFICIENT' and put this authenticator first.</li>
<li><b>Identify the BISystemUser.</b> <br />
This user is used for internal communication between the OBIEE components. This user must reside in the Authenticator that is first in the list of WLS. The name of this special user may be anything you want.<ul>
<li>Identify a user in the new OVDAuthenticator. This user doesn't need any role. We call this user's username from now on 'bisystemuser'</li>
<li>Go to the WLS console <br />
<ul>
<li>Go to Security Realms -> myrealm -> Users and Groups -> Users<br />
Verify that the bisystemuser appears in the list.</li>
<li>Now go to Roles and Policies -> Realm Roles -> Global Roles -> Roles. Click on the 'View Role Conditions'-link of the Admin role.</li>
<li>Now add the bisystemuser as a condition to the list, by clicking on the 'Add Conditions' button. <br />
In the following screen select 'User' as predicate list and click on 'Next'. Type 'bisystemuser' in the first field and click the 'Add' button. Now click on 'Finish'.<br />
Now the bisystemuser should be added to the condition list.</li>
<li>Click on the 'Save'-button </li>
<li>Let's do the same thing for the jms module.<br />
In the WLS console, go to Services -> Messaging -> JMS Modules</li>
<li>Click on the BipJmsResource-link. Go to the Security-tab and then the Policies tab.</li>
<li>Now, like with the global roles, add the bisystemuser to the condition list.</li>
<li>Make sure that there are no pending changes in the WLS console, otherwise activate them.</li>
</ul>
</li>
<li style="text-align: left;">Perform the following actions in the FMW console <a class="external-link" href="http://defrldas001.mle.mazdaeur.com:7001/em%29" rel="nofollow"></a><ul>
<li style="text-align: left;">Under the WebLogic Domain folder, find the BI-Domain and select it.</li>
<li style="text-align: left;">From the drop down menu, select Security->Credentials<br />
Now we are going to define which user and his password to use, to communicate with OWSM.<ul>
<li style="text-align: left;">Select the record 'system.user', under the 'oracle.bi.system'-folder and click on the 'Edit'-link.</li>
<li style="text-align: left;">Now enter the username and password from the bisystemuser.</li>
</ul>
</li>
<li style="text-align: left;">Now we are going to put this user in the correct application roles.<ul>
<li style="text-align: left;">Back on the drop down menu from the BI-domain, select Security->Application Roles</li>
<li style="text-align: left;">In the field 'Application Stripe', select 'obi' and then click on the search image. Then select the BISystem application role and click on the 'Edit'-link.</li>
<li style="text-align: left;">Now click on the 'Add'-link to add the bisystemuser. </li>
</ul>
</li>
<li style="text-align: left;">The last step is to specify which attributes from OVD, OBIEE should use.<ul>
<li style="text-align: left;">Back on the drop down menu from the BI-domain, select Security->Security Provider Configuration</li>
<li style="text-align: left;">Under the Security Stores, click on the +-sign for Identity Store Provider. Then click on the Configure-button.</li>
<li style="text-align: left;">Use the Add-link to add the following properties:<ul>
<li style="text-align: left;">user.login.attr = cn</li>
<li style="text-align: left;">username.attr = cn</li>
<li style="text-align: left;">virtualize = true</li>
<li style="text-align: left;">PROPERTY_ATTRIBUTE_MAPPING = GUID=sn<br />Not sure this does actually anything, it is just that in our stable situation we had this configured.</li>
</ul>
</li>
<li style="text-align: left;">Click on the 'Ok'-button.</li>
</ul>
</li>
</ul>
</li>
<li style="text-align: left;">Stop the entire BI-environment and restart it.</li>
<li style="text-align: left;">When the bi_server1 server is starting, pay attention to the end. If you see an error, saying that something is wrong with the identity store or the connection to it, then you need to repeat the steps previously mentioned.<br />
</li>
</ul>
</li>
<li><b>Move existing users</b> to the new authenticator.<br />
At this point, you should be able to log-on with the users coming from your OVDAuthenticator. The following steps are needed, when you already had some users logged-on to the OBIEE server before and you moved them to the OVDAuthenticator. The information for these users in the catalog need to be updated. This can be done by the following steps:</li>
<ul>
<li>Make a backup of the catalog<ul>
<li>cd /opt/bi/install/middleware/instances/instance1/bifoundation/OracleBIPresentationServicesComponent/coreapplication_obips1/catalog</li>
<li>cp -r <catalog-name> /tmp/<catalog-name>_backup<br />
You may put the copy anywhere you want, as long as you do not put it under the catalog directory, because refreshing the GUID's will be called for all catalogs under this directory, so also your backup. </li>
</ul>
</li>
<li>Make a backup of the repository file(s)</li>
<ul>
<li>cd /opt/bi/install/middleware/instances/instance1/bifoundation/OracleBIServerComponent/coreapplication_obis1</li>
<li>cp -r repository /tmp/repository_backup </li>
</ul>
<li>Refresh GUID's: since you moved the users to another authenticator, the users will have different GUID's (Global User ID's). To sync the information from the catalog with the new users GUID, you need to perform the following steps. Make sure all users exist in the new authenticator.<br />
Create a script with the following content<br />
<pre class="brush:java">#!/bin/bash
export OPMNCTL_HOME=/opt/bi/install/middleware/instances/instance1/bin
export NQSCONFIG_HOME=/opt/bi/install/middleware/instances/instance1/config/OracleBIServerComponent/coreapplication_obis1
export INSTANCECONFIG_HOME=/opt/bi/install/middleware/instances/instance1/config/OracleBIPresentationServicesComponent/coreapplication_obips1
echo --- STOPPING PRESENTATION SERVICE ---
$OPMNCTL_HOME/opmnctl stopproc ias-component=coreapplication_obips1
sleep 1
echo --- STOPPING BISERVER SERVICE ---
$OPMNCTL_HOME/opmnctl stopproc ias-component=coreapplication_obis1
sleep 1
echo --- SET FMW_UPDATE_ROLE_AND_USER_REF_GUIDS = YES IN NQSCONFIG ---
perl -pi -e 's/FMW_UPDATE_ROLE_AND_USER_REF_GUIDS = NO/FMW_UPDATE_ROLE_AND_USER_REF_GUIDS = YES/g' /opt/bi/install/middleware/instances/instance1/config/OracleBIServerComponent/coreapplication_obis1/NQSConfig.INI
echo --- SET UpdateAndExit IN instanceconfig ---
perl -pi -e 's/UpdateAccountGUIDs>none/UpdateAccountGUIDs>UpdateAndExit/g' /opt/bi/install/middleware/instances/instance1/config/OracleBIPresentationServicesComponent/coreapplication_obips1/instanceconfig.xml
echo --- STARTING BISERVER SERVICE ---
$OPMNCTL_HOME/opmnctl startproc ias-component=coreapplication_obis1
sleep 5
echo --- STARTING PRESENTATION SERVICE ---
$OPMNCTL_HOME/opmnctl startproc ias-component=coreapplication_obips1
sleep 1
echo --- SET FMW_UPDATE_ROLE_AND_USER_REF_GUIDS = NO IN NQSCONFIG ---
perl -pi -e 's/FMW_UPDATE_ROLE_AND_USER_REF_GUIDS = YES/FMW_UPDATE_ROLE_AND_USER_REF_GUIDS = NO/g' /opt/bi/install/middleware/instances/instance1/config/OracleBIServerComponent/coreapplication_obis1/NQSConfig.INI
echo --- SET none IN instanceconfig ---
perl -pi -e 's/UpdateAccountGUIDs>UpdateAndExit/UpdateAccountGUIDs>none/g' /opt/bi/install/middleware/instances/instance1/config/OracleBIPresentationServicesComponent/coreapplication_obips1/instanceconfig.xml
echo --- stopping all services ---
$OPMNCTL_HOME/opmnctl stopall
sleep 10
echo --- starting all services ---
$OPMNCTL_HOME/opmnctl startall
</pre>
</li>
<li>Run the script</li>
<li>Restart the entire bi-domain</li>
</ul>
</ul>
<ul>
<li><b>Clean up existing users</b> from the DefaultAuthenticator</li>
<ul>
<li>When you moved your users to the OVDAuthenticator and checked that everything is still working, you can then remove the users from the DefaultAuthenticator.</li>
<li>Try this out with a couple of users, before performing the big clean-up</li>
<li>Leave the BISystemUser and the OracleSystemUser in place</li>
<li>If your users also have weblogic roles, you need to add them to the OVDAuthenticator also. Just ad a role for a user by his name, for example : adding the "Administrators" role to a user.</li>
<li>There is also an option to completely remove the DefaultAuthenticator. We didn't perform this action. </li>
</ul>
</ul>
<h3 id="OBIEEIntegration-Lessonslearned">
Lessons learned</h3>
<ul>
<li>If you do not want to move the BISystemUser, then<ul>
<li>the DefaultAuthenticator and the DefaultIdentityAsserter should be the first in the list</li>
<li>All providers should be set on SUFFICIENT</li>
<li>Your ProviderAuthenticator should be put last</li>
<li>It only works when the users are also in the DefaultAuthenticator<ul>
<li>They don't have to have roles in this authenticator, this can be left in your custom authenticator</li>
<li>The password is also the one from your authenticator</li>
<li>They just need an entry in the DefaultAuthenticator</li>
</ul>
</li>
<li>Conclusion: if you do not want to use provisioning, then this is an unworkable scenario</li>
</ul>
</li>
<li>If you do move the BISystemUser, then<ul>
<li>your authentication provider should be put first</li>
<li>all providers should be on SUFFICIENT</li>
<li>all users need to exists in your provider, also the system ones, so BISystemUser</li>
<li>No need to have the users in the DefaultAuthenticator</li>
<li>You need to move the BISystemUser => you need to refresh the GUID's => take care of the catalog and rpd information => backup !!</li>
<li>Before refreshing GUID's, make sure all users exist in the new authenticator</li>
</ul>
</li>
</ul>
<br />
<br />
Huysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.com0tag:blogger.com,1999:blog-8800386591181069931.post-84537475029024699372013-04-02T05:08:00.001-07:002013-04-02T09:04:17.230-07:00Stopping all WLS-servers with force=true<h3>
Challenge</h3>
You want to stop your weblogic-servers with the option force='true'. This would drastically reduce the time to stop a WLS-server.<br />
<br />
<h3>
Solution</h3>
You could change your scripts and add the parameter, but perhaps you don't have control on those scripts.<br />
There is a place where you can add this option, so it will always be taken into account.<br />
In the stopWebLogic.sh-file, located in the bin-directory of your domain (typically user_projects/domains/<domain_name>/bin), replace the following line<br />
<pre class="brush:java">echo "shutdown('${SERVER_NAME}','Server', ignoreSessions='true')" >>"shutdown.py"
</pre>
by<br />
<pre class="brush:java">echo "shutdown('${SERVER_NAME}','Server', force='true', ignoreSessions='true')" >>"shutdown.py"
</pre>
Huysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.com0tag:blogger.com,1999:blog-8800386591181069931.post-63231646647172377362013-04-02T05:02:00.002-07:002013-04-02T09:04:45.800-07:00Perl Exception<h3>
Challenge</h3>
When running perl-scripts, like the oracle opmn command, you receive the following error:<br />
<pre class="brush:java">perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_CTYPE = "UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
</pre>
<br />
<h3>
Solution</h3>
Add the following lines to your script or your profile (like .bash_profile):<br />
<pre class="brush:java">export LC_CTYPE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
</pre>
<br />
<br />Huysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.com0tag:blogger.com,1999:blog-8800386591181069931.post-9208037141806072492012-10-02T08:16:00.006-07:002012-10-05T08:41:00.976-07:00OOW & JavaOne 2012: Thursday<h3>
<a href="http://huysmansitt.blogspot.com/2012/09/oow-12-overview-unconventional-sessions.html">Sunday</a> - <a href="http://huysmansitt.blogspot.com/2012/10/oow-javaone-2012-monday.html">Monday</a> - <a href="http://huysmansitt.blogspot.com/2012/10/oow-javaone-2012-tuesday.html">Tuesday</a> - <a href="http://huysmansitt.blogspot.com/2012/10/oow-javaone-2012-wednesday.html">Wednesday</a> - <span style="color: #cccccc;">Thursday</span></h3>
<h3>
</h3>
<h4>
HOL9967 Developing Applications for Mobile iOS and Android Devices with Oracle ADF Mobile: Hands-on Lab</h4>
Nice hands-on using the not-yet-available JDev R3 with the ADF mobile plugin. Nice to see that we got rid of the Trinidad components and the simplified development and deployment architecture.<br />
To get the rumors out of the way: they are still using the PhoneGap solution to interact with the device capabilities.<br />
<br />
Very good news is the general availability of the solution. Now this is targeted within 3 weeks. Really looking forward to that. To keep up to date, follow the ADF Mobile blog on <a href="http://blogs.oracle.com/mobile">http://blogs.oracle.com/mobile</a>.<br />
<h4>
Oracle Usability Lab Tour </h4>
This was not a traditional session, but we were able to go to HQ of Oracle and see how the usability team is tackling the different challenges. Nice to see is the amount of work they are doing and growth of the team itself. Now you have people looking after the applications, fusion applications and even middleware solutions. Also the developer tools are being monitored.<br />
The coolest demo was off course the eye-tracker. It keeps track on the focus of the eyes to determine how people look at pages when searching for information. This information is then used to make the screen of the products more user-friendly.<br />
<br />
We were back @5pm and that was then our last action @OOW12.<br />
Hopefully the ready was interesting and we are looking forward to the release of all this great new products and features from Oracle.<br />
<br />
If you still hungry for more information on OOW12, please join us <a href="http://www.eventserver.be/oracle/openxperience2012/index.php?action=main_index" target="_blank">@OracleExperienceDay</a>. Hope to see you all there.Huysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.com0tag:blogger.com,1999:blog-8800386591181069931.post-31139953871081014382012-10-02T08:16:00.002-07:002012-10-05T08:29:17.967-07:00OOW & JavaOne 2012: Wednesday<h3>
<a href="http://huysmansitt.blogspot.com/2012/09/oow-12-overview-unconventional-sessions.html">Sunday</a> - <a href="http://huysmansitt.blogspot.com/2012/10/oow-javaone-2012-monday.html">Monday</a> - <a href="http://huysmansitt.blogspot.com/2012/10/oow-javaone-2012-tuesday.html">Tuesday</a> - <span style="color: #cccccc;">Wednesday</span> - <a href="http://huysmansitt.blogspot.com/2012/10/oow-javaone-2012-thursday.html">Thursday</a></h3>
<h3>
</h3>
<h4>
CON2425 Do It Yourself: Custom JavaFX Controls</h4>
It is always a good idea to start your day with an impressive demo of a "cool" technology. Again an hour of impressive demo's. One thing is sure, I really need to start getting into it.<br />
The speaker talked about the different ways of creating your own JavaFX controls. Looking at the result, it is really worthwhile.<br />
Ending the hour with some very good tips:<br />
<ol>
<li>Use cache and cachehint</li>
<li>Tricky effects: set the animation on the group, not on the shape</li>
<li>Visualizations</li>
<li>Read-only properties</li>
<li>Use Scenic View: a separate tool for debugging your code and the JavaFX Components</li>
<li>Use FxExperience tools: easy tool, allowing you to visually create your own styelsheet or to inspect an existing stylesheet.</li>
<li>Get the source of the components. </li>
<li>JFXtras project: good resource for examples and a place where you can share your components with the community.</li>
<li>Use FXML for design, not for animations</li>
</ol>
<h4>
CON3870 What's New in JSF: A Complete Tour of JSF 2.2</h4>
Nice to hear that JSF was already present on the JavaOne2001 and that today it is used everywhere on the world, even Antarctica.<br />
This new version tries to restate the scope of the features on JSF, between the server side and the client side.<br />
They do not foresee any big releases anymore, like happened with the 2.0 release. Off course, who can look into the future :-).<br />
A small overview of the different new features:<br />
<ul>
<li>HTML5 friendly markup support</li>
<li>Faces Flows: are like modules of pages. Being an ADF developer, this sounds very familiar. The need thing here is the fact that you can declare this flow in java or in xml.</li>
<li>Cross site request forgery protection</li>
<li>Load facelets via resourcehandlers</li>
<li>FileUpload component</li>
<li>Multi-templating</li>
</ul>
A bit strange to look at in the beginning, is the combination of writing pure HTML5 code and embed JSF attributes in them. So you can do things like : <input type="color" jsf:value="#{requestScope.MyBean.colorValue}". Once you are using this kind of construct, the standard input-component will be transformed into a JSF component.<br />
Another cool concept is the ClientWindow, it maps to the browsers view and covers multiple view node (=pages). <br />
Another feature is the viewactions. You can declare an action and define when it should be executed, like after loading a page or during load or before load. Really something that could be helpful in the ADF solution also.<br />
<h4>
CON9013 Best Practices for Extending Oracle Applications with Oracle WebCenter Portal</h4>
Nice to have again a typical Igor Polyakov session: a lot of very interesting information, even for seasoned webcenter people.<br />
WebCenter Portal is mostly used for application dashboarding and self-service environments. These kind of applications rely heavily on integration. Here are the different integration possibilities:<br />
<ul>
<li>Markup Integration: this means integration on the glass. It has a quick ROI and very little development effort. Possible markup integration methods are:</li>
<ul>
<li>WSRP Portlets</li>
<li>ADF Taskflows</li>
<li>Pagelet Producer: this a product of the WebCenter stack allowing you to extend existing applications or render existing applications as pagelets that can be used in portal environments.</li>
</ul>
<li>Data Integration: here we are not integration UI, but the data sources themselves. This means that you will need to create a new UI on top of the existing data sources. Also here we have different possibilites:</li>
<ul>
<li><u><b>Through API's</b></u>: you are using web services or connect directly to different data sources. On top of these you will need to create your UI, this can be done by ADF Taskflows, portlets or business mashups.</li>
<li><u><b>BI Integration</b></u>: instead of going directly to the database, you can use the BI Presentation Services to deliver you pre-calculated information. This can be done through BiReports and Dashboards. </li>
<li><u><b>BPM Integration</b></u>: you can make use of the BPM Process Portal, which is integrated in your WebCenter Portal solution. You can also make use of the BPM Human Tasks integration points.</li>
<li><u><b>Service Access Layer</b></u>: is a new product which is going to be released in PS7 somewhere next year. It is a solution that allows for separation of data gathering and data visualization, very comparable with the setup you do for a BiPublisher Report 11g. How to work with this product:</li>
<ul>
<li>Domain experts will need to address the applications integration challenges and will need to create the necessary SQL, WS or REST artifacts.</li>
<li>With these artifacts, one can create reusable data provider.</li>
<li>There will be OOTB data providers and you will be able to create your own.</li>
<li>These data providers will be exposed as REST endpoints, allowing different technologies to make use of them.</li>
<li>Now business users can use the new Data Presenter, which is a wizard driven development tool allowing users to create rich ui's based on the data providers. All @runtime!!</li>
</ul>
</ul>
</ul>
<h4>
CON9440 Mobile Enablement of Oracle Fusion Applications with Oracle Fusion Mobile Development</h4>
Welcome to the new buzz-word for Fusion Applications: TAP. The name is not an abbreviation, but simply referring to the way one works with a tablet; through tapping on the device.<br />
It has become a nice clean app with simple and consistent UI's. For the application world, this is really a game changer, the technology world was already aware of these capabilities.<br />
For Oracle mobility is all about true flexibility, getting things done. It is not the purpose to recreate CRM on the tablet. This application should really fit in the way you live and work. Meaning when and where you can work and what kind of actions you perform the most. It should increase your organization's velocity, not slowing momentum down.<br />
<br />
What are the key capabilities of this TAP product:<br />
<ul>
<li>Because it is available on a tablet, the application is always on. You don't need to wait for it.</li>
<li>There is a TAP composer, allowing you to define the layout of the tap application.</li>
<li>It has off-line capabilities, allowing you to work wherever there is no internet connection. The way this works, is by caching everything you touch will you are on-line. So once you are off-line, the same information is still available.</li>
<li>Possible deployments:</li>
<ul>
<li>Cloud apps for mobile web browsers: not yet there, but soon :-)</li>
<li>Cloud apps for tablets: native apps</li>
<li>Cloud apps for smartphones: there are more focused on single applications. Not integration of different applications, like with TAP </li>
</ul>
<li>It tries to give you the functionality you need depending on your role in the company</li>
<li>Productivity amplified: Live - Work - Connect: which is the key principal!</li>
<li>It is only available for cloud based solutions. So you can not connect to your Fusion Applications running on-premise, for the moment.</li>
<li>You can download it right now from the Apple Store and play with. When you open the application, you have the possibility to login or to use test data. Use the latter if you just want to play around and you do not have a Fusion Application SAAS service running.</li>
<li>The whole idea is to combine different Fusion Applications into one single tablet app: TAP. No matter from which domain the information needs to come, it will be shown in the same app with the same UI controls.</li>
<li>It is designed for business users, who can access business information with it and transact on it.</li>
<li>License: you need a Fusion Cloud application license, this include the use of the TAP application.</li>
<li>They are still looking for early adapters. So if you are interested, let them know.</li>
</ul>
<h4>
CON8952 BPM: An Extension Strategy for Enterprise Applications</h4>
A good overview on the possible integration points between the Oracle Enterprise applications, like Siebel, eBusiness Suite, PeopleSoft, ... and the Oracle BPM product. For best practices, visit their best practices page on <a href="http://www.oracle.com/technetwork/topics/index-096924.html">http://www.oracle.com/technetwork/topics/index-096924.html</a>.<br />
Nice to see is that there is already a Belgium reference case: FN Herstal. Who are using Oracle BPM for their Order2Cash Project, together with the Oracle Business Rules product.Huysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.com0tag:blogger.com,1999:blog-8800386591181069931.post-23589986522401473022012-10-02T08:15:00.002-07:002012-10-05T07:40:41.492-07:00OOW & JavaOne 2012 : Tuesday<h3>
</h3>
<h3>
<a href="http://huysmansitt.blogspot.com/2012/09/oow-12-overview-unconventional-sessions.html">Sunday</a> - <a href="http://huysmansitt.blogspot.com/2012/10/oow-javaone-2012-monday.html">Monday</a> - <span style="color: #cccccc;">Tuesday</span> - <a href="http://huysmansitt.blogspot.com/2012/10/oow-javaone-2012-wednesday.html">Wednesday</a> - <a href="http://huysmansitt.blogspot.com/2012/10/oow-javaone-2012-thursday.html">Thursday</a></h3>
<h3>
</h3>
<h4>
KEY10723 Oracle OpenWorld Keynote:Oracle and EMC</h4>
This was the traditional Keynote of Thomas Kurian. The main theme was also here the Cloud. He gave a little more detail as Larry, but unfortunately nothing more. Also a big drawback, was the fact that the demo's were simple powerpoint presentations.<br />
One new information was the fact that by the end of the year, we should have a preview edition of the cloud services Collaboration and Analytics.<br />
<h4>
HOL10217 Getting Started with Oracle Java Cloud Service</h4>
This hands-on-lab started with a negative announcement: the lab environment was not available anymore. Some problems occurred during the night.<br />
With every negative force, there must be a positive one. So we got a very nice demo and the possibility to ask any questions we wanted. Hence the vast amount of information for this session.<br />
<br />
For the use of the cloud services, the development tools of Oracle (JDeveloper, OEPE, NetBeans, SQLDeveloper) will get a new "plugin" for easy connection with your cloud service. These special editions can be download from the cloud website. Just follow the Resources - Download links on the cloud service page.<br />
<br />
You can create as many trials as you want, certainly for the first couple of months.<br />
Be aware that this is PAAS, not IAAS. This means that you can not stop the clock. With IAAS you can stop your environment and you do not need to pay anymore. With PAAS, your environment is always running. Once you stop it, it is gone.<br />
Oracle has foreseen the concept of geo-locations. This mean, that you can define where in the world you want to run your service. Be aware, that the identity service runs per geo-locations. Meaning you can not share your identities over geo-locations. Hence, make sure that the services that need to work with each-other are running in the same geo-location. <br />
<br />
The hardware setup for the database and java service is as follows:<br />
<ul>
<li>The database service is based on a RAC based database running on ExaData machines. Oracle is running a couple of databases on these machines. But, according to them, they assure schema isolation, so no database isolation like Larry mentioned before.</li>
<li>The java service, which is composed of the WebLogic Server, runs on ExaLogic machines.</li>
</ul>
in this kind of environment it is not important to know on what the services are running, but instead knowing the SLA's that Oracle is setting forward. An example of this, is the fact that Oracle will guarantee that your applications keep on running even after an upgrade done by Oracle. This means that Oracle needs to make sure that it keeps there products backward compatible.<br />
<br />
For the moment, the concept of friendly URL's isn't implemented yet. The problem is the fact all URL's are SSL enabled and Oracle can only act as a CA for the oracle.com domain.<br />
<br />
Once your java service has been activated(=instantiation of your environment) , you have 4 portals at your disposal:<br />
<ul>
<li>My Accounts: allowing you to buy more services</li>
<li>My Services: portal for the service owner. Also here you will get the notification of Oracle when they are going to upgrade your environment.</li>
<li>Identity Console: managing your users in the cloud</li>
<li>Service Instance Console: you have one console for each service instance.</li>
</ul>
In your environment, you have 2 kind of loggings. One is the Job log, this is log for everything you ask Oracle to do something, like deploy application, stop application, .... On the other hand you have the Service log, this is the logging of the application server and your applications.<br />
<br />
There is a Cloud SDK, allowing you to do everything from the command line. There is even the possibility to have a "tail" functionality of your log files. Very cool.<br />
<br />
Whenever you do a deployment, the following things happen:<br />
<ul>
<li>Virus scanning of your application and sources</li>
<li>Whitelist scanning: looking for forbidden technology, like remote EJB's, unsupported protocols, ...</li>
<li>Deployment of your application</li>
</ul>
When you have different services started, under the same user name, then these services are linked automatically to each other. For example: your Developer service will know about your java and database service and will have a connection to them declared automatically. In your java service,you will have a JDBC connection declared automatically to your database service.<br />
<br />
<h4>
ESS11121 Oracle and NetSuite: Thriving in the Hybrid Cloud</h4>
Finally my first encounter with Larry's other flagship: NetSuite. While Oracle is building solutions for the the fortune top 500 companies, NetSuite primary vision is the fortune top 5 million companies.<br />
The solution is based on a single system to run your entire business on. It is not only cloud enabled, but also internationalized; meaning that different languages, currencies and country specific regulations can live in the same system.<br />
It was a great eye-opener. Perhaps also a good candidate for the smaller market countries, like Belgium. <br />
<h4>
CON4644 JavaFX Extreme GUI Makeover</h4>
Again a waaauw session on JavaFX. Very good demo's. I really need to get my hands on these things. The session started off with a bit unconventional menu based application. It looked really impressive, but yet based on really simple building blocks like the viewport. Again, CSS development is key here. Really check out these demo's, they should be available after JavaOne on <a href="https://blogs.oracle.com/javafx/" target="_blank">the presenters blog</a>.<br />
<h4>
KEU10724 Oracle OpenWorld Keynote: Oracle and Infosys</h4>
In this second keynote of Larry, we saw a bit of the same over again. It is clear that this OOW is all about Cloud Computing, Fusion Applications and Mobile development.<br />
Here are few of the key points, that I take back from this session:<br />
<ul>
<li>Fusion Applications (FA) is a complete suite, not a point implementation</li>
<li>FA is based on best in class platform (a bit of marketing here :-))</li>
<li>Apparently already 400 FA Cloud customers</li>
<ul>
<li>CRM(38%), ERP(23%), HCM(39%)</li>
<li>On Premise(26%), On Demand(9%), SAAS(65%)</li>
<li>EMEA(23%), APAC(10%), America(67%) </li>
</ul>
<li>It is very easy to move your apps between the different solutions, like on premise, on demand and cloud</li>
<li>FA is off course based on the FMW and DB technologies</li>
<li>According to Larry, data privacy should be put at the VM architecture or using the Oracle 12c multitenant DB layer. But certainly not in the application layer.</li>
<li>Oracle is the only one who have build their social solution as a platform and not as a suite of applications. This allows them to put social functionality in all of the solutions based on FMW. </li>
</ul>
<h4>
CON8901 Optimize Enterprise Business Processes with Oracle WebCenter and Oracle BPM</h4>
This session gave a simple overview of the different features of the product set. Nice to see, clean demo, but no best practices on how to handle this. But again, very nice to see the integration between the different Oracle products.Huysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.com0tag:blogger.com,1999:blog-8800386591181069931.post-51617209599925904622012-10-02T08:11:00.002-07:002012-10-05T07:41:51.464-07:00OOW & JavaOne 2012: Monday<h3>
</h3>
<h3>
</h3>
<h3>
<a href="http://huysmansitt.blogspot.com/2012/09/oow-12-overview-unconventional-sessions.html">Sunday</a> - <span style="color: #cccccc;">Monday</span> - <a href="http://huysmansitt.blogspot.com/2012/10/oow-javaone-2012-tuesday.html">Tuesday</a> - <a href="http://huysmansitt.blogspot.com/2012/10/oow-javaone-2012-wednesday.html">Wednesday</a> - <a href="http://huysmansitt.blogspot.com/2012/10/oow-javaone-2012-thursday.html">Thursday</a></h3>
<h3>
</h3>
<h3>
</h3>
<h3>
</h3>
<h4>
</h4>
<h4>
CON6234 Do You Really Get Class Loaders?</h4>
Good session on not only
the way classloaders are working and how many there actually are, but
also on what situations you can get yourself into as a developer and how
(not also) to solve this. The use of real examples and naming the
different type of exceptions and errors possible in a certain situation,
was well received.<br />
What was new for me :<br />
<ul>
<li>Normally a classloader checks first the parent classloader and then
his context in searching for a class. Except the WAR-classloader, he
checks first his own context and then calls out to his parent
classloader.</li>
<li>You can get the URI of the class that is being loaded. Doing this shows you from where the class is really loaded.</li>
<li>Nice help is the "-verbose:class" jvm attribute and the "javap
-private MyClass" command to help you understand how the classloaders
are loading your class</li>
<li>The full classname is build up from the Class name and the
Classloader name, the same goes for the packaging. This means that when
different classloaders are loading classes from the same package, you
can get into trouble.</li>
<li>Classloaders are build for applets, not application servers
(according to the speaker). Hence the different kind of problems you
can run into.</li>
</ul>
What I'm not sure about, is the fact whether all JVM's do this
in the same way. But at least, if(when) something goes wrong, you know
where to look for.<br />
One really clear message he had for all of us: never trust your assumptions. Always verify them.<br />
<h4>
GEN9433 General Session: Oracle Fusion Applications - Overview, Strategy and Roadmap</h4>
A really packed session. I counted 828 chairs, not one was free when the session started.<br />
The strategy of Apps remains the same as it was years before:<br />
<ul>
<li>Continued investment in the "old" applications (Siebel, eBusiness Suite, PeopleSoft, ...)</li>
<li>Combine both the "old" apps with the new Fusion Applications.</li>
<li>Or go for the full suite.</li>
</ul>
The objectives of Fusion Apps:<br />
<ul>
<li>User Experience : Intelligent, Social, Mobile</li>
<li>Innovation : Easy extensions, Upgrade friendly, Standards base</li>
<li>Deployment : Incremental, Cloud, Engineerd</li>
</ul>
I still got the feeling they have some work to do on these objects :-).<br />
<br />
Release 5 of 11g is coming out this or next month. <br />
<br />
Something
new, that I wasn't expecting to hear, was the fact that you are able to
get information from the "social network" sites on the internet, like
Google+, LinkedIn, Facebook, discussion forums, on your brand.<br />
There are 4 area's of personalization in the Fustion Apps:<br />
<ol>
<li>BI Perspective: changing graphs</li>
<li>Application Composer: change business objects and logic</li>
<li>Process Composer : change the business processes themselves</li>
<li>Page Composer : personalize the pages themselves</li>
</ol>
They also have there mobile solution ready. It is based on ADF
Mobile (which itself is not available yet), allowing them to run on
browsers, native apps and smarphone apps. In this solution they take
the ADF Mobile approach of having ADF UI and then using the REST SDK to
call out to the REST API's of the Fusion Apps.<br />
<br />
What does the future holds:<br />
<ul>
<li>More Localization</li>
<li>More Mobile</li>
<li>More Industries</li>
<li>More Power (Exa-ranges)</li>
<li>More Configurability</li>
</ul>
What's coming in Release 5:<br />
<ul>
<li>Time & Labor</li>
<li>Social Marketing</li>
<li>Resource and Project "Management"</li>
</ul>
Your choice:<br />
<ul>
<li>Continuee on your current path ("old" apps)</li>
<li>Adopt a Co-Existence Solution</li>
<li>Embrace the Complete Suite </li>
</ul>
<h4>
GEN11418 General Session: Overview of Oracle's Public Cloud Strategy</h4>
They see a shift in the Cloud offerings from a "capacity cloud" to a "capability cloud".<br />
Famous quote : "Think big, start small, fail fast, scale soon".<br />
Technology trends:<br />
<ul>
<li>Globalization</li>
<li>Big Data</li>
<li>Modernization</li>
<li>Mobility</li>
<li>Social Interactions</li>
</ul>
I believe these were the same last year also :-).<br />
You have
to look at cloud as a key enable of choice between service delivery
(IAAS, PAAS, SAAS) and service deployment (private, hybrid, public).<br />
<br />
IAAS offering: Storage, Compute, Secure Identity, Cache, Queues, Messaging services<br />
PAAS
offering: DB, Java, Developer, Mobile, Collaboration and Analytics
services and Application Store. These PAAS offering is based on the use
of the IAAS offering !!<br />
And PAAS itself is fully integrated with their SAAS solution.<br />
On the SAAS side, much effort is done on the Social part of the cake, in terms of Social Marketing and Social Campaign.<br />
<br />
My colleague will have more in depth information on this session.<br />
<h4>
CON8914 Oracle Coherence: past, present and future</h4>
Very nice overview on the history of Coherence. A clean picture on the evolution of the product over the years.<br />
Currently
Coherence is focusing on the on-premises and cloud adoption. In the
whole Oracle FMW stack, Coherence is suited in the Oracle Cloud
Application Foundation. In the context of the Exa-machines, what
important is to Coherence here is the Infiniband network, which reduces
the time to recover a node by 1/16th.<br />
<br />
Now that we know where we are coming from, let's see where we are going to.<br />
Coherence
12c (12.1.2) will be expected somewhere next year (how very precise
:-)). The fact that Coherence got now a FMW numbering, remember they
are coming from 3.7.x), signifies the importance of this product in the
entire FMW stack.<br />
Here are the themes for this release:<br />
<ul>
<li>Database sync: use of the Goldengate adaptor to sync changes in the database with the grid.</li>
<li>Configuration and Usability Improvements</li>
<li>One programming model for all events (triggers, backing maps, ...).
Curious how that would like and how they would make sure all existing
applications on Coherence wouldn't break.</li>
<li>Configuration Modernization</li>
<li>Asynchronous backups: speed vs consistency. Possible use-cases:
session management (apps servers are working like this also) and when
you have big processing to be done when setting a value, like a Ticker
feed.</li>
<li>Backup Management improvements. This talks about the backups of
your primary objects and backups above 1. These weren't always
assured. They will also add rack- and server-safe backups. Now only
the primary objects had this feature.</li>
<li>Exabus Improvement</li>
<li>Install, Upgrade and Patching: they are going to use the OUI
Installer for production release and a Quick Installer for development
releases. For patching they will be using OPatch.<br />Oh my God!!! I believe this was the pay off to have a FMW numbering :-)</li>
<li>Managed Coherence Servers being able to make use of the GAR (grid archive file)</li>
<li>Maven support</li>
<li>Execution Context ID (ECID). This is something really cool. Other
FMW components had this already. It is a unique id for a request
throughout the entire FMW stack. This enables you to follow the request
from WebServer to Database and Coherence in between. Very nice feature
for debugging and impact analysis.</li>
<li>Dynamic Thread Pool Sizing for Proxy Servers.</li>
<li>OSGi support via Library bundling</li>
<li>Enterprise Manager 12c</li>
<li>OEPE support</li>
<li>Coherence Incubator</li>
</ul>
What's coming after 12c (initial release, except for everything that didn't went into the first release):<br />
<ul>
<li>Cache Persistence: this feature will allow you to dump the cache
objects onto discs and load it backup again after a crash or when you
had data loss in the grid. 2 approaches : per node (very scalable) or by
a network drive (less scalable).</li>
<li>Federated Caching: this actually the inclusion of a Coherence
Incubator pattern in the product with some enhancements to it. Allowing
you to easily setup an Active-Active, Active-Passive and Hub&Spoke
configuration. </li>
</ul>
<h4>
CON4038 Project EASEL: Developing and Managing HTML5 in a Java World</h4>
Impressive project of the NetBeans people. You can test it using the NetBeans 7.3 Beta release.<br />
It
is all about a client-side project and JQuery knowledge in the editor.
It gives you a very nice tight integration between the browser and your
IDE. Selecting something in the browser (with the install of the
NetBeans plugin) will set the focus in the IDE to this component and
viceversa.<br />
Again, very impressive.<br />
<br />
Nice after
thought: there is a big change that this feature will find his way also
into JDeveloper. Thanks a lot for that folks.<br />
<h4>
BOF4279 In-dept layout and styling with the JavaFX Scene Builder</h4>
Nice
overview of some techniques to take into account when working with the
JavaFX Scene Builder. There is already a preview version of the 1.1
available, worth while to test it out.<br />
<br />
<h4>
BeNeLux Architect Event @Jasper's</h4>
I traded in 3 sessions for this event and it was a good descission.<br />
We
had the opportunity to talk to the Oracle experts on different domains,
like database, WebLogic Server, ADF, SOA, WebCenter (thanks to Yannick)
and the applications. Very good admosphere and I had many good and
open conversations with the pm's.<br />
Also nice to know that there is still a place for me @Oracle. Thanks folks, very much appreciated.<br />
<h3>
</h3>
Huysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.com1tag:blogger.com,1999:blog-8800386591181069931.post-5972701000136858302012-09-30T06:07:00.001-07:002012-10-02T08:28:05.003-07:00Overview unconventional sessions @OOW12 & @JavaOneHello everyone,<br />
<br />
also this year I've received the opportunity to visit the biggest Oracle event of the year, namely Oracle OpenWorld. According to <a href="https://blogs.oracle.com/oracleopenworld/entry/oracle_openworld_by_the_numbers" target="_blank">some figures</a>, it will be a very big event. Hopefully I can hook up with some ex-Oracle colleagues and find out the nice nasty details on their roadmaps.<br />
<br />
In this blog I'll keep track on the session I follow. Hopefully it will become very interesting reading.<br />
So keep track on this blog to find out the latest details.<br />
Since there are too many sessions @OOW, I have a colleague doing the same thing. Visit <a href="http://webapplicationdeveloper.blogspot.com/" target="_blank">his blog</a> for more information.<br />
<h3>
<span style="color: #cccccc;"> </span></h3>
<h3>
<span style="color: #cccccc;">Sunday</span> - <a href="http://huysmansitt.blogspot.com/2012/10/oow-javaone-2012-monday.html">Monday</a> - <a href="http://huysmansitt.blogspot.com/2012/10/oow-javaone-2012-tuesday.html">Tuesday</a> - <a href="http://huysmansitt.blogspot.com/2012/10/oow-javaone-2012-wednesday.html">Wednesday</a> - <a href="http://huysmansitt.blogspot.com/2012/10/oow-javaone-2012-thursday.html">Thursday</a><br /><u></u></h3>
<h3>
</h3>
<h3>
</h3>
<h3>
</h3>
<h4>
</h4>
<h4>
UGF10577 Oracle WebLogic Server Overview</h4>
Very, very high level overview of Fusion Middleware. Only 1 slide on WLS itself. Very much talk on Fusion Middleware parts like SOA, WebCenter, OBIEE, BPM, Identity Management, ... <br />
<h4>
UGF10401 Oracle WebCenter Content, Oracle WebCenter Sites and the Oracle WebCenter Spaces features. Which one is right for you?</h4>
A good session on the ever lasting question: which one of the 4 site building products of the WebCenter stack should I use.<br />
I'll skip the individual product feature set, more on that on the Oracle Experience Day.<br />
Question you should ask:<br />
<ul>
<li>Who will be using this site : employees, partners, customers</li>
<li>What are these users trying to accomplish?</li>
</ul>
When to use what?<br />
<ul>
<li>WebCenter Portal & Spaces : intranet - Oracle Look&Feel</li>
<li>WebCenter Sites : dot com sites - light weight => very scalable</li>
<li>WebCenter Content: use always</li>
<li>Exception: Partner Extranet : Sites or Portal => look for strenghts in dev team</li>
</ul>
How to use them together?<br />
<ul>
<li>Content & Portal => Content Presentor TaskFlow</li>
<li>Content & Sites => One way connector => read-only</li>
<li>Portal & Sites : Pagelet producer & Business Mashups </li>
</ul>
Join me at the <a href="http://www.eventserver.be/oracle/openxperience2012/index.php?action=main_index" target="_blank">Oracle Experience day</a>(
<style>
<!--
/* Font Definitions */
@font-face
{font-family:"Bookman Old Style";
panose-1:2 5 6 4 5 5 5 2 2 4;
mso-font-charset:0;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 0 0 0 1 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-name:"Normal\,Standaard groep arthur";
mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
line-height:14.0pt;
mso-line-height-rule:exactly;
mso-pagination:widow-orphan;
font-size:10.0pt;
mso-bidi-font-size:12.0pt;
font-family:"Bookman Old Style";
mso-fareast-font-family:"Times New Roman";
mso-bidi-font-family:"Times New Roman";
mso-ansi-language:NL;
mso-fareast-language:NL;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
font-size:10.0pt;
mso-ansi-font-size:10.0pt;
mso-bidi-font-size:10.0pt;
mso-ansi-language:NL;
mso-fareast-language:NL;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.WordSection1
{page:WordSection1;}
</style>
<span lang="NL-BE" style="font-family: "Bookman Old Style"; font-size: 10.0pt; mso-ansi-language: NL-BE; mso-bidi-font-family: "Times New Roman"; mso-bidi-font-size: 12.0pt; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: NL;">#oracleopenxperience</span>
) for more in depth information.<br />
<h4>
UGF10362 Netbeans and JavaFX</h4>
Waauw, there is really not other word for the things I saw in this session. Amazing graphics being used, developed in JavaFX but used in Swing clients, NetBeans platform based applications and in other JavaFX client applications.<br />
As you may know, running a standard Swing application on an iPad is, ... just leave at impossible.<br />
But what you could do is develop it with HTML 5, that runs virtually everywhere. Counterpart of this is that you would have 2 code streams to manage.<br />
Solution: build your graphical app in HTML 5, run it within JavaFX components (WebView) and show this JavaFX component in your Swing client.<br />
<br />
The only open question I had was : what amount of JavaFX code is needed to get this working.<br />
But at least this session showed me that the possibilities with JavaFX are almost infinitive.<br />
<h4>
UGF10414 Oracle Fusion Middleware Roundtable</h4>
No Comment <br />
<h4>
UGF10397 To Exalogic or not to Exalogic: An Architectural Journey</h4>
Nice overview on the road of actions they took to come to a decision to buy ExaLogic.<br />
Unfortunately, the deal didn't go through :-(. <br />
<h4>
UGF10400 Oracle Enterprise Manager 12c: Monitoring, Metric Extensions and Configuration Best Practices</h4>
Fully booked room, this was a first one. It may be because, this was a DBA session.<br />
The speaker had a very good knowledge on EM 10g-11g-12c.<br />
Key takeaways:<br />
<ul>
<li>Metrics Extension: use pl-scripts to create your own metrics</li>
<li>SQL Monitor</li>
<li>ASH Analytics: the future of "Top Activity"</li>
<li>LoadMap: to indicate the importance of tuning some sessions</li>
</ul>
<h4>
</h4>
<h4 class="detail">
KEY10721 Oracle OpenWorld Welcome Keynote: Oracle and Fujitsu </h4>
<div class="detail">
Starting with the Fujitsu keynote, we see that they are doing a lot of the same thing that Oracle does with their integrated systems. Not so innovative. What they do well, is presenting this as part of our day-to-day live.</div>
<div class="detail">
<br /></div>
<div class="detail">
Following was the keynote of Larry on Cloud and ExaData.</div>
<div class="detail">
The following main topics were touched:</div>
<ul>
<li>Cloud = SAAS + PAAS + IAAS</li>
<li>Announcement 1 : Oracle Cloud: now also with IAAS. A bit of a strange announcement, since we are still waiting on the other parts of the Oracle Cloud solution, which were promised last year.</li>
<li>Announcement 2 : Oracle Private Cloud. Which is the same concept as the Oracle Cloud, except for the fact that the hardware will be placed on-premise, behind your firewall. Just wondering what openings are needed in the firewall to allow Oracle to manage their (because you only rent and pay a monthly fee) machines.</li>
<li>Announcement 3 : Oracle Database 12c for 2013. A multitenant DB through the construct of a "Container Database".</li>
<li>Announcement 4: ExaData X3 with an impressive 26TB of DRAM & Flash and a 10x compression rate</li>
<li>Announcement 5: ExaData X3-2 Eight Rack </li>
</ul>
<h3>
<u></u></h3>
Huysmans Filiphttp://www.blogger.com/profile/15713082326248369612noreply@blogger.com0