Eai pessoal blz ?
Tentei aqui implementar meu primeiro EJB, e estou tendo o seguinte problema: quando eu tento chamar qualquer classe de meu EJB, tenho uma excessao ( erro no caso ) do tipo java.lang.NoClassDefFoundError.
Alguem poderia me dizer se é necessaria alguma configuracao especial para que meu EJB possa enxergar outras classes ?
Excessao:
15:32:24,562 ERROR [LogInterceptor] Unexpected Error in method: public abstract double[] tutorial.interfaces.Fibo.compute(int) throws java.rmi.RemoteException
java.lang.NoClassDefFoundError: tutorial/dao/hibernate/HibernateDepartamentoDAO
at tutorial.ejb.FiboBean.compute(FiboBean.java:74)
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:585)
…
- Metodo na classe action que instacia a home:
public ActionForward fibo(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
Context context = new InitialContext();
Object ref = context.lookup(“ejb/Fibo”);
home = (FiboHome) PortableRemoteObject.narrow(ref, FiboHome.class);
response.setContentType(“text/html”);
PrintWriter out = response.getWriter();
out.println("<html><head><title>");
out.println("Fibonaci Computation");
out.println("</title></head>");
out.println("<body>");
out.println("<h1>");
out.println("Fibonaci Computation");
out.println("</h1>");
try {
Fibo bean = home.create();
int limit = 0;
String value = request.getParameter("limit");
double[] result = bean.compute(value);
bean.remove();
out.println("<p>");
out.print("The ");
out.print(limit);
out.print(" first Fibonacci numbers ");
for (int i = 0; i < result.length; i++) {
out.println("<br>");
out.println(i);
out.println(" : ");
out.println(result[i]);
}
out.println("</p>");
} catch (Exception e) {
out.println(e.getMessage());
e.printStackTrace(out);
} finally {
out.println("</body></html>");
out.close();
}
return null;
}
-Interface FiboHome
public interface FiboHome
extends javax.ejb.EJBHome
{
public static final String COMP_NAME=“java:comp/env/ejb/Fibo”;
public static final String JNDI_NAME=“ejb/Fibo”;
public tutorial.interfaces.Fibo create()
throws javax.ejb.CreateException,java.rmi.RemoteException;
}
-Interface remota
public interface Fibo
extends javax.ejb.EJBObject
{
/**
* Business method
*/
public double[] compute( int number )
throws java.rmi.RemoteException;
}
-Bean
/**
- @ejb.bean name=“Fibo”
-
display-name="Name for Fibo"
-
description="Description for Fibo"
-
jndi-name="ejb/Fibo"
-
type="Stateless"
-
view-type="remote"
*/
public class FiboBean implements SessionBean {
public FiboBean() {
super();
// TODO Auto-generated constructor stub
}
public void setSessionContext(SessionContext ctx) throws EJBException,
RemoteException {
// TODO Auto-generated method stub
}
public void ejbRemove() throws EJBException, RemoteException {
// TODO Auto-generated method stub
}
public void ejbActivate() throws EJBException, RemoteException {
// TODO Auto-generated method stub
}
public void ejbPassivate() throws EJBException, RemoteException {
// TODO Auto-generated method stub
}
/**
* Default create method
*
* @throws CreateException
* @ejb.create-method
*/
public void ejbCreate() throws CreateException {
// TODO Auto-generated method stub
}
/**
* Business method
* @ejb.interface-method view-type = "remote"
*/
public double[] compute(int number) {
if (number < 0) {
throw new EJBException("Argument should be positive");
}
HibernateDepartamentoDAO h = new HibernateDepartamentoDAO();
h.insert(new Departamento());
double[] suite = new double[number + 1];
suite[0] = 0;
if (number == 0) {
return suite;
}
suite[1] = 1;
for (int i = 2; i <= number; i++) {
suite[i] = suite[i - 1] + suite[i - 2];
}
return suite;
}
}
Ou seja, o erro da nas linhas
HibernateDepartamentoDAO h = new HibernateDepartamentoDAO();
h.insert();new Departamento()