aspose file tools*
The moose likes JDBC and the fly likes Problem running an applet using appletviewer that uses JDBC Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Databases » JDBC
Bookmark "Problem running an applet using appletviewer that uses JDBC" Watch "Problem running an applet using appletviewer that uses JDBC" New topic
Author

Problem running an applet using appletviewer that uses JDBC

Chad Schmidt
Greenhorn

Joined: Nov 04, 2003
Posts: 16
Hello,
I'm new and am having problems running an applet, using appletviewer, that uses a class that uses the AS400JDBCDriver class to access data on a AS/400 machine and display the output in a JTable.
If I run this java program as a JFrame instead of a JApplet it runs just fine.
Is there some sort of applet security issue preventing this applet from finding the AS400JDBCDriver? If so, how can it be resolved?
My system CLASSPATH is set to:
.;%JAVA_HOME%\lib;%JAVA_HOME%\jtopen_4_1\lib\jt400.jar;C:\j2sdkee1.3.1\lib
****Where JAVA_HOME = c:\j2sdk1.4.2_02******
This applet will run in my WebSphere Development Studio Client for iSeries V.5.0 environment just fine when I run it as a Java Bean / Applet (I'm assuming that WebSphere has a built in appletviewer). My WebSphere Studio environment uses my system class path for its JRE references. So I am using version 1.4.2_02 references everywhere.
If I browse out to the source code's directory, from the command line and attempt to compile and view this applet using appletviewer, the applet will compile just fine but give me the following error message when the appletviewer command is run.
The two classes used here aree AS400QueryApplet.class and ResultSetTableModel.class. They are both in the same directory with the AS400QueryApplet.html file.
C:\Temp\JavaTestStuff>appletviewer AS400QueryApplet.html
java.lang.NoClassDefFoundError: com/ibm/as400/access/AS400JDBCDriver
at ResultSetTableModel.<init>(ResultSetTableModel.java:35)
at AS400QueryApplet.init(AS400QueryApplet.java:35)
at sun.applet.AppletPanel.run(AppletPanel.java:353)
at java.lang.Thread.run(Thread.java:534)
What am I doing wrong? The source will compile but not run. I'm stumped. Please help if you can.
Thank you,
Chad Schmidt
ctschmidt


Chad Schmidt<br />ctschmidt
Joe Ess
Bartender

Joined: Oct 29, 2001
Posts: 8708
    
    6

You need to put the AS400JDBCDriver.class file in a subdirectory named com/ibm/as400/access. Java files are arranged by package (i.e. com.ibm.as400.access) and the class loader looks for a package by looking up the corresponding directory structure.
Be advised that an applet can only connect back to the server that it was downloaded from unless it is signed with a digital signature. If your database is on another computer this will be your next problem.


"blabbing like a narcissistic fool with a superiority complex" ~ N.A.
[How To Ask Questions On JavaRanch]
Chad Schmidt
Greenhorn

Joined: Nov 04, 2003
Posts: 16
I'm not sure I understand your solution.
If I run this program as a JFrame it will connect just fine.
Why would I have to copy the AS400JDBCDriver.class from the jt400.jar? Shouldn't it be made available to all java programs from my classpath setting?
My database does indeed sit on another machine. I am working from a Windows 2000 Professional workstation and connecting to a AS/400 host in my java program. I looked at the digital signature stuff a little. I looks like that is the next big thing to learn. I guess this is a security issue, correct?
I attempted to give the applet access to all resources on my PC by writing a policy and using this policy when running the applet in appletviewer. This was not a successful venture. I actually have the applet security turtorial, as offered by Sun, open on my PC. I will work through that and get a good grasp on this topic and see if it helps solve my problem.
Any further suggestions???
Thanks much!
Maulin Vasavada
Ranch Hand

Joined: Nov 04, 2001
Posts: 1871
Hi Chad
Please make sure that jt400.jar is available to the "applet". Meaning, if its in the system's CLASSPATH it won't work. It has to be visible to the applet. Meaning, you should probably use ARCHIVE attribute of APPLET tag to specify this jar file name so the applet class loader can load the JDBC Driver from the jt400.jar.
Also, please post your applet HTML here if possible which might give us more idea if you are not able to solve the problem using ARCHIVE attribute...
Regards
Maulin
Chad Schmidt
Greenhorn

Joined: Nov 04, 2003
Posts: 16
Hello Maulin,
I read someone's reply, to a similar question like mine, on another message board that hinted on what you are talking about. That makes sense to me but I have never used that attribute of the APPLET tag before. Of course this is my first attempt at writing an applet that actualy does something useful.
Here is my current HTML code:
<html>
<applet code = "AS400QueryApplet.class" width = "400" height = "300">
</applet>
</html>
As you can see, it is simple and obviously not what I need. If you could point me in the right direction, that would be great.
Will I still need to create a system resource access policy?
I will look into the usage of the ARCHIVE attribute of the APPLET tag while waiting for a reply.
Thanks much!

Chad Schmidt
ctschmidt
Joe Ess
Bartender

Joined: Oct 29, 2001
Posts: 8708
    
    6

Originally posted by Chad Schmidt:
I'm not sure I understand your solution.
If I run this program as a JFrame it will connect just fine.
Why would I have to copy the AS400JDBCDriver.class from the jt400.jar? Shouldn't it be made available to all java programs from my classpath setting?

Applets and applications are very different things. Applications (like a JFrame) have the run of a computer, like any other application. Applets run in a very limited space called a "sandbox". Your classpath settings do not apply. The classpath that gets searched is the codebase (where your applet .class file is) and below. That's why I told you to put the class that wasn't being found in a subdirectory. Maulin may be onto something with the ARCHIVE tag, though I understood that the applet class had to be in the archive file as well. Maybe it will search the directory too. Try it. Nothing to lose.
Chad Schmidt
Greenhorn

Joined: Nov 04, 2003
Posts: 16
Got it to work!
I put the jt400.jar file in the same directory as my *.class and *.html file(s) and created a policy file that gave the applet access to all they system's resources, for testing purposes only, and made this change to my *.html file:
<html>
<applet code = "AS400QueryApplet.class" ARCHIVE="jt400.jar" width = "400" height = "300">
</applet>
</html>
All is well.
Thank you all!
Chad Schmidt
ctschmidt
Maulin Vasavada
Ranch Hand

Joined: Nov 04, 2001
Posts: 1871
Cool!
-Maulin
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Problem running an applet using appletviewer that uses JDBC
 
Similar Threads
Trouble running Applet that uses the AS400JDBCDriver
Not able to run the AdviceClient program mentioned in Chapter 1 of Head First EJB
Environment Variables
Using AS400JDBCDriver() and AS400() together
Compile and deploy Applets