Question

  Asked: Jan 31 2008   8:37 PM GMT
  Asked by: OKONITA


UDF unable to load Java class. What do I need to do to make this work?


Java, CLASSPATH, Linux on Intel, UDF, error SQL4304N

Hi all,

Right now I find myself in a position of doing it first, and learn setting up Java UDF later!
I have managed to get the UDF registered but having problem getting the Java code to work. I need assistance to get this Double Metaphone Java UDF to work pretty quickly. Here is what I tried to run and the error

message that resulted:

SQL
select nm_frst, NM_LST, DB2ADMIN.DMPHONEJAVASCALAR(NM_LST)
from FSNST201.BR_DOH_BIRTH_RECORD WHERE NM_FRST = 'SKYLER';
ERROR
SQL4304N Java stored procedure or user-defined function
"DB2ADMIN.DMPHONEJAVASCALAR", specific name "DMPHONEJAVASCALAR" could not load Java class

"/home/db2inst1/sqllib/fun", reason code "". SQLSTATE=42724

Explanation:
The Java class given by the EXTERNAL NAME clause of a CREATE PROCEDURE or CREATE FUNCTION statement could not be loaded. The reason codes are:

1 The class was not found on the CLASSPATH.

2 The class did not implement the required interface ("COM.ibm.db2.app.StoredProc" or "COM.ibm.db2.app.UDF")

or lacked the Java "public" access flag.

3 The default constructor failed or was unavailable.

4 Could not load driver for "jdbc:default:connection".

5 Could not establish default context.

User Response:

Ensure that the compiled ".class" file is installed in the CLASSPATH, for example under "sqllib/function".

Ensure it implements the required Java interfaces and is "public".
sqlcode : -4304
sqlstate : 42724
SQLCODE: -4304

I will appreciate it if someone can guide me to determine if at all I am properly set up to invoke a javaUDF, What do I need to look for, and how I can go about setting up my environment and the UDF to execute successfully.

Okay, here are my questions based on the error above:

(1) Yes, db2inst1 runs the instance. First, the CLASSPATH. I tried to find it using the command "Which java" and got "/usr/bin/java" which is supposed to be my java home. Is this the same as CLASSPATH? When I looked in this directory, I found this "java ---->/etc/alternatives/java". So I navigated to this path, found and once again I found this "java -> /usr/lib/jvm/jre-1.4.2-gcj/bin/java". Once again, I navigated to this directory and found two scripts named "java" and "rmiregistry". I browsed the member called java and found this in the script the following lines that was of interest:

params="-Djava.home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre $params"
clp="$CLASSPATH:/usr/share/java/libgcj-$GCC.jar"

The above seem to point to the real classpath, right? How can I be sure of this? As I said, there are only the two members above in this dirctory. Nothing else. I have attached the actual java code as I have it. Please ake a look.

On error item #2, how can I find out if a class did or did not implement the required interface

("COM.ibm.db2.app.StoredProc" or "COM.ibm.db2.app.UDF") or lacked the Java "public" access flag.? Is there any config or init file that I can look into to find out? Any environment variable?

3 The default constructor failed or was unavailable. What is this? How can I tell if it is available? Is this a system code or microcode of some sort?

4 Could not load driver for "jdbc:default:connection". Now, drivers I can understand but don't know how to find out if it is available and loaded at startup. Anyway to find out?

5 Could not establish default context. What could this be or mean?


Thanks in advance everyone who wishes to help.

Subscribe to Alerts! Get questions and answers delivered to your Inbox.


E-mail me updates on this question



   SUBSCRIBE

hidden modal window

Answer Wiki (Improve, edit or add to this answer)


Start this Answer and Earn your Knowledge Points!

By clicking "Create Answer", you can write the answer to this question that can be improved upon by your peers using the Answer Wiki.

Browse more Questions and Answers on Development and Linux.

Looking for relevant Development Whitepapers? Visit the SearchWinDevelopment.com Research Library.


Discuss This Answer


You must be logged-in to discuss a question. Log-in/Register