Couldn't handle invocation directly within...StatelessRemote
ebross Feb 12, 2009 5:40 PMDevelopment Platform:
Eclipse
Linux
JBoss 5
JSF and Trinadad
Problem Description:
I have two classes:
(a) Stateless bean: DocumentController, packaged in a ejb.jar
(b) JSF Backing beans: AbstractDocumentPageBean, package: web.war
1. The ejb.jar and web.war are ear modules and deployed succesfully in ear file.
2. When a web page is called, a form appears,
3. I fill the fields and click the "create" button
4. Validation is ok --no error display
5. JBoss displays the stack trace (see below), "Couldn't handle invocation directly within...StatelessRemoteProxyInvocationHandler"
Could someone please help me understand what "Couldn't handle invocation directly within...StatelessRemoteProxyInvocationHandler" means
Thank you in advance
---------------------------------------------------------------------------------------------------- Stateless: DocumentController, Package: ejb.jar ---------------------------------------------------------------------------------------------------- @javax.ejb.Stateless(mappedName="ejb/DocumentController") @javax.ejb.Remote({com.xxxxxxxx.xxxx.ejb.intf.DocumentRemote.class}) @javax.ejb.Local({com.xxxxxxxx.xxxx.ejb.intf.DocumentLocal.class}) @javax.ejb.TransactionManagement(value=javax.ejb.TransactionManagementType.CONTAINER) @javax.ejb.TransactionAttribute(javax.ejb.TransactionAttributeType.REQUIRES_NEW) @javax.interceptor.Interceptors ({com.xxxxxxxx.xxxx.ejb.interceptor.Tracer.class}) // Security annotation @javax.annotation.security.DeclareRoles({"admin", "employee", "member", "subscriber"}) @javax.annotation.security.RolesAllowed({"admin","employee", "member", "subscriber"}) @org.jboss.ejb3.annotation.SecurityDomain(value = "xxxxRealm") public class DocumentController implements com.xxxxxxxx.xxxx.ejb.intf.DocumentRemote, com.xxxxxxxx.xxxx.ejb.intf.DocumentLocal, java.io.Serializable{ /** * The logger object. */ private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(DocumentController.class); @javax.ejb.EJB private com.xxxxxxxx.xxxx.dao.intf.DocumentDAOLocal documentDAO; public DocumentController() { } /** */ @javax.annotation.security.PermitAll public DocumentEntity createEntity(DocumentEntity bean) { <----- CALL IN BACKING BEAN log.debug("Entering createEntity"); DocumentEntity retVal = null; if (bean== null) { log.error("Exiting createEntity - Could not do create Document: " + "Null Document"); return null; } if(!bean.isNotNullFieldEmpty()){ log.error("Exiting createEntity - Could not do create Document: " + "Document contains empty mandatory field"); return null; } try{ retVal = getDocumentDAOImpl().createEntity(bean); } catch(com.xxxxxxxx.xxxx.dao.exception.DAOException e) { e.printStackTrace(); log.error("Exiting createEntity - Could not do create Document: " + e.getMessage(), e); return null; } log.debug("Exiting createEntity"); return retVal; } }
---------------------------------------------------------------------------------------------------- JSf Backing beans: AbstractDocumentPageBean, Package: web.war ---------------------------------------------------------------------------------------------------- public class AbstractDocumentPageBean extends com.xxxxxxxx.xxxx.web.bean.AbstractFacesBean{ /** * The logger object. */ private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(AbstractDocumentPageBean.class); /** * The DocumentForm object. */ protected DocumentForm formBean = null; protected DocumentConverter converter = null; protected DocumentForm[] documentAsArray = null; protected UserInfoBean userInfo = null; private javax.faces.model.DataModel listModel; @javax.ejb.EJB private com.xxxxxxxx.xxxx.ejb.intf.DocumentRemote documentManager; /* * Non-arg Constructor */ public AbstractDocumentPageBean(final DocumentForm formBean){ this(formBean, new UserInfoBean()); } /** * Getter method for formBean property. * * @return the value of formBean property */ public DocumentForm getFormBean(){ if (formBean == null) { formBean = (DocumentForm ) JSFUtils.getObjectFromRequestParameter("jsfcrud.Document", converter, null); } if (formBean == null) { formBean = new DocumentForm(new DocumentEntity(), userInfo); editAction = false; deleteAction = false; } return formBean; } /** * Getter method for FormBean.DocumentEntity property. * * Returns the value of the <code>FormBean.DocumentEntity</code> property. */ public DocumentEntity getFormValue(){ return getFormBean().getBackingData(); } /** * Creates a new Document. * *@return the outcome of the processing */ public String createButton_action(){ log.debug("Entering createButton_action"); UserInfoBean currentUser = getUserInfo(); if (currentUser.getAuthenticate() == true && currentUser.getAuthenticated() == false) { log.error("Exiting createButton_action : " + "User is not authenticated", null); return null; } /* * At this point the formBean should not have an id * but if it does, then don't create it, but anyway check * whether the id already exist or not. If it does then * display as duplicate --already exist in the database */ if(getFormValue().getPrimaryKey() != null){ DocumentEntity retVal = getDocumentManager().findByPrimaryKey(getFormValue().getPrimaryKey()); if(retVal != null){ log.error("Exiting createButton_action : " + "Cannot create a duplicate.", null); addFacesErrorMessage("Document already exists"); return null; } } DocumentEntity bean= new DocumentEntity(); bean.setDomainType(getFormValue().getDomainType()); bean.setDescription(getFormValue().getDescription()); bean.setCreatedBy(getFormValue().getCreatedBy()); bean.setDateCreated(getFormValue().getDateCreated()); bean.setUpdatedBy(getFormValue().getUpdatedBy()); bean.setDateLastUpdated(getFormValue().getDateLastUpdated()); bean.setActivated(getFormValue().getActivated()); bean.setNotes(getFormValue().getNotes()); bean.setVersion(getFormValue().getVersion()); bean.setHits(getFormValue().getHits()); try { getDocumentManager().createEntity(bean); <---- PROBLEM LINE addSuccessMessage("Document was successfully created."); } catch (Exception e) { log.error("Exiting createButton_action : " + "Unexpected error when creating Document", null); addFacesErrorMessage("Unexpected error when creating Document"); return null; } log.debug("Exiting createButton_action"); return "success"; } }
---------------------------------------------------------------------------------------------------- Stack Trace : Couldn't handle invocation directly within...StatelessRemoteProxyInvocationHandler ---------------------------------------------------------------------------------------------------- 2009-02-12 17:05:23,290 DEBUG [org.jboss.ejb3.proxy.handler.ProxyInvocationHandlerBase] (http-localhost%2F127.0.0.1-8080-1) Couldn't handle invocation directly within org.jboss.ejb3.proxy.handler.session.stateless.StatelessRemoteProxyInvocationHandler@3ce5d: Current invocation "public abstract com.xxxxxxxx.xxxx.entity.model.DocumentEntity com.xxxxxxxx.xxxx.ejb.intf.DocumentService.createEntity(com.xxxxxxxx.xxxx.entity.model.DocumentEntity) throws com.xxxxxxxx.xxxx.dao.exception.DAOException" is not eligible for direct handling by org.jboss.ejb3.proxy.handler.session.stateless.StatelessRemoteProxyInvocationHandler@3ce5d 2009-02-12 17:05:23,342 DEBUG [org.jboss.ejb3.proxy.invocation.InvokableContextStatefulRemoteProxyInvocationHack] (http-localhost%2F127.0.0.1-8080-1) Received invocation request to method com.xxxxxxxx.xxxx.ejb.intf.DocumentRemote: com.xxxxxxxx.xxxx.ejb.intf.DocumentService.createEntity(com.xxxxxxxx.xxxx.entity.model.DocumentEntity); using hash: 5676740933045534775 2009-02-12 17:05:24,247 DEBUG [org.jboss.ejb3.stateless.StatelessContainer] (http-localhost%2F127.0.0.1-8080-1) Received dynamic invocation for method with hash: 5676740933045534775 2009-02-12 17:05:25,134 ERROR [com.xxxxxxxx.xxxx.web.bean.AbstractDocumentPageBean] (http-localhost%2F127.0.0.1-8080-1) Exiting createButton_action : Unexpected error when creating Document