I recently wrote a blog entry on the corporate blog.
Quick and easy development that basically any IT user can do. This entire process took me only 2 hours to build and run.
Have a nice read.
http://integr8consulting.blogspot.be/2013/07/use-oracle-bpm-11g-ps6-to-quickstart.html
Showing posts with label Technology. Show all posts
Showing posts with label Technology. Show all posts
Thursday, 1 August 2013
Monday, 29 July 2013
VMWare player and NAT setup
After being a fond user of Oracle Virtualbox and being very happy with it, I found myself recently working with VMWare Player.
Now a big advantage of Virtualbox is it's flexible network configuration. Unfortunately I didn't find any equally powerful or relevant features when using the player. Until I discovered this little feature, which I'll gladly share with you.
Now a big advantage of Virtualbox is it's flexible network configuration. Unfortunately I didn't find any equally powerful or relevant features when using the player. Until I discovered this little feature, which I'll gladly share with you.
Open a dos command window and navigate to the location where you installed VMWare player
For example folder :
c:\program files (x86)\VMWare\VMware Player\Then execute the following command :
"rundll32.exe vmnetui.dll VMNetUI_ShowStandalone"What you'll get is a nice graphical interface in which you can basically tune any network setting that you could think of.
Good luck and have fun using some extended features of VMWare Player.
Friday, 26 July 2013
Follow JDeveloper Memory Usage
I’ve come across this old but very handy option in Oracle JDeveloper. Basically it’s something I find very useful but often forget how to turn it on.
Open the jdev.conf file assiociated with Oracle JDeveloper. This file should be in the jdevmwhome/jdeveloper/jdev/bin folder.
At the end of this file add the following option.
AddVMOption -DMainWindow.MemoryMonitorOn=true
Once restarted you’ll have a nice memory overview at the bottom right of your screen.
It even allows you to force a garbage collection, just in case you are running close to memory limits.
Thursday, 29 July 2010
APEX-Plugin Site
With the release of apex 4.0 there has also a new site that contains the latest plug-in for this amazing framework.
The url is incredibly easy : http://www.apex-plugin.com/
Enjoy.
The url is incredibly easy : http://www.apex-plugin.com/
Enjoy.
Wednesday, 30 June 2010
Oracle APEX 4.0
Finally, the next generation development framework has been launched!!
http://www.oracle.com/technology/products/database/application_express/index.html
Can't wait to get started and get my fingers dirty with this excellent product.
Hope you folks are also filled with joy.
http://www.oracle.com/technology/products/database/application_express/index.html
Can't wait to get started and get my fingers dirty with this excellent product.
Hope you folks are also filled with joy.
Sunday, 17 January 2010
APEX 4.0 Early Adopters
For those who have been living under a rock for the past couple of days/weeks the APEX 4.0 Early Adopters website has been launched..
Join me in yelling "WOHOOOO".
To be honest I'm very happy of all the new features that have been added, a very good webservice support has especially taken my attention. This will allow for a much beter integration of the APEX framework into the SOA priciples of design. I hope :)
APEX 4.0 EA can be found at : http://tryapexnow.com
Enjoy.
Join me in yelling "WOHOOOO".
To be honest I'm very happy of all the new features that have been added, a very good webservice support has especially taken my attention. This will allow for a much beter integration of the APEX framework into the SOA priciples of design. I hope :)
APEX 4.0 EA can be found at : http://tryapexnow.com
Enjoy.
Sunday, 6 September 2009
Perform APEX administration tasks straight from PL/SQL
Recently I had to find a way to create new APEX users without having an admin manually creating them or having to create some sort of request page.
Now the easy way was to let the users do that themselves... Small hick-up though, you need to be an APEX Workspace administrator to create new end users. Meaning that 'normal' users had to be admin before being allowed to create new users.
Now in order to bypass this I just created a small batch that checks a simple table every now and then to see if new usernames where requested. A special administrator then automatically creates this user.
However in order to perform this task, I had to create a piece of PL/SQL code that would be able to run, connect to APEX without being integrated in a valid APEX session (from browser). I used (a more complex version of) the following code to set the correct workspace, log in as the JOB_MANAGER APEX ADMIN and create the new user.
A very short post but hope you guys find it useful.
Now the easy way was to let the users do that themselves... Small hick-up though, you need to be an APEX Workspace administrator to create new end users. Meaning that 'normal' users had to be admin before being allowed to create new users.
Now in order to bypass this I just created a small batch that checks a simple table every now and then to see if new usernames where requested. A special administrator then automatically creates this user.
However in order to perform this task, I had to create a piece of PL/SQL code that would be able to run, connect to APEX without being integrated in a valid APEX session (from browser). I used (a more complex version of) the following code to set the correct workspace, log in as the JOB_MANAGER APEX ADMIN and create the new user.
declare
l_workspace VARCHAR2 := 'WORKSPACE';
l_wks_id NUMBER;
begin
-- find workspace security id
l_wks_id := apex_util.find_security_group_id (p_workspace => l_workspace);
dbms_output.put_line('Workspace id : ' || l_workspace);
-- set workspace security id
wwv_flow_api.set_security_group_id (l_wks_id);
-- login user
apex_custom_auth.login (p_uname => 'JOB_MANAGER',
p_password => 'welcome1',
p_session_id => V('APP_SESSION'));
-- create user
apex_util.create_user (p_user_name => 'username',
p_first_name => 'first_name',
p_last_name => 'last_name',
p_description => 'description',
p_web_password => 'welcome1',
p_email_address => 'first.last@mail.com');
end;
/
A very short post but hope you guys find it useful.
Sunday, 17 May 2009
Use Oracle APEX as user interface for Oracle BPM using the PAPI Webservice
The last couple of weeks I've been messing around with Oracle BPM (former ALBPM) 10g version. More information on this product can be found on http://www.oracle.com/technologies/bpm/index.html
When I had some free time I tried messing around with the different activities, gateways and events. This turns out to be incredibly easy and you can develop a complex workflow in a matter of minutes. However when it comes to testing the actual workflow you always end up with those pop-ups... the standard input/display presentation layouts. At the beginning I didn't really mind because I was overwhelmed by the shear power of the BPM application but after some time I started to look for better ways of representing the flows.
As I'm currently assigned on an APEX project I thought it might be a nice idea to have APEX render the user interface and let the workflow be represented by Oracle BPM. After doing some research there are three ways to communicate with the BPM engine (user interface wise).
None of these 3 features are supported natively by Oracle Application Express, thus rendering my idea useless. After looking at the PAPI features I stumbled on this little button.
Turns out the Process API is completely exposed as a webservice. Suddenly Oracle APEX is back on the table.
After starting the PAPI Webservice from the engine preferences, I copied the wsdl url into the create web service reference feature of APEX.
Unfortunately after running a minute or so it returned with the WSDL can't be parsed error.

At this point I thought I might as well put in a service bus (Oracle Service Bus) to act as a connection between APEX and BPM. This allows for some extra control over which functions are exposed to the user and gives me the freedom to create webservices that would otherwise require multiple calls.
The first webservice I extracted from the PAPI service.s was the processesGetInstancesByFilter operation. This should supply me with enough information to create a kind of inbox of the currently still open instances.
Now before creating the business service in OSB, make sure you selected the appropriate authentication settings in the BPM engine. When accessing the BPM Web Service Console, I selected HTTP Basic Authentication, since this is natively supported by APEX webservices.
After having the WSDL file its no problem creating the business service. However take into account that you'll be doing the webservice authentication from APEX to BPM. This means selecting BASIC as Authentication when creating the business service and creating a Service Account that has Pass Through as resource type
This is the only business service that is required to connect apex to bpm. From now on we'll only need proxy services. For the creation of the proxy service we'll need a WSDL file. This isn't a requirement, since we'll be using manual webservice creation later (in apex) but it first much better in the SOA story if we create one.
Since I'm basically rerouting the new webservice to the PAPI service I decided to use the same IN/OUT elements as the original operation. Thus reducing the time required to create the webservice.
Creating a proxy service from the wsdl file is a piece of cake. Just select the port or binding and of we go. No need to set the HTTP Transport settings since these are handled by APEX. I decided to go with processesGetInstancesByFilter in this post because it's different that the other service I created. It actually does something useful in the message flow.

The first assign takes the processID from the request and stores it to a local variable. The replace in the request action of the Route node is where we find a little difference.

Basically I'm replacing the entire body (not best practice I know) with a new xml structure. Where I've taken the local variable and added the searchScope. The response of this message gives me all the currently in process instances that the requested user has acces to.
Can you see the inbox growing ?
Now that we have the webservice exposed with OSB we can move to APEX.
One more remark though.. If you attempt to test the proxy webservice with the OSB console you'll receive a Participant not authentication response from BPM. This will probably be because there were no HTTP basic authentication headers supplied. For quick testing just set the Service account to static and enter a username/password. Now the webservice should work.
Next up. APEX.
After doing the normal administration tasks like creating workspace, application etc. go to shared components -> Web service references -> Create.
Since we won't be using a UDDI for this small setup, select no on the first question.
Now there are two options.
Well It turns out that the second option works much better with me. Using the WSDL doesn't always work and gives you less freedom in your SOAP request.
So select Create Web Service Reference Manually from the right side of the page.
Now that the webservice is created we can test to see whether it works. Edit the soap envelope, supply the username and password and by magic you'll receive a response.
Next comes the really easy part. Calling the webservice from a page process.
The easiest way would be to create a from/report from a webservice however... This doesn't work with manually created services... Oké we'll create a new blank page and add a page process. Create this process based on a web service. Select On Load as point moment to make you're life a little bit easier for now.
Select the appropriate web service reference and supply static authentication parameters. You can link this to page items, so there is always a possibility to link this to the login, but for now supply static parameters.
Create a page item that holds the same name as the parameter used in the SOAP envelope. For now just give it a static value.
Now when running the page the webservice will be called on load. If it works from the first time be happy. Otherwise check all the steps or drop a line in the comments. Now that we've managed to request data from the webserice... We need to interpret the response.
Create a new report based on a sql query. You can use a report from webservice but the created select doesn't work for me. It never supplies a query that works, always returning nothing.
Below I've added the query I used to generate a report. Adopt it to fit your own instance needs.
After the creation of the report you should end up with a page showing an inbox with all the open instances.
And thus the connection between APEX and BPM is completed.
Now you can do the same with the other services like, processCreateInstance, activityExecute and any other operation you might need.
You can let APEX create rows in tables and send the id's back to bpm or store everything in BPM and let the application store it in the database.
You're choose but keep in mind that APEX is meant to be used with a direct link to the database.
Now I can hear some you thinking, 'Won't the fact that we're using apex force us to develop our flow twice ? Once in BPM and again in APEX ?'
The answer to this question is NO. At least from my point of view. If you use Page aliases that are equivalent to activity or task names and just use the activity name as branch alias. Thus no need to start messing around with page numbers etc. And if you ever change the order of activities they will be automatically used in the apex application. And for new activities you just have to create a new page with the appropriate alias and the branching/urls do the rest.
When I was attempting this integration I found little to info on this subject. This leads me to believe there is either not need for this integration or no-one has tried it. But seeing the low complexity of this I can't see the second being true....
I hope you folks found this useful and if you have any suggestions/questions/remarks don't hesistate to let me know.
Beo.
When I had some free time I tried messing around with the different activities, gateways and events. This turns out to be incredibly easy and you can develop a complex workflow in a matter of minutes. However when it comes to testing the actual workflow you always end up with those pop-ups... the standard input/display presentation layouts. At the beginning I didn't really mind because I was overwhelmed by the shear power of the BPM application but after some time I started to look for better ways of representing the flows.
As I'm currently assigned on an APEX project I thought it might be a nice idea to have APEX render the user interface and let the workflow be represented by Oracle BPM. After doing some research there are three ways to communicate with the BPM engine (user interface wise).
- Standard presentation/workspace
- Custom JSF
- Process API
None of these 3 features are supported natively by Oracle Application Express, thus rendering my idea useless. After looking at the PAPI features I stumbled on this little button.
Turns out the Process API is completely exposed as a webservice. Suddenly Oracle APEX is back on the table.
After starting the PAPI Webservice from the engine preferences, I copied the wsdl url into the create web service reference feature of APEX.
Unfortunately after running a minute or so it returned with the WSDL can't be parsed error.
At this point I thought I might as well put in a service bus (Oracle Service Bus) to act as a connection between APEX and BPM. This allows for some extra control over which functions are exposed to the user and gives me the freedom to create webservices that would otherwise require multiple calls.
The first webservice I extracted from the PAPI service.s was the processesGetInstancesByFilter operation. This should supply me with enough information to create a kind of inbox of the currently still open instances.
Now before creating the business service in OSB, make sure you selected the appropriate authentication settings in the BPM engine. When accessing the BPM Web Service Console, I selected HTTP Basic Authentication, since this is natively supported by APEX webservices.
After having the WSDL file its no problem creating the business service. However take into account that you'll be doing the webservice authentication from APEX to BPM. This means selecting BASIC as Authentication when creating the business service and creating a Service Account that has Pass Through as resource type
This is the only business service that is required to connect apex to bpm. From now on we'll only need proxy services. For the creation of the proxy service we'll need a WSDL file. This isn't a requirement, since we'll be using manual webservice creation later (in apex) but it first much better in the SOA story if we create one.
Since I'm basically rerouting the new webservice to the PAPI service I decided to use the same IN/OUT elements as the original operation. Thus reducing the time required to create the webservice.
Creating a proxy service from the wsdl file is a piece of cake. Just select the port or binding and of we go. No need to set the HTTP Transport settings since these are handled by APEX. I decided to go with processesGetInstancesByFilter in this post because it's different that the other service I created. It actually does something useful in the message flow.
The first assign takes the processID from the request and stores it to a local variable. The replace in the request action of the Route node is where we find a little difference.
Basically I'm replacing the entire body (not best practice I know) with a new xml structure. Where I've taken the local variable and added the searchScope. The response of this message gives me all the currently in process instances that the requested user has acces to.
Can you see the inbox growing ?
Now that we have the webservice exposed with OSB we can move to APEX.
One more remark though.. If you attempt to test the proxy webservice with the OSB console you'll receive a Participant not authentication response from BPM. This will probably be because there were no HTTP basic authentication headers supplied. For quick testing just set the Service account to static and enter a username/password. Now the webservice should work.
Next up. APEX.
After doing the normal administration tasks like creating workspace, application etc. go to shared components -> Web service references -> Create.
Since we won't be using a UDDI for this small setup, select no on the first question.
Now there are two options.
- Create webservice reference by using the wsdl
- Create web service reference manually
Well It turns out that the second option works much better with me. Using the WSDL doesn't always work and gives you less freedom in your SOAP request.
So select Create Web Service Reference Manually from the right side of the page.
- Name : duh . I went for processesGetInstancesByFilter.
- Url : pretty straight forward and it needs the enpoint uri. Should be something like http://<hostname>:<port>/<endpoint-uri>
- Action : you can write anything in this field. But this is placed in the soap action header.
- Proxy : in case you use a proxy service to access your OSB
- Basic authentication : select yes, since we'll be using this to authenticate with BPM
- SOAP Envelope : This is the most important field of all. Here we put the xml message that is send to the webservice. To make the xml dynamic use page items between # characters. When the webservice is called the current value will be placed there.
- SOA Response : All response are stored in apex_collections. Supply the name of this collection. This collection doesn't need to exist it is created automatically when the web service is called.
Now that the webservice is created we can test to see whether it works. Edit the soap envelope, supply the username and password and by magic you'll receive a response.
Next comes the really easy part. Calling the webservice from a page process.
The easiest way would be to create a from/report from a webservice however... This doesn't work with manually created services... Oké we'll create a new blank page and add a page process. Create this process based on a web service. Select On Load as point moment to make you're life a little bit easier for now.
Select the appropriate web service reference and supply static authentication parameters. You can link this to page items, so there is always a possibility to link this to the login, but for now supply static parameters.
Create a page item that holds the same name as the parameter used in the SOAP envelope. For now just give it a static value.
Note: the process id looks like this /<processName>#<Variation>-<version> or in my case /ExpenseReporting#Default-1.0
You can check this with the processesGetIds operation using e.g. SOAPUI.
Now when running the page the webservice will be called on load. If it works from the first time be happy. Otherwise check all the steps or drop a line in the comments. Now that we've managed to request data from the webserice... We need to interpret the response.
Create a new report based on a sql query. You can use a report from webservice but the created select doesn't work for me. It never supplies a query that works, always returning nothing.
Below I've added the query I used to generate a report. Adopt it to fit your own instance needs.
select extractValue(value(b),'/instances/activityName') as activity,
extractValue(value(b),'/instances/author') as creator,
extractValue(value(b),'/instances/creationTime') as creationTime,
extractValue(value(b),'/instances/description') as description,
extractValue(value(b),'/instances/priority') as priority,
extractValue(value(b),'/instances/state') as state,
replace(extractValue(value(b),'/instances/id'),'#','%23') as instanceID
from wwv_flow_collections c,
table(xmlsequence(extract(xmltype(c.clob001), '//instances/instances'))) b
where c.collection_name = 'FILTER_BY_INSTANCE'
After the creation of the report you should end up with a page showing an inbox with all the open instances.
And thus the connection between APEX and BPM is completed.
Now you can do the same with the other services like, processCreateInstance, activityExecute and any other operation you might need.
You can let APEX create rows in tables and send the id's back to bpm or store everything in BPM and let the application store it in the database.
You're choose but keep in mind that APEX is meant to be used with a direct link to the database.
Now I can hear some you thinking, 'Won't the fact that we're using apex force us to develop our flow twice ? Once in BPM and again in APEX ?'
The answer to this question is NO. At least from my point of view. If you use Page aliases that are equivalent to activity or task names and just use the activity name as branch alias. Thus no need to start messing around with page numbers etc. And if you ever change the order of activities they will be automatically used in the apex application. And for new activities you just have to create a new page with the appropriate alias and the branching/urls do the rest.
When I was attempting this integration I found little to info on this subject. This leads me to believe there is either not need for this integration or no-one has tried it. But seeing the low complexity of this I can't see the second being true....
I hope you folks found this useful and if you have any suggestions/questions/remarks don't hesistate to let me know.
Beo.
Labels:
APEX,
BPM,
Oracle,
osb,
SOA,
Technology,
webservice,
wsdl
Sunday, 1 February 2009
Installing Oracle XE on Ubuntu 8.10 - x86_64
Today my goal was to install Oracle XE on my Laptop. For those who don't know, Oracle XE is the free version of the Oracle 10g database, with some limitations.
This should be pretty straight forward since the installer comes in debian packaging format and the site even says it's supported on Ubuntu. Oh but did I mention I'm running the amd64 version of Ubuntu. This is how I managed to successfully install Oracle XE
First download the Oracle XE debian package from the official site (the x86 version)
Whether you need the universal or the western-europe version depends on the applications you intend to run.
While this file is downloading you can start looking for the libaio 32bit library which is required to install the database.
Download the appropriate deb file
After downloading both the library and the database file you can continue to install them with the debian package manager
The --force-architecture argument should prevent the package manager from exiting with the incompatible architecture error.
When the installation is complete you'll have to run the /etc/init.d/oraclexe configure script. When you aren't sure what you are doing it's best to leave everything to it's default setting. Meaning http port 8080 and database listener port 1521.
Once the script has been executing the Oracle XE database will be up and running and you can surf to http://localhost:8080/ to see if it's working.
Now the installation of the database is complete you can start developing your own application. But before doing this you should take a look at Oracle Application Express, which is pre-installed with the Oracle XE database. Go to http://localhost:8080/apex/ and log in using system and the password you supplied during the configuration script. For more information about this product point your browser to http://apex.oracle.com/
Note: Before you start developing using apex, upgrade to the latest version (3.1.2). Oracle XE comes with version 2.x and there are many new features available in the lastest version. Read the How to upgrade at the bottom of this page http://www.oracle.com/technology/products/database/application_express/html/3.1_and_xe.html
Any question ask away in the comments.
This should be pretty straight forward since the installer comes in debian packaging format and the site even says it's supported on Ubuntu. Oh but did I mention I'm running the amd64 version of Ubuntu. This is how I managed to successfully install Oracle XE
First download the Oracle XE debian package from the official site (the x86 version)
http://www.oracle.com/technology/software/products/database/xe/index.html
Whether you need the universal or the western-europe version depends on the applications you intend to run.
While this file is downloading you can start looking for the libaio 32bit library which is required to install the database.
Download the appropriate deb file
wget -c http://oss.oracle.com/debian/dists/unstable/main/binary-i386/libaio_0.3.104-1_i386.deb
After downloading both the library and the database file you can continue to install them with the debian package manager
sudo dpkg -i --force-architecture libaio_0.3.104-1_i386.deb
sudo dpkg -i --force-architecture oracle-xe-universal_10.2.0.1-1.1_i386.deb
The --force-architecture argument should prevent the package manager from exiting with the incompatible architecture error.
When the installation is complete you'll have to run the /etc/init.d/oraclexe configure script. When you aren't sure what you are doing it's best to leave everything to it's default setting. Meaning http port 8080 and database listener port 1521.
Once the script has been executing the Oracle XE database will be up and running and you can surf to http://localhost:8080/ to see if it's working.
Now the installation of the database is complete you can start developing your own application. But before doing this you should take a look at Oracle Application Express, which is pre-installed with the Oracle XE database. Go to http://localhost:8080/apex/ and log in using system and the password you supplied during the configuration script. For more information about this product point your browser to http://apex.oracle.com/
Note: Before you start developing using apex, upgrade to the latest version (3.1.2). Oracle XE comes with version 2.x and there are many new features available in the lastest version. Read the How to upgrade at the bottom of this page http://www.oracle.com/technology/products/database/application_express/html/3.1_and_xe.html
Any question ask away in the comments.
Subscribe to:
Posts (Atom)