BC4Jdemo.html
--------------
History of this file:
02-21-2001 Bikle Creation of BC4Jdemo.txt
02-22-2001 Bikle Finished BC4Jdemo.txt
03-11-2001 Bikle Derived BC4Jdemo.html from BC4Jdemo.txt
-----------------------------------------------------------
Dan Meets JDeveloper
This contains a few simple notes about Oracle JDeveloper 3.2 (we call
it JDev). Or at least that is how it started out. It is mostly
a
random tour by a clueless neophyte through various areas of JDev
functionality which ended after a side-trip into the awe inspiring
(I'm serious here) JDev help system. This document ends after it
describes how we setup what we call the BC4J demo which comes with the
JDev software.
tip: when JDev has a form up asking for input; avoid clicking another window
to do
something like read mail or look something up; getting back to the input
form may
cause JDev to hang.
We start JDev with file-close-workspace.
Then we do file-new-workspace.
Next right click connections and attach a jdbc connection to the workspace.
For example: jdbc:oracle:thin:@localhost:1521
We try exporting the definition to a file; it fails. Possible bug?
Next,
new-project
project containing business objects-next
next
next
finish
biz components wizard appears-next
connection def appears-next
initial package-next
table list appears-select EMP-click-radio button-view objects
click-radio button-application module
next-finish-upper-menu-project-make
file-new project-empty project-finish
file-new....-business components data form wizard
single-table, frame, next all the way through until .java gets created
Eventually we find a deployment wizard which we use to create a jar file,
a .bat, and a .sh
we find them here:
e:/jdev32/myclasses/MyProject3.jar
e:/jdev32/myclasses/Profile.bat
e:/jdev32/myclasses/Profile.sh
A table of contents of the jar file:
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
M Filemode Length Date
Time File
- ---------- -------- ----------- -------- ------------------------
-rw-rw-rw- 507 22-Feb-2001 01:01:52
meta-inf/manifest.mf
-rw-rw-rw- 776 22-Feb-2001 01:01:08
package3/Frame1$12.class
-rw-rw-rw- 860 22-Feb-2001 01:01:08
package3/Frame1$8.class
-rw-rw-rw- 864 22-Feb-2001 01:01:08
package3/Frame1$10.class
-rw-rw-rw- 860 22-Feb-2001 01:01:08
package3/Frame1$3.class
-rw-rw-rw- 860 22-Feb-2001 01:01:08
package3/Frame1$6.class
-rw-rw-rw- 861 22-Feb-2001 01:01:08
package3/Frame1$9.class
-rw-rw-rw- 746 22-Feb-2001 01:01:08
package3/Frame1$1.class
-rw-rw-rw- 864 22-Feb-2001 01:01:08
package3/Frame1$11.class
-rw-rw-rw- 860 22-Feb-2001 01:01:08
package3/Frame1$4.class
-rw-rw-rw- 860 22-Feb-2001 01:01:08
package3/Frame1$7.class
-rw-rw-rw- 773 22-Feb-2001 01:01:08
package3/Frame1$2.class
-rw-rw-rw- 860 22-Feb-2001 01:01:08
package3/Frame1$5.class
-rw-rw-rw- 343 22-Feb-2001 01:01:52
connections.properties
-rw-rw-rw- 13492 22-Feb-2001 01:01:08
package3/Frame1.class
- ---------- -------- ----------- -------- ------------------------
24386
15
files
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
Inspection of the above list reveals that the java program we just created
might be named: "package3/Frame1.class"
Now that we've done the deployment step; we wonder if it is possible to
gain access to the .java files so we may change any code in there if nec?
To run it we need to prepare an environment and then try this command:
java package3/Frame1.class
On UNIX, and we assume for win2k too, it would be a good idea to specify
a full path to java so we don't pickup a bad one which is resident in our
PATH somewhere.
But, how do we create an environment?
We suspect clues reside in the Profile.bat and the Profile.sh files
which the deployment wizard made for us.
The .bat file is displayed below:
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
@REM -- Script filename: Profile.bat
@REM -- Do not make changes directly to this script!!
@REM -- This script is generated and gets overwritten whenever you deploy.
@REM -- Changes made directly to this script will be lost.
@REM -- Use this script to set up the CLASSPATH environment variable for
your deployed project.
@REM -- The following archives are involved in running your project:
@REM -- E:\jdev32\myclasses\MyProject3.jar
@REM -- E:\jdev32\java1.2\jre\lib\rt.jar
@REM -- E:\jdev32\lib\jdev-rt.zip
@REM -- E:\jdev32\lib\connectionmanager.zip
@REM -- E:\jdev32\lib\javax_ejb.zip
@REM -- E:\jdev32\lib\dacf.zip;E:\jdev32\infobus\lib\infobus.jar
@REM -- E:\jdev32\lib\LW_pfjbean.jar
@REM -- E:\jdev32\lib\jbodomorcl.zip;E:\jdev32\lib\jbodatum12.zip
@REM -- E:\jdev32\lib\jbomt.zip;E:\jdev32\lib\jbodomorcl.zip;E:\jdev32\lib\jboremote.zip;E:\jdev32\lib\jndi.jar;E:\jdev32\lib\xmlparserv2.jar
@REM -- E:\jdev32\jdbc\lib\oracle8.1.7\classes12.zip
@if X%1 EQU Xcopyto goto :copyto
@REM -- When the 'copyto' target is not being invoked, this script takes
a single argument, which is your archive root directory.
@REM -- The default is the root directory of your JDeveloper installation.
set __CLASSPATH_ROOT_DIR__=%1
if X%__CLASSPATH_ROOT_DIR__% EQU X set __CLASSPATH_ROOT_DIR__=E:\jdev32
@REM -- Initialize CLASSPATH to point to your deployed archive.
set CLASSPATH=%__CLASSPATH_ROOT_DIR__%\myclasses\MyProject3.jar
@REM -- JDK classpath (java version "JDK1.2.2_JDeveloper")
set CLASSPATH=%CLASSPATH%;%__CLASSPATH_ROOT_DIR__%\java1.2\jre\lib\rt.jar
@REM -- Add classpath from library 'JDeveloper Runtime'
set CLASSPATH=%CLASSPATH%;%__CLASSPATH_ROOT_DIR__%\lib\jdev-rt.zip
@REM -- Add classpath from library 'Connection Manager'
set CLASSPATH=%CLASSPATH%;%__CLASSPATH_ROOT_DIR__%\lib\connectionmanager.zip
@REM -- Add classpath from library 'Enterprise JavaBeans'
set CLASSPATH=%CLASSPATH%;%__CLASSPATH_ROOT_DIR__%\lib\javax_ejb.zip
@REM -- Add classpath from library 'InfoBus DAC'
set CLASSPATH=%CLASSPATH%;%__CLASSPATH_ROOT_DIR__%\lib\dacf.zip;%__CLASSPATH_ROOT_DIR__%\infobus\lib\infobus.jar
@REM -- Add classpath from library 'Chart'
set CLASSPATH=%CLASSPATH%;%__CLASSPATH_ROOT_DIR__%\lib\LW_pfjbean.jar
@REM -- Add classpath from library 'JBO Oracle Domains'
set CLASSPATH=%CLASSPATH%;%__CLASSPATH_ROOT_DIR__%\lib\jbodomorcl.zip;%__CLASSPATH_ROOT_DIR__%\lib\jbodatum12.zip
@REM -- Add classpath from library 'JBO Runtime'
set CLASSPATH=%CLASSPATH%;%__CLASSPATH_ROOT_DIR__%\lib\jbomt.zip;%__CLASSPATH_ROOT_DIR__%\lib\jbodomorcl.zip;%__CLASSPATH_ROOT_DIR__%\lib\jboremote.zip;%__CLASSPATH_ROOT_DIR__%\lib\jndi.jar;%__CLASSPATH_ROOT_DIR__%\lib\xmlparserv2.jar
@REM -- Add classpath from library 'Oracle 8.1.7 JDBC'
set CLASSPATH=%CLASSPATH%;%__CLASSPATH_ROOT_DIR__%\jdbc\lib\oracle8.1.7\classes12.zip
@goto :end
:copyto
@shift
@if X%1 EQU X goto :usage1
@if not exist %1 goto :usage2
set __TARGET_DIR__=%1
if not exist %__TARGET_DIR__%\myclasses\. mkdir %__TARGET_DIR__%\myclasses\.
copy "E:\jdev32\myclasses\MyProject3.jar" %__TARGET_DIR__%\myclasses\.
if not exist %__TARGET_DIR__%\java1.2\. mkdir %__TARGET_DIR__%\java1.2\.
if not exist %__TARGET_DIR__%\java1.2\jre\. mkdir %__TARGET_DIR__%\java1.2\jre\.
if not exist %__TARGET_DIR__%\java1.2\jre\lib\. mkdir %__TARGET_DIR__%\java1.2\jre\lib\.
copy "E:\jdev32\java1.2\jre\lib\rt.jar" %__TARGET_DIR__%\java1.2\jre\lib\.
if not exist %__TARGET_DIR__%\lib\. mkdir %__TARGET_DIR__%\lib\.
copy "E:\jdev32\lib\jdev-rt.zip" %__TARGET_DIR__%\lib\.
if not exist %__TARGET_DIR__%\lib\. mkdir %__TARGET_DIR__%\lib\.
copy "E:\jdev32\lib\connectionmanager.zip" %__TARGET_DIR__%\lib\.
if not exist %__TARGET_DIR__%\lib\. mkdir %__TARGET_DIR__%\lib\.
copy "E:\jdev32\lib\javax_ejb.zip" %__TARGET_DIR__%\lib\.
if not exist %__TARGET_DIR__%\lib\. mkdir %__TARGET_DIR__%\lib\.
copy "E:\jdev32\lib\dacf.zip" %__TARGET_DIR__%\lib\.
if not exist %__TARGET_DIR__%\infobus\. mkdir %__TARGET_DIR__%\infobus\.
if not exist %__TARGET_DIR__%\infobus\lib\. mkdir %__TARGET_DIR__%\infobus\lib\.
copy "E:\jdev32\infobus\lib\infobus.jar" %__TARGET_DIR__%\infobus\lib\.
if not exist %__TARGET_DIR__%\lib\. mkdir %__TARGET_DIR__%\lib\.
copy "E:\jdev32\lib\LW_pfjbean.jar" %__TARGET_DIR__%\lib\.
if not exist %__TARGET_DIR__%\lib\. mkdir %__TARGET_DIR__%\lib\.
copy "E:\jdev32\lib\jbodomorcl.zip" %__TARGET_DIR__%\lib\.
if not exist %__TARGET_DIR__%\lib\. mkdir %__TARGET_DIR__%\lib\.
copy "E:\jdev32\lib\jbodatum12.zip" %__TARGET_DIR__%\lib\.
if not exist %__TARGET_DIR__%\lib\. mkdir %__TARGET_DIR__%\lib\.
copy "E:\jdev32\lib\jbomt.zip" %__TARGET_DIR__%\lib\.
if not exist %__TARGET_DIR__%\lib\. mkdir %__TARGET_DIR__%\lib\.
copy "E:\jdev32\lib\jbodomorcl.zip" %__TARGET_DIR__%\lib\.
if not exist %__TARGET_DIR__%\lib\. mkdir %__TARGET_DIR__%\lib\.
copy "E:\jdev32\lib\jboremote.zip" %__TARGET_DIR__%\lib\.
if not exist %__TARGET_DIR__%\lib\. mkdir %__TARGET_DIR__%\lib\.
copy "E:\jdev32\lib\jndi.jar" %__TARGET_DIR__%\lib\.
if not exist %__TARGET_DIR__%\lib\. mkdir %__TARGET_DIR__%\lib\.
copy "E:\jdev32\lib\xmlparserv2.jar" %__TARGET_DIR__%\lib\.
if not exist %__TARGET_DIR__%\jdbc\. mkdir %__TARGET_DIR__%\jdbc\.
if not exist %__TARGET_DIR__%\jdbc\lib\. mkdir %__TARGET_DIR__%\jdbc\lib\.
if not exist %__TARGET_DIR__%\jdbc\lib\oracle8.1.7\. mkdir %__TARGET_DIR__%\jdbc\lib\oracle8.1.7\.
copy "E:\jdev32\jdbc\lib\oracle8.1.7\classes12.zip" %__TARGET_DIR__%\jdbc\lib\oracle8.1.7\.
@echo.
@echo End of the 'copyto' target.
@echo.
@goto :end
:usage1
@echo.
@echo ******* ERROR: You must specify the target directory when invoking
'copyto'
@echo.
@goto :end
:usage2
@echo.
@echo ******* ERROR: The specified target directory does not exist.
@echo.
@goto :end
:end
@set __CLASSPATH_ROOT_DIR__=
@set __TARGET_DIR__=
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
The Profile.sh is displayed below:
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
#!/bin/sh
# Script filename: Profile.sh
# Do not make changes directly to this script!!
# This script is generated and gets overwritten whenever you deploy.
# Changes made directly to this script will be lost.
# Use this script to set up the CLASSPATH environment variable for
your deployed project.
# The following archives are involved in running your project:
# E/jdev32/myclasses/MyProject3.jar
# E/jdev32/java1.2/jre/lib/rt.jar
# E/jdev32/lib/jdev-rt.zip
# E/jdev32/lib/connectionmanager.zip
# E/jdev32/lib/javax_ejb.zip
# E/jdev32/lib/dacf.zip:E/jdev32/infobus/lib/infobus.jar
# E/jdev32/lib/LW_pfjbean.jar
# E/jdev32/lib/jbodomorcl.zip:E/jdev32/lib/jbodatum12.zip
# E/jdev32/lib/jbomt.zip:E/jdev32/lib/jbodomorcl.zip:E/jdev32/lib/jboremote.zip:E/jdev32/lib/jndi.jar:E/jdev32/lib/xmlparserv2.jar
# E/jdev32/jdbc/lib/oracle8.1.7/classes12.zip
set -a
set -x
# When the 'copyto' target is not being invoked, this script takes
a single argument, which is your archive root directory.
# The default is the root directory of your JDeveloper installation.
if [ $# -lt 1 ]; then
__CLASSPATH_ROOT_DIR__='E/jdev32'
else
__CLASSPATH_ROOT_DIR__=$1
fi
# Initialize CLASSPATH to point to your deployed archive.
CLASSPATH='${__CLASSPATH_ROOT_DIR__}/myclasses/MyProject3.jar'
# JDK classpath (java version "JDK1.2.2_JDeveloper")
CLASSPATH=${CLASSPATH}':${__CLASSPATH_ROOT_DIR__}/java1.2/jre/lib/rt.jar'
# Add classpath from library 'JDeveloper Runtime'
CLASSPATH=${CLASSPATH}':${__CLASSPATH_ROOT_DIR__}/lib/jdev-rt.zip'
# Add classpath from library 'Connection Manager'
CLASSPATH=${CLASSPATH}':${__CLASSPATH_ROOT_DIR__}/lib/connectionmanager.zip'
# Add classpath from library 'Enterprise JavaBeans'
CLASSPATH=${CLASSPATH}':${__CLASSPATH_ROOT_DIR__}/lib/javax_ejb.zip'
# Add classpath from library 'InfoBus DAC'
CLASSPATH=${CLASSPATH}':${__CLASSPATH_ROOT_DIR__}/lib/dacf.zip:${__CLASSPATH_ROOT_DIR__}/infobus/lib/infobus.jar'
# Add classpath from library 'Chart'
CLASSPATH=${CLASSPATH}':${__CLASSPATH_ROOT_DIR__}/lib/LW_pfjbean.jar'
# Add classpath from library 'JBO Oracle Domains'
CLASSPATH=${CLASSPATH}':${__CLASSPATH_ROOT_DIR__}/lib/jbodomorcl.zip:${__CLASSPATH_ROOT_DIR__}/lib/jbodatum12.zip'
# Add classpath from library 'JBO Runtime'
CLASSPATH=${CLASSPATH}':${__CLASSPATH_ROOT_DIR__}/lib/jbomt.zip:${__CLASSPATH_ROOT_DIR__}/lib/jbodomorcl.zip:${__CLASSPATH_ROOT_DIR__}/lib/jboremote.zip:${__CLASSPATH_ROOT_DIR__}/lib/jndi.jar:${__CLASSPATH_ROOT_DIR__}/lib/xmlparserv2.jar'
# Add classpath from library 'Oracle 8.1.7 JDBC'
CLASSPATH=${CLASSPATH}':${__CLASSPATH_ROOT_DIR__}/jdbc/lib/oracle8.1.7/classes12.zip'
export
$SHELL
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
Are we getting any closer to running our java program?
How do we run it?
We carefully read the Profile.bat and the Profile.sh and cook up this simple
.bat file to run it:
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
rem
rem runJdevDemo.bat
rem
rem History:
rem 02/22/2001 Bikle Creation
rem rem rem rem rem rem rem rem rem
rem simple win2k script to run a java program which was created by JDeveloper
rem set our env vars
Profile.bat
rem now run the java program
e:\jdev32\java1.2\bin\java package3.Frame1
rem end of script
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
The above script fails. It seems to run Profile.bat okay but then completely
ignores the line:
e:\jdev32\java1.2\bin\java package3.Frame1
win2k sure is pathetic.
We run Profile straight from a win2k shell. It does set our CLASSPATH
to the following value:
CLASSPATH=E:\jdev32\myclasses\MyProject3.jar;E:\jdev32\java1.2\jre\lib\rt.jar;E:\jdev32\lib\jdev-rt.zip;E:\jdev32\lib\connectionmanager.zip;E:\jdev32\lib\javax_ejb.zip;E:\jdev32\lib\dacf.zip;E:\jdev32\infobus\lib\infobus.jar;E:\jdev32\lib\LW_pfjbean.jar;E:\jdev32\lib\jbodomorcl.zip;E:\jdev32\lib\jbodatum12.zip;E:\jdev32\lib\jbomt.zip;E:\jdev32\lib\jbodomorcl.zip;E:\jdev32\lib\jboremote.zip;E:\jdev32\lib\jndi.jar;E:\jdev32\lib\xmlparserv2.jar;E:\jdev32\jdbc\lib\oracle8.1.7\classes12.zip
So, we try running this command straight from a win2k shell:
e:\jdev32\java1.2\bin\java package3.Frame1
It gives us an error:
E:\jdev32\myclasses>e:\jdev32\java1.2\bin\java package3.Frame1
java.lang.NoSuchMethodError: void package3.Frame1.main(java.lang.String[])
Exception in thread main
E:\jdev32\myclasses>
It looks like main() is missing from Frame1.java; we wonder if I'm
supposed to be running a different class?
This leads us back to a previous question:
Now that we've done the deployment step; we wonder if it is possible to
gain access to the .java files so we may change any code in there if nec?
We go to the top menu bar; we click view...
and JDev freezes; win2k is such a piece of junk.
I'll cherish the day when Oracle ports this JDeveloper to linux and Solaris.
We reboot win2k.
Next, we try to figure out how to pickup where we left off.
We use win2k search to look for all files which end with .jws
We find about 15 .jws files under e:\jdev32; many of them are under
samples; we make a note to study them at a later time.
Where is the .jws we were working on?
We think this is it:
e:\jdev32\myprojects\ws1.jws
We open it, nope, wrong workspace.
Maybe the workspace got removed after we 'deployed'.
We don't see any others which could be mine.
I'll try this:
1. Create a new-empty workspace.
2. Try pulling the deployed jar (e:\jdev32\myclasses\MyProject3.jar) into
the workspace.
Well, JDev did put the .jar table of contents in a viewer. It's starting
to dawn on us that perhaps this is not the way to go. We doubt JDev
is smart
enough to transform .class files inside a .jar into .java files which we
can then
edit and manipulate.
We do know the names of the .class files. Perhaps we can locate the
.java files
under e:\jdev32\ somewhere. We start our quest with a search for Frame1.java.
No Frame1.java exists under e:\jdev32\
This sucks; how do we get back into that mode where we can edit the corresponding
.java files?
How about if we extract the .class files out of MyProject3.jar into a temporary
directory and read them with JDev?
We doubt this will work but maybe JDev is smarter than we think.
We issue these win2k commands:
cd e:\jdev32\myclasses\
mkdir tmp
cd tmp
e:\jdev32\java1.2\bin\jar xvf ..\MyProject3.jar
We jump into JDev; we close the workspace; open a new one; we then
open this file:
e:/jdev32/myclasses/tmp/package3/Frame1.class
The IDE does show a bunch of java code in the viewer; we refer to it below:
Frame1-class-java.txt
Notice the comments at the top of the file:
oooooooooooooooooooooooooooooooooooooooooo
// JDeveloper API Decompiler STUB SOURCE generated from class file
// Thu Feb 22 12:17:46 PST 2001
// -- implementation of methods is not available
package package3;
// approximate imports
oooooooooooooooooooooooooooooooooooooooooo
This makes sense; we think it is telling us that it's doing the best that
it
can of deriving the .java from a .class and that the original .java is lost.
Let's walk through the demo again this time trying to find out at which
point JDev puts the .java files in the trash.
We bring up JDev and trigger the actions below:
We press
file-close-workspace
We press
file-new-workspace
we fill out the connections dialog
We press
file-new-project
It: project wizard welcome
Us: next
It: project wizard step 1
Us: next
It: project wizard step 2
Us: next
It: project wizard step 3
Us: next
It: project wizard finish
Us: finish
It: business components project wizard, welcome
Us: next
It: business components project wizard, step 1
Us: next
It checks dbs connectivity
It: business components project wizard, step 2
Us: next
It: business components project wizard, step 3
It displays table names
Us: pick EMP
Us: next
It: business components project wizard, finish
Us: finish
We press
file-save-all
a few files get written to e:/jdev32/myprojects/package4:
e:/jdev32/myprojects/package4:
total 13
drwxrwxrwx 2 dbikle 5
0 Feb 23 00:47 .
drwxrwxrwx 2 dbikle 5
0 Feb 23 00:47 ..
-rw-rw-rw- 1 dbikle 5
3635 Feb 23 00:39 Emp.xml
-rw-rw-rw- 1 dbikle 5
4225 Feb 23 00:39 EmpImpl.java
-rw-rw-rw- 1 dbikle 5
2921 Feb 23 00:39 EmpView.xml
-rw-rw-rw- 1 dbikle 5
478 Feb 23 00:39 EmpViewImpl.java
-rw-rw-rw- 1 dbikle 5
480 Feb 23 00:39 Package4Module.xml
-rw-rw-rw- 1 dbikle 5
995 Feb 23 00:39 Package4ModuleImpl.java
drwxrwxrwx 2 dbikle 5
0 Feb 23 00:47 common
-rw-rw-rw- 1 dbikle 5
567 Feb 23 00:39 package4.xml
We press
project-make-project
We press
file-new-project
It: project wizard welcome
Us: next
It: project wizard, project type, step 1
Us: empty project, next
It: step 2
Us: next
It: step 3
Us: next
It: finish
Us: finish
We press
project-make-project
We press
file-new
we pick business components data form
It: welcome
Us: next
It: step 1
Us: next
It: step 2,3,4,5
Us: next
It: step 6
Us: pick emp view, next
It: list of columns
Us: pick em all; next
It: step 8
Us: next
It: finish
Us: finish
Now we see a Frame1.java icon appear in the lhs window.
According to IDE, it is in
e:/jdev32/myprojects/package5/
Emacs doesn't show it though.
We try file-save-all.
Now emacs can see it:
Frame1-java.txt
Now we try a project-make-project
e:/jdev32/myprojects/package5/Frame1.java
is still there.
Now we try a deploy.
It: step 1, how deploy?
Us: simple jar, next
It: step 2, files to deploy?
Us: next
It: step 3, specify archive properties
Us: main=aform, next
It: finish
Us: finish
We go looking for the jar file; we find it here:
e:/jdev32/myclasses/MyProject6.jar
Its contents:
M Filemode Length Date
Time File
- ---------- -------- ----------- -------- ------------------------
-rw-rw-rw- 525 23-Feb-2001 01:17:20
meta-inf/manifest.mf
-rw-rw-rw- 860 23-Feb-2001 01:01:36
package5/Frame1$4.class
-rw-rw-rw- 860 23-Feb-2001 01:01:36
package5/Frame1$7.class
-rw-rw-rw- 773 23-Feb-2001 01:01:36
package5/Frame1$2.class
-rw-rw-rw- 860 23-Feb-2001 01:01:36
package5/Frame1$5.class
-rw-rw-rw- 860 23-Feb-2001 01:01:36
package5/Frame1$8.class
-rw-rw-rw- 860 23-Feb-2001 01:01:36
package5/Frame1$3.class
-rw-rw-rw- 860 23-Feb-2001 01:01:36
package5/Frame1$6.class
-rw-rw-rw- 746 23-Feb-2001 01:01:36
package5/Frame1$1.class
-rw-rw-rw- 864 23-Feb-2001 01:01:36
package5/Frame1$11.class
-rw-rw-rw- 776 23-Feb-2001 01:01:36
package5/Frame1$12.class
-rw-rw-rw- 343 23-Feb-2001 01:17:20
connections.properties
-rw-rw-rw- 864 23-Feb-2001 01:01:36
package5/Frame1$10.class
-rw-rw-rw- 13492 23-Feb-2001 01:01:36
package5/Frame1.class
-rw-rw-rw- 861 23-Feb-2001 01:01:36
package5/Frame1$9.class
- ---------- -------- ----------- -------- ------------------------
24404
15
files
We were hoping to see 'aform.class' in there.
We look for any file named 'aform.*'; none found.
Next, we check if the Frame1.java file still exists; yep it is still here:
e:/jdev32/myprojects/package5/Frame1.java
So this is good news; our deployment activity did not trash our .java file.
The next day we tinkered some more.
We started with close workspace:
file-close-workspace
Next we defined a connection:
tools-connections
We hoped to define a connection which will appear like this in the connections
file:
jdbc:oracle:oci8:@DANB
We tinkered with the connection wizard and then go look for the
corresponding connections file which gets created by the wizard.
We found this file:
e:/jdev32/bin/IDEConnections.properties
We display it below:
ooooooooooooooooooooooooooooooooooooooooooooo
#Fri Feb 23 12:12:22 PST 2001
CM_NumConnections=2
CM_Connection2=password\=s\r,defaultBatchValue\=1\r,ConnectionType\=JDBC\r,ConnectionName\=c1\r,user\=scott\r,DeployPassword\=false\r,URL\=jdbc\\\:oracle\\\:thin\\\:@localhost\\\:1521\\\:danb\r,remarksReporting\=false\r,JdbcDriver\=oracle.jdbc.driver.OracleDriver\r,defaultRowPrefetch\=10\r,Role\=Normal
CM_Connection1=password\=s\r,defaultBatchValue\=1\r,ConnectionType\=JDBC\r,user\=scott\r,ConnectionName\=c2\r,DeployPassword\=false\r,URL\=jdbc\\\:oracle\\\:oci8\\\:@(DESCRIPTION\\\=(ADDRESS_LIST\\\=(ADDRESS\\\=(PROTOCOL\\\=TCP)(PORT\\\=)(HOST\\\=)))(CONNECT_DATA\\\=(SID\\\=danb)))\r,remarksReporting\=false\r,JdbcDriver\=oracle.jdbc.driver.OracleDriver\r,defaultRowPrefetch\=10\r,Role\=Normal
ooooooooooooooooooooooooooooooooooooooooooooo
It looks like the above file contains two connection definitions which does
validate what we see in JDev.
Currently, connection1 works and connection2 gives error:
ORA-12533
We tinkered with connection2 in a text editor so the connection string is
this:
jdbc:oracle:oci8:@DANB
We wonder if the data in the above file is cached by JDev while it is running
or
if the data is looked up from the file each time a connection is established.
We attempted to establish this with an experiment.
Result: We found the data in the above file is cached by JDev while
it is running; changes made to e:/jdev32/bin/IDEConnections.properties
by a text editor are not seen by JDev.
We shutdown JDev.
We tinkered more with
e:/jdev32/bin/IDEConnections.properties
using text editor.
e:/jdev32/bin/IDEConnections.properties
now looked like this:
ooooooooooooooooooooooooooooooooooooooooooooo
#Fri Feb 23 12:30:42 PST 2001
CM_NumConnections=2
CM_Connection2=password\=s\r,defaultBatchValue\=1\r,ConnectionType\=JDBC\r,ConnectionName\=c1\r,user\=scott\r,DeployPassword\=false\r,URL\=jdbc\\\:oracle\\\:oci8\\\:@DANB\r,remarksReporting\=false\r,JdbcDriver\=oracle.jdbc.driver.OracleDriver\r,defaultRowPrefetch\=10\r,Role\=Normal
CM_Connection1=password\=s\r,defaultBatchValue\=1\r,ConnectionType\=JDBC\r,user\=scott\r,ConnectionName\=c2\r,DeployPassword\=false\r,URL\=jdbc\\\:oracle\\\:thin\\\:@localhost\\\:1521\\\:DANB\r,remarksReporting\=false\r,JdbcDriver\=oracle.jdbc.driver.OracleDriver\r,defaultRowPrefetch\=10\r,Role\=Normal
ooooooooooooooooooooooooooooooooooooooooooooo
We started JDev.
We noticed two connections defined: c1 and c2
The c1 url is this: jdbc:oracle:oci8:@DANB
The c2 url is this: jdbc:oracle:thin:@localhost:1521:DANB
We tested both c1 and c2; they both work.
While tinkering we discover that a double click on the c1 icon (or c2
icn) results in the display of a nice browser of database objects.
Next we created a third connection which pointed us at an 8.1.6 database
running on Solaris.
Tinkering inside of help
-------------------------
With our newly created connection active we decided to walk through
a demo inside of the Help system within JDeveloper.
We keyed this:
help->help-topics->TutorialsandSampleApplications
->Building Enterprise Applications with Business Components for Java
->Running the Online Orders Application
->Requirements
->Creating and Populating the Database Tables
create bc4j account
run @e:\jdev32\bin\java2perm.sql bc4j
create user ship identified by ship;
grant connect , resource to ship;
grant execute on dbms_aqadm to ship;
grant execute on dbms_aqin to ship;
grant execute on dbms_aqjms to ship;
We put this in the database:
# 02-23-2001 bikle aq_tm_processes=1
aq_tm_processes=1
Then we bounced the database.
To create the tables: In JDeveloper, we opened the workspace
DatabaseSetup.jws located in \samples\bc4j\OrderEntry\DatabaseSetup
right-clicked OnlineOrders.sql and choose Invoke SQL*Plus
We got an error:
Creating table INVENTORY_ITEM
image ORDSYS.ORDIMAGE,
*
ERROR at line 5:
ORA-00902: invalid datatype
Here is the offending statement:
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
create table inventory_item(
id number,
name varchar2(30),
description varchar2(500),
image ORDSYS.ORDIMAGE,
price number(8,2),
onhand number,
supplier_id number,
category_id number,
constraint
inventory_item_pk
primary key (id),
constraint
supplied_by
foreign key (supplier_id) references supplier
);
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
This might have something to do with improper setup of 8i object option.
We inspected the RDBMS banner:
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
c:\dan\ptdir\webprops>E:\oracle\ora81\bin\sqlplus sys/s@zy
SQL*Plus: Release 8.1.7.0.0 - Production on Tue Feb 27 20:33:19 2001
(c) Copyright 2000 Oracle Corporation. All rights reserved.
Connected to:
Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
With the Partitioning option
JServer Release 8.1.6.0.0 - Production
SQL>
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
Notice that it shows no mention of the object option. We decided to
check that later.
We looked for clues in google; we did find a neat org: enhydra.org.
We added enhydra.org (and http://www.lutris.com) to our xml.doc url list.
After the two side trips to enhydra.com and lutris.com, we googled some more.
Further googling suggested that the "image" data type might be
created by a feature inside of Oracle InterMedia.
We investigated further via the document listed below:
Oracle8i interMedia Audio, Image, and Video User's Guide and Reference
Release 8.1.5
A67299-01
We list a useful url:
http://www.csee.umbc.edu/help/oracle8/inter.815/a67299/mm_imgre.htm
The main clue we found in the above document (which we did not read
very carefully) is that we need to install Oracle8i interMedia.
We looked around under $ORACLE_HOME.
We found some interesting scripts and ran them; the results are
linked below:
ordtinkerings.txt
Wow talk about a side trip.
We decided to steer clear of the 8.1.6 database on Solaris and use
the NT 8.1.7 database as the platform for this demo.
So we ran the script below:
e:\jdev32\bin\java2perm.sql
using a right click in JDev file browser.
It spawned sqlplus which then prompted us to input command line
argument #1; we responded with "bc4j". It ran so fast we had no
chance to spot any possible errors. So we re ran it from a ms-dos
shell prompt:
E:\jdev32\bin>sql sys/s @java2perm.sql bc4j
sql sys/s @java2perm.sql bc4j
E:\jdev32\bin>E:\oracle\ora81\bin\sqlplus sys/s @java2perm.sql bc4j
SQL*Plus: Release 8.1.7.0.0 - Production on Tue Feb 27 23:56:42 2001
(c) Copyright 2000 Oracle Corporation. All rights reserved.
Connected to:
Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production
BEGIN DBMS_JAVA.GRANT_PERMISSION(UPPER('bc4j'), 'SYS:java.util.PropertyPermission',
'*', 'write'); END;
*
ERROR at line 1:
ORA-29532: Java call terminated by uncaught Java exception:
oracle.aurora.vm.IdNotFoundException: BC4J is not a user or role
ORA-06512: at "SYS.DBMS_JAVA", line 0
ORA-06512: at line 1
BEGIN DBMS_JAVA.GRANT_PERMISSION(UPPER('bc4j'), 'SYS:java.util.PropertyPermission',
'*', 'read'); END;
*
ERROR at line 1:
ORA-29532: Java call terminated by uncaught Java exception:
oracle.aurora.vm.IdNotFoundException: BC4J is not a user or role
ORA-06512: at "SYS.DBMS_JAVA", line 0
ORA-06512: at line 1
BEGIN DBMS_JAVA.GRANT_PERMISSION(UPPER('bc4j'), 'SYS:java.lang.RuntimePermission',
'createClassLoader', null); END;
*
ERROR at line 1:
ORA-29532: Java call terminated by uncaught Java exception:
oracle.aurora.vm.IdNotFoundException: BC4J is not a user or role
ORA-06512: at "SYS.DBMS_JAVA", line 0
ORA-06512: at line 1
BEGIN DBMS_JAVA.GRANT_PERMISSION(UPPER('bc4j'), 'SYS:java.lang.RuntimePermission',
'setContextClassLoader', null); END;
*
ERROR at line 1:
ORA-29532: Java call terminated by uncaught Java exception:
oracle.aurora.vm.IdNotFoundException: BC4J is not a user or role
ORA-06512: at "SYS.DBMS_JAVA", line 0
ORA-06512: at line 1
BEGIN DBMS_JAVA.GRANT_PERMISSION(UPPER('bc4j'), 'SYS:java.lang.RuntimePermission',
'getClassLoader', null); END;
*
ERROR at line 1:
ORA-29532: Java call terminated by uncaught Java exception:
oracle.aurora.vm.IdNotFoundException: BC4J is not a user or role
ORA-06512: at "SYS.DBMS_JAVA", line 0
ORA-06512: at line 1
Commit complete.
Disconnected from Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production
E:\jdev32\bin>
Good thing we checked.
Looks like we forgot to create he bc4j account; oops.
Here is a screen dump of us creating it:
SQL> grant connect,dba to bc4j identified by bc;
Grant succeeded.
SQL> alter user bc4j default tablespace users temporary tablespace temp;
User altered.
Now we retry the script above which had failed:
E:\jdev32\bin>sql sys/s @java2perm.sql bc4j
sql sys/s @java2perm.sql bc4j
E:\jdev32\bin>E:\oracle\ora81\bin\sqlplus sys/s @java2perm.sql bc4j
SQL*Plus: Release 8.1.7.0.0 - Production on Wed Feb 28 00:02:22 2001
(c) Copyright 2000 Oracle Corporation. All rights reserved.
Connected to:
Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
Commit complete.
Disconnected from Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production
E:\jdev32\bin>
Ah, much better.
Next we did the steps below which had failed us before.
To create the tables: In JDeveloper, we opened the workspace
DatabaseSetup.jws located in \samples\bc4j\OrderEntry\DatabaseSetup
right-clicked OnlineOrders.sql and choose Invoke SQL*Plus
We notice we have no connection defined for the bc4j account so we
escape from the sqlplus method for a minute.
We key upper-menu-tools-connections. We create a connection with
the naming convention "sid_user" which in this case is: "danb_bc4j"
Then we right-clicked OnlineOrders.sql and choose Invoke SQL*Plus.
The script ran with no significant errors!
Next, we browsed the BC4J user using the browser built into the danb_bc4j
connection.
We found 5 tables, 2 triggers, 6 sequences, and an "object". Information
about the
object is displayed below:
type T_ADDRESS as object (STREET VARCHAR2(50),
CITY VARCHAR2(30),
STATE VARCHAR2(2),
ZIPCODE VARCHAR2(10)
);
When we look in OnlineOrders.sql for more information about the T_ADDRESS
object,
we find the following interesting syntax:
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
drop type T_ADDRESS;
create type T_ADDRESS as object (STREET VARCHAR2(50),
CITY VARCHAR2(30),
STATE VARCHAR2(2),
ZIPCODE VARCHAR2(10)
);
/
-- Notice how we put both a semicolon and a slash at the end of the CREATE
TYPE
-- statement. This is similar to syntax used to create other objects
in the database
-- like packages, procedures, and triggers.
prompt Creating table CUSTOMER
create table customer(
id number,
firstname varchar2(30),
lastname varchar2(30),
username varchar2(15),
password varchar2(15),
address T_ADDRESS,
status varchar2(8),
email varchar2(40),
constraint
customer_pk
primary key (id)
);
insert into customer (id, firstname, lastname, username, password, address,
status, email)
values (customer_seq.nextval, 'Steve', 'Herbengizer', 'steve',
'steve',
t_address('101 California', 'Blueville', 'CA',
'94036-3209'),
'Gold', 'steve@steve.com');
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
Notice how the script interacts with this new data type named T_ADDRESS.
Next, we used the win2k searcher to list all .jws files (workspace
files) which reside under the samples/bc4j directory.
We counted 7 .jws files. Next, we use JDev to open the workspace
file listed below:
e:/jdev32/samples/BC4J/OrderEntry/DatabaseSetup/DatabaseSetup.jws
The navigator window displays a DatabaseSetup.jpr icon as a parent of other
icons:
-Folder named images which is full of .jpg files
-Icon named ImageLoader
-Icon named ImageLoader.java
-Icon named ImageLoader.jpx
-Icon named messaging.sql
-Icon named OnlineOrders.sql
We noted that these icons have properties:
ImageLoader, ImageLoader.java, ImageLoader.jpx
We right clicked ImageLoader and picked "edit ImageLoader".
A Screen appeared which told us that ImageLoader is a Package.
We canceled out and then pressed the "+" next to ImageLoader.
A hierarchy appeared which contained ImageLoader.xml and three branches.
Each branch contained a .xml file and a .java file.
So one pattern we noticed is that .xml files seem to be paired with .java
files.
We used our right mouse to view the file ImageLoader.xml:
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
<?xml version="1.0" encoding='WINDOWS-1252'?>
<!DOCTYPE JboPackage SYSTEM "jbo_03_01.dtd">
<JboPackage
Name="ImageLoader"
SeparateXMLFiles="true"
PackageName="ImageLoader" >
<Containee
Name="InventoryItem"
FullName="ImageLoader.InventoryItem"
ObjectType="Entity" >
</Containee>
<Containee
Name="InventoryItem1View"
FullName="ImageLoader.InventoryItem1View"
ObjectType="ViewObject" >
</Containee>
<Containee
Name="ImageLoaderModule"
FullName="ImageLoader.ImageLoaderModule"
ObjectType="AppModule" >
</Containee>
</JboPackage>
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
We noticed that the above .xml structure mirrors what we see in the
IDE workspace browser.
We decided to go play ping-pong and work with these demos tomorrow.
End of file