Изначально поддержка функций Java в Informix отключена.
Для того, чтобы определить, поддерживает ли данная инсталляция Informix функции Java в принципе, нужно просмотреть список расширений экземпляра СУБД и найти каталог
$INFORMIXDIR/extend/krakatoa
Если такой каталог присутствует - поддержка возможна.
Для размещения зарегистрированных библиотек Java в базе данных необходимо иметь в СУБД как минимум одно пространство smart blob, в котором достаточно свободного места. Если такого пространства еще нет, его необходимо создать, а затем указать имя этого пространства в файле onconfig в параметре конфигурации SBSPACENAME, после чего перезапустить экземпляр СУБД.
SBSPACENAME sbs1
Для тестирования достаточно создать smart blobspace размером в несколько сотен мегабайт. В дальнейшем при необходимости smart blobspace можно расширить, как и любое другое пространство.
Фрагмент файла onconfig, ответственный за поддержку Java, изначально выглядит так:
#VPCLASS jvp,num=1 JVPPROPFILE $INFORMIXDIR/extend/krakatoa/.jvpprops JVPLOGFILE $INFORMIXDIR/tmp/jvp.log #JVPARGS -verbose:jni JVPARGS -Dcom.ibm.tools.attach.enable=no #JVPCLASSPATH $INFORMIXDIR/extend/krakatoa/krakatoa_g.jar:$INFORMIXDIR/extend/krakatoa/jdbc_g.jar JVPCLASSPATH $INFORMIXDIR/extend/krakatoa/krakatoa.jar:$INFORMIXDIR/extend/krakatoa/jdbc.jar
Хранимые функции Java выполняются специальными виртуальными процессорами. Чтобы включить Java, достаточно раскомментировать выделенную выше строку, после чего перезапустить экземпляр СУБД.
При желании можно отредактировать дополнительные параметры Java
По умолчанию СУБД запускает один виртуальный процессор Java. Можно указать любое разумное число таких виртуальных процессоров, позволяя выполнять несколько Java-функций одновременно. Однако каждая выполняемая функция может использовать только один виртуальный процессор.
Чтобы определить, какая версия Java используется, достаточно выполнить команду
$INFORMIXDIR/extend/krakatoa/jre/bin/java -version
Например, в Informix 12.10 Linux мы получим
java version "1.7.0" Java(TM) SE Runtime Environment (build pxa6470sr10fp55-20191010_01(SR10 FP55)) IBM J9 VM (build 2.6, JRE 1.7.0 Linux amd64-64 Compressed References 20191007_429309 (JIT enabled, AOT enabled) J9VM - R26_Java726_SR10_20191007_1624_B429309 JIT - r11_20191007_429309 GC - R26_Java726_SR10_20191007_1624_B429309_CMPRSS J9CL - 20191007_429309) JCL - 20191004_01 based on Oracle jdk7u241-b08
, в Informix 14.10 Linux
java version "1.8.0_241" Java(TM) SE Runtime Environment (build 8.0.6.5 - pxa6480sr6fp5-20200111_02(SR6 FP5)) IBM J9 VM (build 2.9, JRE 1.8.0 Linux amd64-64-Bit Compressed References 20200108_436782 (JIT enabled, AOT enabled) OpenJ9 - 7d1059c OMR - d059105 IBM - c8aee39) JCL - 20200110_01 based on Oracle jdk8u241-b07
, а в Informix 12.10 Solaris
java version "1.7.0_121" Java(TM) 2 Runtime Environment, Standard Edition (IBM build 1.7.0_121-b31 19_Oct_2016_11_23 solaris sparcv9(SR9 FP60)) Java HotSpot(TM) Server VM (build 24.121-b31, mixed mode) IBM Java ORB build orb626-20161012.00 XML build XL TXE Java 1.0.56 XML build IBM JAXP 1.4.12 XML build XML4J 4.5.28
При компиляции функций следует учитывать, что более новые версии функций не могут выполняться на более старой виртуальной машине Java.