После двух дней поиска в Google и тестирования я разместил здесь. Я видел подобные вопросы, но их решения не отвечают моим потребностям.
Я написал простой Ejb с удаленным интерфейсом и хочу вызвать его из программы java Se.
Я развернул свой ejb как модуль Eclipse ejb. Это часть моего кода.
@Remote
public interface Greeter extends Serializable {
public void greet(String name) throws NamingException;
}
@Stateless
public class GreeterBean implements Greeter {
@Override
public void greet(String name) throws NamingException {
System.out.println("hello"+name);
}
}
И это моя Java se программа
Properties props = new Properties();
props.setProperty("java.naming.factory.initial",
"com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty("java.naming.factory.url.pkgs",
"com.sun.enterprise.naming");
props.setProperty("java.naming.factory.state",
"com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
try {
InitialContext initialContext = new InitialContext(props);
Greeter greeter = (Greeter) initialContext.lookup("java:global/EjbServer/GreeterBean");
greeter.greet("hamid");
...
У меня также есть копия Интерфейс Greeter в клиентском приложении
В клиентской части я использую glassfi sh 5 клиент
<dependency>
<groupId>org.glassfish.main.appclient</groupId>
<artifactId>gf-client</artifactId>
<version>5.1.0</version>
</dependency>
Я использую java EE 8 и glassfi sh 5.0.1 и Ejb 3.2 и Eclipse ide 2019 и это мой полный след стека.
javax.naming.NamingException: Lookup failed for 'java:global/EjbServer/GreeterBean' in SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=localhost, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NamingException: ejb ref resolution error for remote business interfacetest.Greeter [Root exception is java.lang.ClassNotFoundException: test.Greeter]]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:467)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:414)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at com.client.ejb.App.main(App.java:45)
Caused by: javax.naming.NamingException: ejb ref resolution error for remote business interfacetest.Greeter [Root exception is java.lang.ClassNotFoundException: test.Greeter]
at com.sun.ejb.EJBUtils.lookupRemote30BusinessObject(EJBUtils.java:409)
at com.sun.ejb.containers.RemoteBusinessObjectFactory.getObjectInstance(RemoteBusinessObjectFactory.java:51)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
at com.sun.enterprise.naming.impl.SerialContext.getObjectInstance(SerialContext.java:503)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:463)
... 3 more
Caused by: java.lang.ClassNotFoundException: test.Greeter
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at com.sun.ejb.EJBUtils.getBusinessIntfClassLoader(EJBUtils.java:663)
at com.sun.ejb.EJBUtils.loadGeneratedRemoteBusinessClasses(EJBUtils.java:439)
at com.sun.ejb.EJBUtils.lookupRemote30BusinessObject(EJBUtils.java:389)
... 7 more
Любая помощь будет принята с благодарностью. Заранее спасибо.