UUID
Posted in 2025
Mark Collins wanted a function to generate a UUID on IDS 14.10.FC11. Paul Watson pointed to a GUID/UUID bladelet and the Java-based function. The Java UDR failed with error -9431 because the JRE symlink was dead. After repointing it, Mark got it working by setting JVPJAVAHOME, JVPJAVAVM jvm and JVPJAVALIB /lib/server, and asked for cleaner settings.
Auto-generated by Claude from the posts below — may be imperfect; read the full thread.
Topics: General Discussion
Is there an Informix function, either built-in or easily implemented, that will create a new UUID value? Ideally, something that could be used in an INSERT statement, for instance. Something like:
INSERT INTO table_xyz
( uuid, name, rank, serial_nbr)
VALUES (make_uuid(), "John Doe", "PFC", 11552328);This would be for IDS 14.10.FC11.
------------------------------
mark collins
------------------------------
Ther is a GUID/UUID bladelet available Cheers Paul Paul Watson Oninit LLC +1-913-387-7529 www.oninit.com Oninit® is a registered trademark of Oninit LLC
Looking at the docs ther should be a Java based one with the engine Cheers Paul Paul Watson Oninit LLC +1-913-387-7529 www.oninit.com Oninit® is a registered trademark of Oninit LLC
Thanks Paul.
I found the
page
I think you were referring to, and I ran the '
CREATE FUNCTION UUID() RETURNING CHAR(36) EXTERNAL NAME 'com.informix.judrs.IfxStrings.getUUID()' language java;' statement and granted permission to public.When I run 'SELECT UUID() FROM sysmaster:sysdual', I get the error message 'SQL Error (-9431): Can't find system class or method or library (/informix/current/extend/krakatoa/jre/bin/j9vm/libjvm.so).'
I looked under /informix/current/extend/krakatoa and found that jre was a symlink pointing to /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.432.b06-2.el8.x86_64/jre, which does not exist on this server. Running 'which java' returns /usr/lib/jvm/jre-17/bin/java. I looked in /usr/lib/jvm/jre-17/bin, but there is no j9vm subdirectory. I also tried a 'find /usr/lib/jvm/jre-17/bin -name libjvm.so', but got no results. I eventually found it under /usr/lib/jvm/jre-17/lib/server/libjvm.so.
I can change the symlink /informix/current/extend/krakatoa/jre to point to /usr/lib/jvm/jre-17, which would at least get it in the correct vicinity. But since the error is saying that it's trying to find libjvm.so in /informix/current/extend/krakatoa/jre/bin/j9vm/libjvm.so, that won't solve the problem. My libjvm.so is in /informix/current/extend/krakatoa/jre/lib/server.
Is there an environment variable or config parameter that can be set to change where the server is expecting this library?
Thanks.
------------------------------
mark collins
------------------------------
Never used the Java one, but the C is (was) good. It uses the UUID libraries AFAIR Cheers Paul Paul Watson Oninit LLC +1-913-387-7529 www.oninit.com Oninit® is a registered trademark of Oninit LLC
Looking in onconfig.std, I see:
# JVPJAVAHOME - Absolute path to the JRE.
# Defaults to $INFORMIXDIR/extend/krakatoa/jre
#
# JVPJAVALIB - Path relative to JVPJAVAHOME where the shared
# libraries for the JRE are located.
# Platform dependant defaults are provided by.
#
# JVPJAVAVM - Path relative to JVPJAVAHOME that points to the
# JVM shared library (libjvm.so or jvm.dll)
# Platform dependant defaults are provided by.
JVPJAVAHOME $INFORMIXDIR/extend/krakatoa/jre
JVPJAVAVM
JVPJAVALIBSince I've changed the symlink $INFORMIXDIR/extend/krakatoa/jre to point to our current JRE, I think I need to also set JVPJAVAVM to 'lib/server' or maybe './lib/server', since it's relative to JVPJAVAHOME. If I'm reading the onconfig comments correctly, that would point the server to $INFORMIXDIR/extend/krakatoa/jre/lib/server/libjvm.so, which should address the error message I'm currently getting.
I've tried 'onmode -wm JVPJAVAVM="./lib/server"' but I get "Configuration Parameter to be changed is not valid or not supported with this option." Does this mean that I need to update the onconfig manually and restart the instance? Or can the Admin API call make this change?
------------------------------
mark collins
------------------------------
I am not finding a C version of UUID in the online docs, just the Java version. Can you paste a link to the C version? ------------------------------ mark collins ------------------------------
After a bit of futzing around with those three onconfig parameters, I finally managed to get something that works. I ended up with:
JVPJAVAHOME $INFORMIXDIR/extend/krakatoa/jre
JVPJAVAVM jvm
JVPJAVALIB /lib/serverThose with sharp eyes will note that having JVPJAVAVM=jvm does not seem to match the description in the onconfig comments "Path relative to JVPJAVAHOME that points to the JVM shared library (libjvm.so or jvm.dll)". Also, JVPJAVALIB=/lib/server does not match the description of "Path relative to JVPJAVAHOME ...".
Regardless of those inconsistencies, I now can run "SELECT UUID() FROM sysmaster:sysdual" and get a valid UUID as a return.
For those who are running Java external UDRs in their 14.10 instances, what values do you have in these three onconfig parameters? Just wanting to see if anyone has something that looks cleaner than what I've got. If not, I'll continue with what works, but if there is a cleaner way, I'd like to find it before migrating this to our user-acceptance and prod environments.
Or I guess I could just rewrite the comments in my copy of onconfig.
Thanks for looking.
------------------------------
mark collins
------------------------------