Oracle was already using the java programming language intensive in its products however it is getting in full swing in the last couple of years. After they have acquired BEA and have used it to build the weblogic application server and after they acquired Sun you see that java is becoming the main application language for Oracle.
We have seen recently some legal battles between Google and Oracle about parts of Java and this is showing that Oracle is willing to go into battle mode for Java. However this is not meaning that they want to make java as proprietary as possible. One of the latest cases showing this is the release of ADF Essentials. ADF is the Oracle Application Development framework which is a proprietary development framework build by Oracle to support the development community and which is also used heavily by Oracle development teams internally for product development. One of the things about ADF is that you need theOracle weblogic server to run it (officially). This automatically rules out that ADF can be used to create open source products and it is limiting the adoption of ADF as you have a vendor lock with Oracle with the application server.
Now Oracle has launched ADF Essentials which is able to run not only on weblogic, it can also run on for example GlassFish or other application servers like for example IBM WebSphere. ADF Essentials can be used for free and you no longer have a vendor lock on the application server. ADF Essentials is a stripped down version of the commercial ADF version.
ADF Essentials is important for Oracle as they hope to boost the adoption of ADF with it, not only the Essentials version but also the commercial version. The commercial vision of Oracle behind Essentials is (most likely) that it will make that ADF will get more popular and that more developers will start developing in a ADF way and by doing so not only make the product base bigger for ADF Essentials, it should also make the adoption of the commercial version of ADF bigger and by doing so boost up the license revenue coming from the sales of WebLogic licenses.
If you are a company who will be building applications based upon Oracle ADF Essentials it is good to take some note of the ADF Essentials license policy. If we take a look at the ADF essentials license policy we note the following;
You are bound by the Oracle Technology Network ("OTN") License Agreement terms. The OTN License Agreement terms also apply to all updates you receive under your Technology Track subscription.
this means you will have to review the OTN License Agreement in debt to be sure what you can and cannot do with ADF Essentials from a legal point of view. Most important to know is the following: Oracle ADF Essentials is a free to develop and deploy packaging of the key core technologies of Oracle ADF.
The personal view on the IT world of Johan Louwers, specially focusing on Oracle technology, Linux and UNIX technology, programming languages and all kinds of nice and cool things happening in the IT world.
Showing posts with label java. Show all posts
Showing posts with label java. Show all posts
Tuesday, October 30, 2012
Sunday, October 21, 2012
Use Oracle SOA for mobile
We have seen a trend where more and more people start using mobile applications, people start to use there phones and tablets more and more and not only for social things but for all kinds of actions. As the mobile trend is well on its way and is still picking up speed we now see that the same trend is on its way in the enterprise market. Mail on your phone is already common. Large numbers of employees do get their business mail on their phone and use it to interact while not in the office. The next step is that companies are making applications mobile so they are available to employees 24 hours a day 7 days a week on any device.
Issue is however that enterprise applications are commonly complex and often consist out of a multitude of applications and servers. Building a simple mobile application is not that easy and you have to pull information and interact with multiple applications when you are building a single application that can be used in a mobile way. Secondly, enterprise applications are commonly not equipped to be made mobile and are often "old".
Oracle is providing a couple of things that can make your life a lot easier as an architect and as a developer. If you are developing a platform and application that is intended to make enterprise applications (legacy applications) available on a mobile device you do want to look at the Oracle SOA suite and you do want to look at Oracle ADF.
Oracle SOA Suite;
The Oracle SOA suite can help you to design and build a way to interact with a multitude of backoffice systems and tie this into a single point of interaction for your mobile application platform. For example, if you need information from two different systems pulled into your mobile application, do an interaction on this data and ship it to a number of other systems it is not making sense to build all those interactions and connections into your mobile application. It would make more sense to create a communication and interaction model in your mobile application server and use the Oracle SOA suite to take care of all the interactions for you.
This will help you simplify the interaction between your mobile application and the server used to connect your mobile application to and all the possible backoffice systems you need to interact with.
Oracle ADF;
Oracle ADF (Oracle Application Development Framework) is a framework developed by Oracle to develop Java applications. If you are about to develop mobile applications and the needed background services in combination with SOA this is one of the things you do want to look into. Oracle is providing a lot of functions out of the box to interact with the Oracle SOA components as well as building mobile applications for multiple devices.
The below video is showing a quick guide into developing mobile applications with the help of Oracle ADF.
Issue is however that enterprise applications are commonly complex and often consist out of a multitude of applications and servers. Building a simple mobile application is not that easy and you have to pull information and interact with multiple applications when you are building a single application that can be used in a mobile way. Secondly, enterprise applications are commonly not equipped to be made mobile and are often "old".
Oracle is providing a couple of things that can make your life a lot easier as an architect and as a developer. If you are developing a platform and application that is intended to make enterprise applications (legacy applications) available on a mobile device you do want to look at the Oracle SOA suite and you do want to look at Oracle ADF.
Oracle SOA Suite;
The Oracle SOA suite can help you to design and build a way to interact with a multitude of backoffice systems and tie this into a single point of interaction for your mobile application platform. For example, if you need information from two different systems pulled into your mobile application, do an interaction on this data and ship it to a number of other systems it is not making sense to build all those interactions and connections into your mobile application. It would make more sense to create a communication and interaction model in your mobile application server and use the Oracle SOA suite to take care of all the interactions for you.
This will help you simplify the interaction between your mobile application and the server used to connect your mobile application to and all the possible backoffice systems you need to interact with.
Oracle ADF;
Oracle ADF (Oracle Application Development Framework) is a framework developed by Oracle to develop Java applications. If you are about to develop mobile applications and the needed background services in combination with SOA this is one of the things you do want to look into. Oracle is providing a lot of functions out of the box to interact with the Oracle SOA components as well as building mobile applications for multiple devices.
The below video is showing a quick guide into developing mobile applications with the help of Oracle ADF.
Tuesday, February 07, 2012
Oracle Fusion customization platform
Sara Woodhull and Gustavo Jimenez recently gave a talk on how to do changes to Oracle E-Business Suite in a correct way. The talk was part of the ATG Live Webcast series which shows you how to make changes to a GUI that makes sense without the need to do much coding. When coding is needed examples will be used in the form of forms personalization and OA Framework Personalization’s
This presentation is also a great way to have a look into how the technology components of Oracle Fusion are used in Oracle e-Business suite and how they can help you and how you can build upon them to create customizations and custom solutions for customers with Oracle e-Business suite.
You can review the webcast at the oracle website and you can see the slides used below.
Personalize, Customize, and Extend Oracle E-Business Suite User Interface
This presentation is also a great way to have a look into how the technology components of Oracle Fusion are used in Oracle e-Business suite and how they can help you and how you can build upon them to create customizations and custom solutions for customers with Oracle e-Business suite.
You can review the webcast at the oracle website and you can see the slides used below.
Personalize, Customize, and Extend Oracle E-Business Suite User Interface
Monday, May 30, 2011
Render XML into DIV using AJAX and XSL
while trying and playing with some div layers in html and handling XML XSL translations I found out that when you load a XML file containing a link to a XSL file to transform it to HTML in the browser it works fine. However if you juts load it via a standard javascript in a div layer this is not working. you can use javascript to load (pure) html in a DIV a display it within your page, if you load XML it will however not being rendered as one should expect.
For this you will need a small java script. I build the below example. This example is showing how you can load dynamically a XML file in combination with a XSL file, have it transformed into HTML and display it in a DIV element in your page. The nice thing about this approach is that you only have to create your XML file and have the rendering done on your clients workstation. If you update the content of the XML your page will automatically contain new information the next time a user requests the page. A second benefit is that if you want to change the layout of your page you have to only update you XSL style sheet. The example I provide below is quite simple where I use AJAX in combination with XML and XSL to dynamically rendered HTML content of a CD catalog on a page when clicked on a link. The example is not really useful as a page/application however it is showing how you can use the script.
The example contains 2 XML files, 1 XSL file and a HTML file. If you place them all in the same location and open test.html you will see how it is working.
test.html
cdcatalog.xml
cdcatalog2.xml
cdcatalog.xsl
For this you will need a small java script. I build the below example. This example is showing how you can load dynamically a XML file in combination with a XSL file, have it transformed into HTML and display it in a DIV element in your page. The nice thing about this approach is that you only have to create your XML file and have the rendering done on your clients workstation. If you update the content of the XML your page will automatically contain new information the next time a user requests the page. A second benefit is that if you want to change the layout of your page you have to only update you XSL style sheet. The example I provide below is quite simple where I use AJAX in combination with XML and XSL to dynamically rendered HTML content of a CD catalog on a page when clicked on a link. The example is not really useful as a page/application however it is showing how you can use the script.
The example contains 2 XML files, 1 XSL file and a HTML file. If you place them all in the same location and open test.html you will see how it is working.
test.html
<html>
<head>
<script>
function loadXMLDoc(dname) {
if (window.XMLHttpRequest) {
xhttp = new XMLHttpRequest();
} else {
xhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.open("GET", dname, false);
xhttp.send("");
return xhttp.responseXML;
}
function displayResult(source,styledoc) {
xml = loadXMLDoc(source);
xsl = loadXMLDoc(styledoc);
//set a   to make prevent FF to append the text by double click
document.getElementById("mydiv").innerHTML = " ";
// code for IE
if (window.ActiveXObject) {
ex = xml.transformNode(xsl);
document.getElementById("mydiv").innerHTML = ex;
}
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument) {
xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
resultDocument = xsltProcessor.transformToFragment(xml, document);
document.getElementById("mydiv").appendChild(resultDocument);
}
}
</script>
</head>
<body>
<a onclick="displayResult('cdcatalog.xml','cdcatalog.xsl')" href="javascript:void(0);">catalog 1</a>
<a onclick="displayResult('cdcatalog2.xml','cdcatalog.xsl')" href="javascript:void(0);">catalog 2</a>
<div id="mydiv">
</div>
</body>
</html>
cdcatalog.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Di.</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
</catalog>
cdcatalog2.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
<cd>
<title>Some title </title>
<artist>Some artist</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
<cd>
<title>Some othertitle </title>
<artist>The artist</artist>
<country>USA</country>
<company>Columbia</company>
<price>11.40</price>
<year>1985</year>
</cd>
</catalog>
cdcatalog.xsl
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th align="left">Title</th>
<th align="left">Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title" /></td>
<td><xsl:value-of select="artist" /></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Wednesday, May 25, 2011
Solved: android tab layout example
When you are starting with Android development you will most likely start with looking at some of the examples provided by Google. Within the Google development guide you will find some examples. I have already touched the "hello world" example in a previous blogpost where I was discussing the boot speed of the Android Emulator. After you have completed the "hello world" example you most likely would like to pickup some of your development work. A good example you can follow to get some understanding of building a Android layout is the "Tab Layout" example.I have been completing the "Tab Layout" example and ran into some error's and found that more people are having difficulty completing the "Tab Layout" example. Reason for this is that the google example is a example and not a step by step guide on how to program for Android. As I found some well discussed issues with this example I found that a lot of people have difficulties with this example.
To help those people you can find the source of the example I build. The main issue I personally encountered in this example is the content of the androidmanifest.xml file. I hope this post will give you some more insight in how to develop a tab layout and will help you understand how to work with the example given by Google.
AlbumsActivity.java
package com.terminalCult.helloTab;
//import some stuff we need to get the example code running
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
// starting the class
public class AlbumsActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView textview = new TextView(this);
//show some text to state which tab this is
textview.setText("This is the albums tab");
setContentView(textview);
}
}
ArtistsActivity.java
package com.terminalCult.helloTab;
//import some stuff we need to get the example code running
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
// starting the class
public class ArtistsActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView textview = new TextView(this);
//show some text to state which tab this is
textview.setText("This is the Artists tab");
setContentView(textview);
}
}
SongsActivity.java
package com.terminalCult.helloTab;
//import some stuff we need to get the example code running
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
// starting the class
public class SongsActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView textview = new TextView(this);
//show some text to state which tab this is
textview.setText("This is the songs tab");
setContentView(textview);
}
}
helloTab.java
package com.terminalCult.helloTab;
import android.os.Bundle;
import android.app.TabActivity;
import android.content.*;
import android.content.res.*;
import android.widget.*;
public class helloTab extends TabActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Resources res = getResources(); // Resource object to get Drawables
TabHost tabHost = getTabHost(); // The activity TabHost
TabHost.TabSpec spec; // Resusable TabSpec for each tab
Intent intent; // Reusable Intent for each tab
// Create an Intent to launch an Activity for the tab (to be reused)
intent = new Intent().setClass(this, ArtistsActivity.class);
// Initialize a TabSpec for each tab and add it to the TabHost
spec = tabHost.newTabSpec("artists").setIndicator("Artists",
res.getDrawable(R.drawable.ic_tab_artists))
.setContent(intent);
tabHost.addTab(spec);
// Do the same for the other tabs
intent = new Intent().setClass(this, AlbumsActivity.class);
spec = tabHost.newTabSpec("albums").setIndicator("Albums",
res.getDrawable(R.drawable.ic_tab_albums))
.setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, SongsActivity.class);
spec = tabHost.newTabSpec("songs").setIndicator("Songs",
res.getDrawable(R.drawable.ic_tab_songs))
.setContent(intent);
tabHost.addTab(spec);
tabHost.setCurrentTab(2);
}
}
ic_tab_albums.xml
ic_tab_artists.xml
ic_tab_songs.xml
main.xml
AndroidManifest.xml
Saturday, April 09, 2011
oracle.ideimpl.webupdate.task.TaskFailedException
I recently tried to update my Oracle Jdeveloper installation with some updates coming from Oracle. You can update your Jdeveloper installation by clicking "help" - "Check for Updates". I needed to install some updates including the "AIA composite application framework version 2.4" update. When selecting it a process is started and after that you are requested to restart your Jdeveloper installation. This should complete the process and you should be able to use the new version. However due to some reason the new functionality was not installed. When checking for updates again I also found the "AIA composite application framework version 2.4" update still in the list of updates to be installed.After some time I found that if I started Jdeveloper from the command line I could see a error messages stating the following: "oracle.ideimpl.webupdate.task.TaskFailedException: Unable to read /Users/suntac/.jdeveloper/tmp/update/oracle.aia.caf.jdevextension.2.4.zip". When jdeveloper downloads updates it is storing it under a tmp/update folder as a .zip file. Upon looking into this location I found that the file was empty.
Thanks to William from the Oracle jDeveloper support team I was able to download the file myself by hand. You can check manually all the updates at the "Oracle Extensions for Oracle JDeveloper Update Center" which is located at http://www.oracle.com/ocom/groups/public/@otn/documents/webcontent/131167.xml . Now when you download the file you can again start the "check for updates" option under the help menu however no pick the option to select from a local file.
At this screen you can select the location of the zip file you just downloaded. You will again be asked to restart jdeveloper and now you will notice that the file is installed without any issue.Friday, July 23, 2010
Oracle forms not starting with JRE and IE8

Most likely a hot debated topic at the sites of many Oracle EBS customers is the question if they would like to stay on Oracle jInitiator or to make the switch to the JRE approach.
Oracle E-Business Suite makes use of Oracle forms which is a Java application for witch you have to load some .jar files onto your local browser who will take the client software role. Oracle always used jInitiator for this which used to do this task. Recently Oracle made a switch to a new approach and started to advocate the use of Sun Java Runtime Environment or JRE for short.
This also makes it possible to start your forms part of Oracle E-Business suite from Internet Explorer 8 for example and other browsers like FireFox. This was possible in the past however would take some hacking from the users who wanted this to happen. As most customers are upgrading their workstations and browsers to a newer versions it is feasible to go for the JRE option.
The following things need to happen:
(A) You have to apply patches on your server and make it ready for JRE.
In this case you should review metalink note 290807.1 which informs you about all the steps needed to take to make this happen on the server side.
(B) you have to make sure the correct version of JRE is installed on (or gets installed) on your clients.
Due to some bugs it is very important to look for which version is the best at the moment you start this project. My best advice would be to keep an eye on the weblog of Steven Chan for this subject and start a service request at metalink before you make a decision.
Even if you have taken all the steps to make sure all should work fine you can run into problems with some clients which for some reason will refuse to start a new forms session. I recently had this issue at a client and it later turned out to be a networking/firewall/proxy issue. The best way to start debugging in those cases is the logging in JRE which is not very known to many people.
Open the Java Control Panel and go to the advanced tab. Here can activate tracing and logging. When you have activated those try to start a forms session again and review the log and trace file.The resulting files can be found at "
\Sun\Java\Deployment\log " and do contain a lot of useful information for you debugging. I would like to advise to always do a trace/log first on the client in cases you have problems on a client starting the forms session with JRE instead of Oracle jInitiator.Sunday, April 25, 2010
Oracle EBS Applications Manager log
I recently came across some strange things on a new Oracle e-Business suite environment release 11.5.10.2 which was just installed as a clone from production on a new server. The issue was that if you wanted to look into the ICM files to check the status of an internal concurrent manager you would be presented a non descriptive error. The error stated “An error has occurred!” and no log would appear in the screen.
If you open the log via a forms session you would be presented with the correct log.
The issue is definitely related to the HTML screens only, so I decided to do a trace of it when the error appears so we would be able to get some more meaning besides the error message “An error has occurred!”. In Oracle Application Manager you can set the log level to dev. Via “Site Map”> “Applications Manager Log”. Here you can set the log level to dev.

After setting the log level to dev I reproduced the error and found the following stack:
[Thread-1046][10:11:44:986, 4/22/10] IN: getFileContentsForURL [Thread-1046][10:11:44:986, 4/22/10] urlStr=http://INTERNAL.SERVERNAME.COM:11415/OA_CGI/FNDWRR.exe?temp_id=2080498240 [Thread-1046][10:11:44:986, 4/22/10] in getTmpDir(), dir:/opt/oracle/oont/apps/D301O/ora/iAS/Apache/Jserv/logs/iAS/Apache/Jserv/logs/oam/tmp [Thread-1046][10:11:44:986, 4/22/10] LogHandler:BEGIN=22 Apr 2010 08:11:44 GMT [Thread-1046][10:11:44:986, 4/22/10] urlStr=http://INTERNAL.SERVERNAME.COM:11415/OA_CGI/FNDWRR.exe?temp_id=2080498240 [Thread-1046][10:11:44:992, 4/22/10] java.net.UnknownHostException: INTERNAL.SERVERNAME.COM at java.net.InetAddress.getAllByName0(InetAddress.java:1133) at java.net.InetAddress.getAllByName0(InetAddress.java:1098) at java.net.InetAddress.getAllByName(InetAddress.java:1061) at HTTPClient.HTTPConnection.getSocket(HTTPConnection.java:1907) at HTTPClient.HTTPConnection.sendRequest(HTTPConnection.java:2922) at HTTPClient.HTTPConnection.handleRequest(HTTPConnection.java:2150) at HTTPClient.HTTPConnection.setupRequest(HTTPConnection.java:3561) at HTTPClient.HTTPConnection.ExtensionMethod(HTTPConnection.java:1570) at HTTPClient.HttpURLConnection.connect(HttpURLConnection.java:252) at HTTPClient.HttpURLConnection.getInputStream(HttpURLConnection.java:481) at oracle.apps.fnd.oam.sdk.util.log.LogHandler.getFileContentsForURL(LogHandler.java:388) at oracle.apps.fnd.oam.sdk.util.log.LogHandler.getFileContents(LogHandler.java:628) at oracle.apps.fnd.oam.sdk.util.log.LogHandler.refreshLogFile(LogHandler.java:936) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at oracle.cabo.servlet.event.MethodEventHandler.handleEvent(Unknown Source) at oracle.cabo.servlet.event.TableEventHandler.handleEvent(Unknown Source) at oracle.cabo.servlet.event.TableEventHandler.handleEvent(Unknown Source) at oracle.cabo.servlet.event.BasePageFlowEngine.handleRequest(Unknown Source) at oracle.apps.fnd.oam.servlet.ui.oamPageFlowEngine.handleRequest(oamPageFlowEngine.java:791) at oracle.cabo.servlet.AbstractPageBroker.handleRequest(Unknown Source) at oracle.cabo.servlet.ui.BaseUIPageBroker.handleRequest(Unknown Source) at oracle.cabo.servlet.PageBrokerHandler.handleRequest(Unknown Source) at oracle.apps.fnd.oam.servlet.ui.OAMServlet.doGet(OAMServlet.java:224) at javax.servlet.http.HttpServlet.service(HttpServlet.java:499) at javax.servlet.http.HttpServlet.service(HttpServlet.java:588) at org.apache.jserv.JServConnection.processRequest(JServConnection.java:456) at org.apache.jserv.JServConnection.run(JServConnection.java:294) at java.lang.Thread.run(Thread.java:595)
What we notice here is a URL named http://INTERNAL.SERVERNAME.COM:11415/OA_CGI/FNDWRR.exe?temp_id=2080498240 and this happens to be the URL that will open if you try to get the page via a forms session. So what basicly happens is that java is trying to parse a URL into a document and for some reason the java code is unable to resolve the domain name where your browser is able to.
In our case it turned out that the resolution was to add the hostname/domainname to /etc/hosts and the issue was resolved.
Monday, May 25, 2009
Oracle EBS R12 Error: Stale Data
When navigating within the HTML screens of Oracle E-Business Suite Release 12 you can come across the below error message about Stale Data. The message is really clear however I do get some questions about it every now and then. The problem is most likely that you have been using the back (or forward) button of your browser. The way the HTML code (Actually the JSP code) is setup is making it so that it can not handle this in some cases. You can try to get out of this by clicking more back and forward buttons however this will not make the page work as before. Best things to do is just close the page and return back to it from you forms session. If you are not coming from a forms sessions the best way is logout and login again to the system. This is until Oracle will solve this " Bug"Error: Stale Data
The requested page contains stale data. This error could have been caused through the use of the browser's navigation buttons (the browser Back button, for example).
To proceed, please select the Close Window link at the top of the application page to return
Sunday, December 28, 2008
Install Apache Tomcat on Ubuntu
Tomcat, an Open Source JSP and Servlet Container developed by the guys from the Apache software foundation. I have abandoned Tomcat for years because I was not working on projects which required a java container of it self. Working with Oracle Application server is giving you enough, however, now I am starting to code some projects which requiers a java container of itself so it was a small step to get back to my old love I have been working with for several years.Because I will be using Tomcat at this moment still mainly for testing and coding while commuting from home to work and back I decided to install it on my virtual Ubuntu installation on my MacBook. I found out that installing Tomcat on Ubuntu is quite easy. I found a quick howto at howtogeek.com from which I followed most of the steps. Here is my fork of this howto.
1) Check your current java version.
As Tomcat is running Java code and is depending on Java you will have to have Java running on your system. Check your currently installed Java versions with the following command:
dpkg -l | grep sun
This should give you at least the following packages installed; sun-java6-bin, sun-java6-jdk and sun-java6-jre. If not you have to install Java on Ubuntu with the following command: sudo apt-get install sun-java6-jdk
Now when you check it again you should see the packages installed.
2) Install Tomcat
Installing tomcat can be done by downloading it from the tomcat website, currently this can be done from the following location: http://tomcat.apache.org/download-60.cgi
When you have downloaded Tomcat you have to unpack it and move it to /usr/local so that tomcat will be in /usr/local/tomcat/
3) Setting JAVA_HOME
One of the requirements of Tomcat is that the variable TOMCAT_HOME is set on your system and that it points to the java version you just installed. You can check this by executing env | grep JAVA_HOME which should (or should not) give you JAVA_HOME and the value of this variable. If this is not the case or the value is not pointing to the correct java version you have to change this. Lets say JAVA_HOME is not set, you have to edit .bashrc in your home directory so enter vi ~/.bashrc at the end of the file add the following: export JAVA_HOME=/usr/lib/jvm/java-6-sun
4)Startup script Tomcat
Now we would like to have tomcat to startup when you start your machine and shutdown correctly when you shutdown the machine. Create a file in /etc/init.d named tomcat and enter the following information:
# Tomcat auto-start
#
# description: Auto-starts tomcat
# processname: tomcat
# pidfile: /var/run/tomcat.pid
export JAVA_HOME=/usr/lib/jvm/java-6-sun
case $1 in
start)
sh /usr/local/tomcat/bin/startup.sh
;;
stop)
sh /usr/local/tomcat/bin/shutdown.sh
;;
restart)
sh /usr/local/tomcat/bin/shutdown.sh
sh /usr/local/tomcat/bin/startup.sh
;;
esac
exit 0
Now we have to make this script executable sudo chmod 755 /etc/init.d/tomcat . Now the script is executable we can do a tomcat start to start it, tomcat stop to make it stop and a tomcat restart to stop and start it again. However we would like to have it start and stop automatically. For this we create a start and stop link by executing the following two commands:
sudo ln -s /etc/init.d/tomcat /etc/rc1.d/K99tomcat
sudo ln -s /etc/init.d/tomcat /etc/rc2.d/S99tomcat
Now when you open http://localhost:8080 you will see the start page of tomcat in your browser. All set and ready to go.
Saturday, September 06, 2008
Install Java j2re 1.4.2_04 on Ubuntu
Some applications we are currently running forced me to have J2RE (Java Runtime Environment) version 1.4.2._04 installed under Ubuntu.You can still download old versions of Java from the Sun Microsystems website, you only have to go to the archive section to be able to do so. So I downloaded the file j2re-1_4_2_04-linux-i586.bin to install the runtime environment on my laptop. However then I ended up in having some problems.
I did the following steps:
(1)wget the file from the sun site.
(2)Made sure that it was executable by executing chmod +x ~/Desktop/j2re-1_4_2_04-linux-i586.bin
(3)and started the installation with ./j2re-1_4_2_04-linux-i586.bin
First you will get a long Binary Code License Agreement which you have to 'read' and finally approve, however after that I got the following error:
Do you agree to the above license terms? [yes or no]
yes
Unpacking...
tail: cannot open `+417' for reading: No such file or directory
Checksumming...
1
The download file appears to be corrupted. Please refer
to the Troubleshooting section of the Installation
Instructions on the download page for more information.
Please do not attempt to install this archive file.
jlouwers@NL-jlouwers:~/Desktop$
Which stated an error by executing the tail command. This version of Java is a somewhat older version and has a command in the installer which is no longer valid with newer release of the tail command. The tail command is used in the installation script, which is on the top of the bin file, to do a checksum to make sure that the archive you are installing is valid. This to prevent that you install a archive that has been corrupted during downloading or is tampered with before you downloaded it. Now if you are sure that the packet is valid, and you can be quite sure of that when you download it from the sun download website you can solve this problem by editing the installation script inside the .bin file.
You can edit it by using vi. When you open the file in vi you will find the problematic tail command on line 276 stating “tail +417 $0 > $outname”. After this line you enter a if, else fi statement. To solve the problem edit line 276 and comment out line 277 until line 302. So your installation script should look like the following:
tail -n +417 $0 > $outname
#if [ -x /usr/bin/sum ] ; then
# echo "Checksumming..."
#
# sum=`/usr/bin/sum $outname`
# index=1
# for s in $sum
# do
# case $index in
# 1) sum1=$s;
# index=2;
# ;;
# 2) sum2=$s;
# index=3;
# ;;
# esac
# done
# if expr $sum1 != 13852 || expr $sum2 != 13822 ; then
# echo "The download file appears to be corrupted. Please refer"
# echo "to the Troubleshooting section of the Installation"
# echo "Instructions on the download page for more information."
# echo "Please do not attempt to install this archive file."
# exit 1
# fi
#else
# echo "Can't find /usr/bin/sum to do checksum. Continuing anyway."
#fi
“tail -n +417 $0 > $outname” is a valid statement which can be used with the current releases of the tail command and the checksum part is 'removed' from the installation script. If you now execute the installation all should be fine. This is how you can install the Java Runtime Environment on the latest release of Ubuntu. Even do you have to do some things, installing Java on Debian like systems has improved a lot, you can check an older post from some time ago where you can see that installing Java on Debian for example was quite a bit harder. For a complete guide on how to install it, without the code fix part, can be found on this website. This however will not succeed without the code fix when you have a newer version of tail.
Wednesday, August 13, 2008
Oracle JDeveloper 11g Build 4949

A new download for Oracle jDeveloper is available from the Oracle website. On the change document the following new features are listed:
- JDeveloper Core IDE
- Java Coding and Agile Development
- Database Development
- Deployment
- UML Development
- Web Services Development
- Web / Ajax Development
- EJB 3.0 Development
- Oracle TopLink Development
- ADF Framework
- ADF Faces Rich Client
- ADF Databinding
- ADF Business Components
- ADF Task Flow
- ADF Swing
- ADF Data Visualization
- ADF Mobile
- WebCenter Development
- SOA Suite: SCA composite applications development
A nice new feature is the AJAX support now available in Oracle jDeveloper. To check the more detailed change log check the changes page at oracle.com
Tuesday, May 13, 2008
jDeveloper 11G Technology Preview 4

Now available for downloading from the Oracle website is Oracle jDeveloper 11G Technology Preview 4 (Build 4949). jDeveloper is already the leading development environment for many oracle developers for years. I used it to make my first corporate Java developments years ago when I made the switch from VI to a "real" java editor. There is a moment that things become too complex to manage it in VI.
When jDeveloper was launched a couple of years ago it was a non-free product however Oracle allowed developers to download it and use it… in a we are not looking at you when you use it and do not pay kind of way. Sometime after that it became a complete free to use editor officially and I think this is a great way.
jDeveloper is named by some market thought leaders as the number one editor and I have to agree with them… jDeveloper is one of the best and leading development environments there is.
Sunday, March 23, 2008
Oracle SOA Invoice processing
Oracle released a new whitepaper where they discuss the development of a SOA Invoice Processing in a Service-Oriented Environment. The “whitepaper” is a step by step guide on how to develop the code and all the surroundings needed for the environment to work correctly. This is a great introduction to the SOA technology stack and the Oracle Enterprise Service Bus. Development is done in java with Oracle jDeveloper.Sunday, March 16, 2008
More Google YouTube API
More information on the YouTube API set released by Google/YouTube. You can now find here a short video of some example tutorials on how to use the API to build some own custom applications. Also on other places on the web you can find some good resources on how to use the YouTube API set. For example programmableweb.com is a good starter and you must read the information on the google code pages on the YouTube Data API.
Thursday, March 13, 2008
Google YouTube API
Google released a set of API’s for youtube which will give developers the freedom to build their own code which will interact with the YouTube database. We are already used to the fact that Google releases almost for every product or service a set of API’s so it was only a matter of time.They released a JAVA API consisting of a set of Java classes and a PHP API. To use the PHP client library, you must be running PHP >= 5.1.4. You also need to be using Zend_Gdata >= 1.5RC2, which is distributed as part of the Zend Framework. To use the Java client library, you must be running Java 1.5. After downloading the client library, you'll find the classes you need to get started in the java/lib/gdata-client-1.0.jar and java/lib/gdata-youtube-1.0.jar files.
There are also some Player API’s which can be used, a Javascript API and a flash API. The complete information about the new API's can be found on the google code pages.

Thursday, March 06, 2008
Oracle iStore, Error in IAS Cache.
Working on a Oracle iStore test environment I came across some strange behavior of some pages. Quite randomly it was only showing parts of the catalog pages and was giving errors in the shopping basket parts of the page. After opening the source of the HTML page I came across a “Error in IAS Cache: java.io.NotSerializableException: oracle.apps.ibe.store.UomKey” error stack message in the source which was causing the problems. The complete message was:
Message: Error in IAS Cache: java.io.NotSerializableException: oracle.apps.ibe.store.UomKey
Stack:
oracle.apps.jtf.base.resources.FrameworkException: Error in IAS Cache: java.io.NotSerializableException: oracle.apps.ibe.store.UomKey
at oracle.apps.jtf.cache.IASCacheProvider.get(IASCacheProvider.java:718)
at oracle.apps.jtf.cache.CacheManager.getInternal(CacheManager.java:4794)
at oracle.apps.jtf.cache.CacheManager.get(CacheManager.java:2945)
at oracle.apps.jtf.cache.CacheManager.get(CacheManager.java:2893)
at oracle.apps.ibe.catalog.Item.getPrimaryUOM(Item.java:944)
at _oa__html._ibeCCtdAddItemBin._jspService(_ibeCCtdAddItemBin.java:412)
at oracle.jsp.runtime.HttpJsp.service(HttpJsp.java:119)
at oracle.jsp.app.JspApplication.dispatchRequest(JspApplication.java:417)
at oracle.jsp.JspServlet.doDispatch(JspServlet.java:267)
at oracle.jsp.JspServlet.internalService(JspServlet.java:186)
at oracle.jsp.JspServlet.service(JspServlet.java:156)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:588)
at oracle.jsp.provider.Jsp20RequestDispatcher.include(Jsp20RequestDispatcher.java:103)
at oracle.jsp.runtime.OraclePageContext.include(OraclePageContext.java:475)
at _oa__html._ibeCCtdItemDetail._jspService(_ibeCCtdItemDetail.java:1871)
at oracle.jsp.runtime.HttpJsp.service(HttpJsp.java:119)
at oracle.jsp.app.JspApplication.dispatchRequest(JspApplication.java:417)
at oracle.jsp.JspServlet.doDispatch(JspServlet.java:267)
at oracle.jsp.JspServlet.internalService(JspServlet.java:186)
at oracle.jsp.JspServlet.service(JspServlet.java:156)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:588)
at oracle.jsp.provider.Jsp20RequestDispatcher.forward(Jsp20RequestDispatcher.java:162)
at oracle.jsp.runtime.OraclePageContext.forward(OraclePageContext.java:187)
at _oa__html._ibeCCtpItmDspRte._jspService(_ibeCCtpItmDspRte.java:1051)
at oracle.jsp.runtime.HttpJsp.service(HttpJsp.java:119)
at oracle.jsp.app.JspApplication.dispatchRequest(JspApplication.java:417)
at oracle.jsp.JspServlet.doDispatch(JspServlet.java:267)
at oracle.jsp.JspServlet.internalService(JspServlet.java:186)
at oracle.jsp.JspServlet.service(JspServlet.java:156)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:588)
at org.apache.jserv.JServConnection.processRequest(JServConnection.java:456)
at org.apache.jserv.JServConnection.run(JServConnection.java:294)
at java.lang.Thread.run(Thread.java:595)
Caused by: oracle.apps.jtf.base.resources.FrameworkException:
An exception occurred in the method CacheAccess.get
java.io.NotSerializableException: oracle.apps.ibe.store.UomKey
The base exception is:
oracle.apps.ibe.store.UomKey
at oracle.apps.jtf.base.resources.FrameworkException.convertException(FrameworkException.java:607)
at oracle.apps.jtf.base.resources.FrameworkException.addException(FrameworkException.java:585)
at oracle.apps.jtf.base.resources.FrameworkException.
at oracle.apps.jtf.base.resources.FrameworkException.
at oracle.apps.jtf.base.resources.FrameworkException.
at oracle.apps.jtf.base.resources.FrameworkException.
at oracle.apps.jtf.base.resources.FrameworkException.
... 33 more
Error in IAS Cache: java.io.NotSerializableException: oracle.apps.ibe.store.UomKey
oracle.ias.cache.NetworkException:
An exception occurred in the method CacheAccess.get
java.io.NotSerializableException: oracle.apps.ibe.store.UomKey
The base exception is:
oracle.apps.ibe.store.UomKey
at oracle.ias.cache.Net.exceptionHandler(Unknown Source)
at oracle.ias.cache.Net.broadcast(Unknown Source)
at oracle.ias.cache.Net.broadcast(Unknown Source)
at oracle.ias.cache.CacheHandle.broadcastManipulation(Unknown Source)
at oracle.ias.cache.CacheHandle.manipulateCascade(Unknown Source)
at oracle.ias.cache.CacheHandle.manipulate(Unknown Source)
at oracle.ias.cache.CacheHandle.invalidate(Unknown Source)
at oracle.ias.cache.CacheHandle.checkTtl(Unknown Source)
at oracle.ias.cache.CacheHandle.findObject(Unknown Source)
at oracle.ias.cache.CacheHandle.locateObject(Unknown Source)
at oracle.ias.cache.CacheAccess.get(Unknown Source)
at oracle.apps.jtf.cache.IASCacheProvider.get(IASCacheProvider.java:656)
at oracle.apps.jtf.cache.CacheManager.getInternal(CacheManager.java:4794)
at oracle.apps.jtf.cache.CacheManager.get(CacheManager.java:2945)
at oracle.apps.jtf.cache.CacheManager.get(CacheManager.java:2893)
at oracle.apps.ibe.catalog.Item.getPrimaryUOM(Item.java:944)
at _oa__html._ibeCCtdAddItemBin._jspService(_ibeCCtdAddItemBin.java:412)
at oracle.jsp.runtime.HttpJsp.service(HttpJsp.java:119)
at oracle.jsp.app.JspApplication.dispatchRequest(JspApplication.java:417)
at oracle.jsp.JspServlet.doDispatch(JspServlet.java:267)
at oracle.jsp.JspServlet.internalService(JspServlet.java:186)
at oracle.jsp.JspServlet.service(JspServlet.java:156)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:588)
at oracle.jsp.provider.Jsp20RequestDispatcher.include(Jsp20RequestDispatcher.java:103)
at oracle.jsp.runtime.OraclePageContext.include(OraclePageContext.java:475)
at _oa__html._ibeCCtdItemDetail._jspService(_ibeCCtdItemDetail.java:1871)
at oracle.jsp.runtime.HttpJsp.service(HttpJsp.java:119)
at oracle.jsp.app.JspApplication.dispatchRequest(JspApplication.java:417)
at oracle.jsp.JspServlet.doDispatch(JspServlet.java:267)
at oracle.jsp.JspServlet.internalService(JspServlet.java:186)
at oracle.jsp.JspServlet.service(JspServlet.java:156)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:588)
at oracle.jsp.provider.Jsp20RequestDispatcher.forward(Jsp20RequestDispatcher.java:162)
at oracle.jsp.runtime.OraclePageContext.forward(OraclePageContext.java:187)
at _oa__html._ibeCCtpItmDspRte._jspService(_ibeCCtpItmDspRte.java:1051)
at oracle.jsp.runtime.HttpJsp.service(HttpJsp.java:119)
at oracle.jsp.app.JspApplication.dispatchRequest(JspApplication.java:417)
at oracle.jsp.JspServlet.doDispatch(JspServlet.java:267)
at oracle.jsp.JspServlet.internalService(JspServlet.java:186)
at oracle.jsp.JspServlet.service(JspServlet.java:156)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:588)
at org.apache.jserv.JServConnection.processRequest(JServConnection.java:456)
at org.apache.jserv.JServConnection.run(JServConnection.java:294)
at java.lang.Thread.run(Thread.java:595)
An exception occurred in the method CacheAccess.get
java.io.NotSerializableException: oracle.apps.ibe.store.UomKey
The base exception is:
oracle.apps.ibe.store.UomKey
Oracle metalink advised applying patch 6709272 in note 434121.1.The route cause, claimed by metalink is:
The issue is caused by the following setup: Distributed cache mode enabled for non-serializable
key classes.
The class oracle.apps.ibe.store.UomKey is being used as a key for the cache that is declared distributed. The key class must be serializable but the key class in this case is not serializable. The keys are made serializable in Release 12.
For 11.5.10 don't use distributed flag for the following cache components:
oracle.apps.ibe.store.UomKey.java
java/displayManager/MediaKey.java
java/catalog/ItemCacheKey.java
java/catalog/ItemLangCacheKey.java
java/catalog/RelatedPriceCacheKey.java
java/catalog/SectionLangCacheKey.java
As per Note 275879.1 "The Component Caches using distributed functionality must use keys that are serializable".
Applying the patch worked for us they however do also provide a temporary workaround you can use before applying the patch on your systems.
1. Login to CRM HTML Administration Responsibility
2. Go to Performance > Components
3. Choose "iStore" for the View
4. Select the below cache components and view the Edit Component Cache page -
IBE_ITEM_CACHE
IBE_MEDIA_CACHE
IBE_UOM_CACHE
Uncheck the Distributed Mode checkbox for the above components
5. Clear the java cache and bounce the apache server.
6. Retest the issue.
Thursday, February 14, 2008
Google Web Toolkit
Ajax, Asynchrone Java And Xml, already for sometime now a promising buzzword which also have gained some momentum in developers communities. Web2.0 is mostly powered by AJAX and AJAX like applications and enables us to have a lot more fun on the web. However, how to work with it is still for some a little mystery and I have no intentions to clear that up in this blogpost. I do intend to give some more insight in some tools and ways you can play with AJAX and I might give some start pointers away. To be honest AJAX is quite simple and can be learned by example from the web. Recently I was asked to code a little web tool and this gave me the opportunity to get some more knowledge to AJAX and after a very little effort I was able to put in to use.First, Google Web Toolkit, google claims the following on the website:
Google Web Toolkit (GWT) is an open source Java software development framework that makes writing AJAX applications like Google Maps and Gmail easy for developers who don't speak browser quirks as a second language. Writing dynamic web applications today is a tedious and error-prone process; you spend 90% of your time working around subtle incompatibilities between web browsers and platforms, and JavaScript's lack of modularity makes sharing, testing, and reusing AJAX components difficult and fragile.
GWT lets you avoid many of these headaches while offering your users the same dynamic, standards-compliant experience. You write your front end in the Java programming language, and the GWT compiler converts your Java classes to browser-compliant JavaScript and HTML.
And I think this is completely accurate. On the google website you can find a lot of examples, books and articles to get you started. What Google offers is a quite good set of pre developed solutions you can put to work for you. You want HTML / AJAX tabs on your website, just issue the command and you have your tabs. You want,...... issue the command and you have it. There is quite a big library of nice "things" you can use and this can speed up your development in a big way.
Secondly a nice thing to explore is the Oracle Berkeley DB Java Edition as a Persistence Manager for the Google Web Toolkit. Oracle has written a whitepaper about this subject and gives away some very nice coding examples for you to use. You can find the document on the oracle website.
I also found a nice video from Google Developers you might want to watch.
Tuesday, February 05, 2008
OBIEE, SOA and jDeveloper

Oracle released a whitepaper on integrating Oracle Business Intelligence Enterprise Edition Plus with SOA. A great document where they very well documented describe how you can use Oracle jDeveloper to create objects which can be used with OBIEE.
OBIEE the new tool (toy) in the oracle fleet is one of the newly and in my personal opinion great tools launched recently by Oracle. You can view the whitepaper at the Oracle website.
Wednesday, January 02, 2008
Oracle Fusion Middleware 11g Technology Previews
Oracle Fusion Middleware 11g Technology Previews are presented on the oracle website. You can take a peak at SOA suite, Webcenter, Toplink and Oracle containers for JEE. Also you will be able to view some demo's and download the new jDeveloper here.There are online demo's for jDeveloper about which can be found here:
- Java Enterprise Edition 5.0 Application Development with Oracle JDeveloper
- Rich Client (Ajax) JSF Development in Oracle JDeveloper
- JPA Development in Oracle JDeveloper
- Updated SubVersion Support New
- Web Services Development in Oracle JDeveloper
- WSDL Editor New Features New
- JavaScript Development in Oracle JDeveloper
- Data Visualization and Graphs for JSF
- Geographical Maps and Pivot Table JSF Components New
- Developing Geographical Maps and Pivot Tables New
- The Gantt Chart Component New
- JSF Page Templating
- Oracle ADF Controller - Extending the JSF controller layer
- ADF Business Components - List Of Values
- ADF Business Components - LOV Driven UI
Subscribe to:
Posts (Atom)

