Выяснилось что вызовы должны быть static для Оракла.
Ниже мой джава код. Я упростил функцию вызовы что бы она просто возвращала 1.
Я внес изменения в оригинальный код на джаве.
Сделал переменную iMCR статической. И функцию вызова статической String makesqr().
Сейчас при запуске из оракла я получаю ошибку.
ORA-29532: вызов Java прерван неустановленным исключением Java: java.lang.NoClassDefFoundError
При это вызов этого класса из командной строки работает.
Из кнсоли я запускаю класс такой командой.
c:\oracle\product\11.1.0\db_1\jdk\jre\bin\java.exe -classpath .\MagicDemoJavaApp;.\MagicDemoComp;"c:\Program Files\MATLAB\R2007a\toolbox\javabuilder\jar\javabuilder.jar";.\MagicDemoComp\makesqr.jar getmagic 5
Видимо дело сейчас в том как указать classpath при вызове из Оракла?
package makesqr;
import com.mathworks.toolbox.javabuilder.*;
import java.util.*;
public class magic implements Disposable
{
private static MWMCR iMCR = null;
private static Set sInstances = new HashSet();
private static final MWFunctionSignature smakesqrSignature = new MWFunctionSignature(1, false, "makesqr", 1, false);
public magic() throws MWException
{
iMCR = makesqrMCR.newInstance();
// add this to sInstances
synchronized(sInstances) {
sInstances.add(this);
}
}
public magic(String pathToComponent) throws MWException
{
iMCR = makesqrMCR.newInstance(pathToComponent);
// add this to sInstances
synchronized(sInstances) {
sInstances.add(this);
}
}
******
public static void main (String[] args)
{
try {
MWMCR mcr = makesqrMCR.newInstance();
mcr.runMain(smakesqrSignature, args);
mcr.dispose();
} catch (Throwable t) {
t.printStackTrace();
}
}
static
{
Runtime.getRuntime().addShutdownHook(new Thread(){public void run(){magic.disposeAllInstances();}});
}
******
public static String makesqr() throws MWException
{
return "1";
}