Update of /cvsroot/openamf/openamf/src/java/org/openamf/invoker
In directory sc8-pr-cvs1:/tmp/cvs-serv9908/src/java/org/openamf/invoker
Added Files:
EJBServiceInvoker.java
Removed Files:
SLSBServiceInvoker.java
Log Message:
1) renamed SLSBServiceInvoker to EJBServiceInvoker
2) added support Stateful Session Beans and Entity Beans with single argument create methods
3) updated example openamf-config.xml to use EJBServiceInvoker
--- NEW FILE: EJBServiceInvoker.java ---
package org.openamf.invoker;
import java.lang.reflect.Method;
import java.rmi.RemoteException;
import javax.ejb.EJBHome;
import javax.ejb.EJBMetaData;
import javax.ejb.EJBObject;
import javax.ejb.Handle;
import javax.naming.InitialContext;
import javax.servlet.ServletContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.openamf.ServiceRequest;
public class EJBServiceInvoker extends JavaServiceInvoker {
private static Log log = LogFactory.getLog(EJBServiceInvoker.class);
private boolean persistService = false;
public EJBServiceInvoker(
ServiceRequest request,
ServletContext servletContex) {
super(request, servletContex);
}
public Object invokeService() throws ServiceInvocationException {
Object serviceResult = null;
try {
EJBObject ejb = null;
if (persistService) {
log.debug("Trying to get Handle from persistantObject");
Handle handle = (Handle)getPersistantServiceObject();
if (handle != null) {
log.debug("Got Handle from persistantObject");
ejb = handle.getEJBObject();
}
}
if (ejb == null) {
InitialContext context = new InitialContext();
EJBHome home = (EJBHome)context.lookup(request.getServiceName());
Method ejbCreateMethod =
home.getClass().getMethod("create", new Class[0]);
ejb =
(EJBObject) ejbCreateMethod.invoke(home, new Object[0]);
}
serviceResult =
invokeServiceMethod(
ejb,
ejb.getClass(),
request.getServiceMethodName(),
request.getParameters());
if (persistService) {
setPersistantServiceObject(ejb.getHandle());
}
} catch (Exception e) {
throw new ServiceInvocationException(request, e);
}
return serviceResult;
}
private boolean checkPersistService(EJBHome home) throws RemoteException {
boolean persistService;
EJBMetaData metaData = home.getEJBMetaData();
if (metaData.isSession()) {
if (metaData.isStatelessSession()) {
log.debug("Stateless Session Bean");
persistService = false;
} else {
log.debug("Stateful Session Bean");
persistService = true;
}
} else {
log.debug("Not Session Bean, assume Entity EJB");
persistService = true;
}
return persistService;
}
public boolean getPersistService() {
return persistService;
}
public boolean supports(ServiceRequest request) {
boolean supports = false;
try {
InitialContext context = new InitialContext();
EJBHome home = (EJBHome)context.lookup(request.getServiceName());
persistService = checkPersistService(home);
supports = true;
} catch (Exception e) {
}
return supports;
}
}
--- SLSBServiceInvoker.java DELETED ---
-------------------------------------------------------
This SF.net email is sponsored by: ObjectStore.
If flattening out C++ or Java code to make your application fit in a
relational database is painful, don't do it! Check out ObjectStore.
Now part of Progress Software. http://www.objectstore.net/sourceforge
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.