Witam programistów! Od razu przejdę do sedna: zamierzam utworzyć prostą aplikację (EJB 3.0) w GlassFishu z wykorzystaniem bazy Oracle. Zacząłem od najprosztszej aplikacji:
Interfejs (po stronie klienta):
package session;
import javax.ejb.Remote;
@Remote
public interface EJBRemote {
public String metoda();
}
Implementacja interfejsu (po stronie serwera):
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import domain.Test;
/**
* Session Bean implementation class EJBRemote
*/
@Stateless(mappedName = "Teleport")
public class EJB implements EJBRemote {
@PersistenceContext EntityManager en;
/**
* Default constructor.
*/
public EJB() {
// TODO Auto-generated constructor stub
}
@Override
public String metoda() {
//return "dziala";
return en.find(Test.class, new Long(1)).getNazwaTest();
}
}
A tu kod klienta:
package client;
import java.util.Properties;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import session.EJBRemote;
public class Klient {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Properties p1 = new Properties();
p1.put("org.omg.CORBA.ORBInitialHost", "localhost");
p1.put("org.omg.CORBA.ORBInitialPort", "3700");
InitialContext ic = new InitialContext(p1);
EJBRemote dao = (EJBRemote) ic.lookup("Teleport");
String result = dao.metoda();
System.out.println(result);
} catch (NamingException e) {
e.printStackTrace();
}
}
}
Błąd jest taki:
javax.naming.NameNotFoundException: Teleport not found
at com.sun.enterprise.naming.TransientContext.doLookup(TransientContext.java:216)
at com.sun.enterprise.naming.TransientContext.lookup(TransientContext.java:188)
at com.sun.enterprise.naming.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:74)
at com.sun.enterprise.naming.RemoteSerialContextProviderImpl.lookup(RemoteSerialContextProviderImpl.java:129)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:154)
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:687)
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:227)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1846)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1706)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:1088)
at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:223)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:806)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:563)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2567)
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:555)
Dopiero zaczynam zabawę z EJB...Co tu nie gra? Z góry dziękuję za wszelkie wskazówki
Dodam, że projekt robie w Eclipsie (2 oddzielne projekty - serwer i klient)