Usando o padrão de codificação singleton enum em um agente Java do Domino
Portanto, este é o código simplificado do agente Lotus Domino Java que estou tentando executar ...
import lotus.domino.*;
enum SingletonTest {
INSTANCE;
public void helloWorld() {
System.out.println("Hello World");
}
}
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
System.out.println("Started");
SingletonTest.INSTANCE.helloWorld();
System.out.println("Done");
} catch(Exception e) {
e.printStackTrace();
}
}
}
Mas quando tento executá-lo é isso que aparece no console Java ...
Started
Exception in thread "AgentThread: JavaAgent" java.lang.VerifyError: JVMCFRE028 ldc* bytecode must reference a constant; class=, method=valueOf(Ljava/lang/String;)LSingletonTest;, pc=0
at java.lang.ClassLoader.defineClassImpl(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:275)
at java.lang.ClassLoader.defineClass(ClassLoader.java:212)
at lotus.domino.AgentLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(ClassLoader.java:626)
at JavaAgent.NotesMain(JavaAgent.java:17)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source)
Eu estou usando o Java 1.6 para o meu agente. Eu estou usando v8.5.3 FP3 e no meu notes.ini eu tenho ..
JavaCompilerTarget = CurrentJavaVersion
Então, o que estou fazendo de errado?
Existe um problema com o carregador de classes da versão do IBM Java usando um enum que contém código?
Este é o padrão de codificação singleton que tentei seguir ...
https://stackoverflow.com/a/71399/2530065
edit: Provavelmente deveria adicionar Estou executando isso como um agente do cliente do Notes com "Trigger: On event: seleção do menu Action" e "Target: None".
edit2: Então eu testei esse código exato em um programa Java independente usando o mesmo IBM JRE / JVM e o código funciona perfeitamente sem nenhum problema. Eu simplesmente não consigo fazer isso funcionar como um agente Java dentro do cliente do Notes.