// Setup the client proxy replacement to replace
// the proxies with the IntraVM proxy implementations
EJBHomeProxyHandle.resolver.set(SERVER_SIDE_RESOLVER);
EJBObjectProxyHandle.resolver.set(SERVER_SIDE_RESOLVER);
final EJBRequest req = new EJBRequest();
byte version = req.getVersion();
final EJBResponse res = new EJBResponse();
res.start(EJBResponse.Time.TOTAL);
try {
req.readExternal(in);
} catch (Throwable t) {
replyWithFatalError(version, out, t, "Bad request");
return;
}
final SecurityService securityService = SystemInstance.get().getComponent(SecurityService.class);
try {
final Object clientIdentity = req.getClientIdentity();
if (clientIdentity != null) {//noinspection unchecked
securityService.associate(clientIdentity);
}
} catch (Throwable t) {
replyWithFatalError(version, out, t, "Client identity is not valid - " + req);
return;
}
final CallContext call;
final BeanContext di;
try {
di = this.daemon.getDeployment(req);
} catch (RemoteException e) {
replyWithFatalError(version, out, e, "No such deployment");
return;
} catch (Throwable t) {
replyWithFatalError(version, out, t, "Unkown error occured while retrieving deployment");
return;
}
// Need to set this for deserialization of the body
final ClassLoader classLoader = di.getBeanClass().getClassLoader();
Thread.currentThread().setContextClassLoader(classLoader);
try {
res.start(EJBResponse.Time.DESERIALIZATION);
req.getBody().readExternal(in);
version = req.getVersion();
res.stop(EJBResponse.Time.DESERIALIZATION);
} catch (Throwable t) {
replyWithFatalError(version, out, t, "Error caught during request processing");
return;
}
try {
call = CallContext.getCallContext();
call.setEJBRequest(req);
call.setBeanContext(di);
} catch (Throwable t) {
replyWithFatalError(version, out, t, "Unable to set the thread context for this request");
return;
}
res.start(EJBResponse.Time.CONTAINER);
boolean respond = true;
try {
switch (req.getRequestMethod()) {
// Remote interface methods
case EJB_OBJECT_BUSINESS_METHOD:
doEjbObject_BUSINESS_METHOD(req, res);
updateServer(req, res);
break;