Greetings
I got a problem with accessing an EJB in Jakarta EE 9 and JDK 17 on a GlassFish
6.2.3 with an Enterprise Client in JDK 17. I use NetBeans 12.6 to write my
code, start/ stop the GlassFish server etc.
Heres my code:
TimeBeanRemote.java:
package
com.example;
import
jakarta.ejb.Remote;
@Remote
public
interface
TimeBeanRemote
{
String
getTime
()
;
}
TimeBean.java:
package
com.example;
import
java.text.SimpleDateFormat;
import
java.util.Date;
import
jakarta.ejb.Stateless;
@Stateless
public
class
TimeBean
implements
TimeBeanRemote
{
@Override
public
String
getTime
()
{
Date
d1
=
new
Date
();
SimpleDateFormat
df
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
String
formattedDate
=
df.format(d1);
return
"The time is "
+ formattedDate;
}
}
TimeClient.java:
package
timeclient;
import
com.example.TimeBeanRemote;
import
javax.naming.InitialContext;
import
javax.naming.NamingException;
public
class
TimeClient
{
public
static
void
main
(String[] args)
{
try
{
InitialContext
ctx
=
new
InitialContext
();
Object
someEJBObject
=
ctx.lookup(
"com.example.TimeBeanRemote"
);
TimeBeanRemote
timeEJB
=
(TimeBeanRemote) someEJBObject;
System.out.println(timeEJB.getTime());
}
catch
(NamingException nex) {
nex.printStackTrace();
}
}
}
Deploying the EJB on the GlassFish works fine. But as soon as I try to run the
client and access the EJB with it I get the following error:
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
-Djava.endorsed.dirs=D:\glassfish6\glassfish\lib\endorsed;D:\glassfish6\glassfish\modules\endorsed
is not supported. Endorsed standards and standalone APIs
in modular form will be supported via the concept of upgradeable modules.
Java Result:
1
Tried to remove the JVM option parts about -Djava.endorsed in file
private.properties from this:
...
j2ee.appclient.tool.jvmoptions=-Djava.endorsed.dirs=
"D:\\glassfish6\\glassfish\\lib\\endorsed"
;
"D:\\glassfish6\\glassfish\\modules\\endorsed"
-javaagent:
"D:\\glassfish6\\glassfish\\lib\\gf-client.jar"
=mode=acscript,arg=-configxml,arg=
"D:\\glassfish6\\glassfish\\domains\\glassfish623\\config\\glassfish-acc.xml"
,client=jar=
j2ee.appclient.tool.jvmoptions.class=-Djava.endorsed.dirs=
"D:\\glassfish6\\glassfish\\lib\\endorsed"
;
"D:\\glassfish6\\glassfish\\modules\\endorsed"
-javaagent:
"D:\\glassfish6\\glassfish\\lib\\gf-client.jar"
=mode=acscript,arg=-configxml,arg=
"D:\\glassfish6\\glassfish\\domains\\glassfish623\\config\\glassfish-acc.xml"
,client=class=
...
To this:
...
j2ee.appclient.tool.jvmoptions=-javaagent:
"D:\\glassfish6\\glassfish\\lib\\gf-client.jar"
=mode=acscript,arg=-configxml,arg=
"D:\\glassfish6\\glassfish\\domains\\glassfish623\\config\\glassfish-acc.xml"
,client=jar=
j2ee.appclient.tool.jvmoptions.class=-javaagent:
"D:\\glassfish6\\glassfish\\lib\\gf-client.jar"
=mode=acscript,arg=-configxml,arg=
"D:\\glassfish6\\glassfish\\domains\\glassfish623\\config\\glassfish-acc.xml"
,client=class=
...
Which leads to the following error when trying to run the client:
Java
HotSpot
(TM)
64
-Bit Server VM warning: Archived non-system classes are disabled because the
java.system.class.loader property is
specified
(value =
"org.glassfish.appclient.client.acc.agent.ACCAgentClassLoader"
)
. To use archived non-system classes,
this
property must not be set
Error occurred during initialization of VM
java.lang.Error: org.glassfish.appclient.client.acc.agent.ACCAgentClassLoader
at java.lang.ClassLoader.initSystemClassLoader(java.base@
17.0.1
/ClassLoader.java:
1995
)
at java.lang.System.initPhase3(java.base@
17.0.1
/System.java:
2246
)
Caused by: java.lang.ClassNotFoundException:
org.glassfish.appclient.client.acc.agent.ACCAgentClassLoader
at jdk.internal.loader.BuiltinClassLoader.loadClass(java.base@
17.0.1
/BuiltinClassLoader.java:
641
)
at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(java.base@
17.0.1
/ClassLoaders.java:
188
)
at java.lang.ClassLoader.loadClass(java.base@
17.0.1
/ClassLoader.java:
520
)
at java.lang.Class.forName0(java.base@
17.0.1
/Native Method)
at java.lang.Class.forName(java.base@
17.0.1
/Class.java:
467
)
at java.lang.ClassLoader.initSystemClassLoader(java.base@
17.0.1
/ClassLoader.java:
1981
)
at java.lang.System.initPhase3(java.base@
17.0.1
/System.java:
2246
)
Java Result:
1
What am I doing wrong here?
Thanks in advance