Search in sources :

Example 1 with RequestType

use of org.apache.openejb.client.RequestType in project tomee by apache.

the class AdminDaemon method service.

@Override
public void service(Socket socket) throws ServiceException, IOException {
    InputStream in = null;
    try {
        in = socket.getInputStream();
        byte requestTypeByte = (byte) in.read();
        try {
            RequestType requestType = RequestType.valueOf(requestTypeByte);
            switch(requestType) {
                case NOP_REQUEST:
                    return;
                case STOP_REQUEST_Quit:
                case STOP_REQUEST_quit:
                case STOP_REQUEST_Stop:
                case STOP_REQUEST_stop:
                    Server server = SystemInstance.get().getComponent(Server.class);
                    if (null != server) {
                        server.stop();
                    }
                    break;
                default:
                    //If this turns up in the logs then it is time to take action
                    Logger.getInstance(LogCategory.OPENEJB_SERVER, AdminDaemon.class).warning("Invalid Server Socket request: " + requestType);
                    break;
            }
        } catch (IllegalArgumentException iae) {
            Logger.getInstance(LogCategory.OPENEJB_SERVER, AdminDaemon.class).warning("Invalid Server Socket request: " + requestTypeByte);
        }
    } catch (Throwable e) {
        Logger.getInstance(LogCategory.OPENEJB_SERVER, AdminDaemon.class).warning("Server Socket request failed", e);
    } finally {
        if (null != in) {
            try {
                in.close();
            } catch (Throwable t) {
            //Ignore
            }
        }
        if (null != socket) {
            try {
                socket.close();
            } catch (Throwable t) {
            //Ignore
            }
        }
    }
}
Also used : Server(org.apache.openejb.server.Server) RequestType(org.apache.openejb.client.RequestType)

Example 2 with RequestType

use of org.apache.openejb.client.RequestType in project tomee by apache.

the class EjbDaemon method service.

public void service(final InputStream rawIn, final OutputStream rawOut) throws IOException {
    final ProtocolMetaData clientProtocol = new ProtocolMetaData();
    ObjectInputStream ois = null;
    ObjectOutputStream oos = null;
    RequestType requestType = null;
    byte requestTypeByte = RequestType.NOP_REQUEST.getCode();
    try {
        final RequestInfos.RequestInfo info = RequestInfos.info();
        info.setInputStream(countStreams ? new CountingInputStream(rawIn) : rawIn);
        // Read client Protocol Version
        final InputStream cis = info.getInputStream();
        clientProtocol.readExternal(cis);
        ois = new EjbObjectInputStream(cis);
        // Read ServerMetaData
        final ServerMetaData serverMetaData = new ServerMetaData();
        serverMetaData.readExternal(ois);
        ClientObjectFactory.serverMetaData.set(serverMetaData);
        // Read request type
        requestTypeByte = ois.readByte();
        requestType = RequestType.valueOf(requestTypeByte);
        if (requestType == RequestType.NOP_REQUEST) {
            return;
        }
        ClusterResponse clusterResponse = null;
        if (requestType == RequestType.CLUSTER_REQUEST) {
            clusterResponse = clusterHandler.processRequest(ois, clientProtocol);
            //Check for immediate failure
            final Throwable failure = clusterResponse.getFailure();
            if (null != clusterResponse && null != failure) {
                clusterHandler.getLogger().debug("Failed to write to ClusterResponse", failure);
                try {
                    info.setOutputStream(countStreams ? new CountingOutputStream(rawOut) : rawOut);
                    oos = new ObjectOutputStream(info.getOutputStream());
                    clusterResponse.setMetaData(clientProtocol);
                    clusterResponse.writeExternal(oos);
                    oos.flush();
                } catch (IOException ie) {
                    final String m = "Failed to write to ClusterResponse: " + ie.getMessage();
                    clusterHandler.getLogger().error(m, ie);
                    throw Exceptions.newIOException(m, ie);
                }
                throw failure;
            }
        }
        requestTypeByte = ois.readByte();
        requestType = RequestType.valueOf(requestTypeByte);
        if (requestType == RequestType.NOP_REQUEST) {
            return;
        }
        // Exceptions should not be thrown from these methods
        // They should handle their own exceptions and clean
        // things up with the client accordingly.
        final Response response;
        switch(requestType) {
            case EJB_REQUEST:
                response = processEjbRequest(ois, clientProtocol);
                break;
            case JNDI_REQUEST:
                response = processJndiRequest(ois, clientProtocol);
                break;
            case AUTH_REQUEST:
                response = processAuthRequest(ois, clientProtocol);
                break;
            case LOGOUT_REQUEST:
                response = processLogoutRequest(ois, clientProtocol);
                break;
            default:
                logger.error("\"" + requestType + " " + clientProtocol.getSpec() + "\" FAIL \"Unknown request type " + requestType);
                return;
        }
        try {
            info.setOutputStream(countStreams ? new CountingOutputStream(rawOut) : rawOut);
            final OutputStream cos = info.getOutputStream();
            //Let client know we are using the requested protocol to respond
            clientProtocol.writeExternal(cos);
            cos.flush();
            oos = new ObjectOutputStream(cos);
            clusterHandler.processResponse(clusterResponse, oos, clientProtocol);
            oos.flush();
        } finally {
            switch(requestType) {
                case EJB_REQUEST:
                    processEjbResponse(response, oos, clientProtocol);
                    break;
                case JNDI_REQUEST:
                    processJndiResponse(response, oos, clientProtocol);
                    break;
                case AUTH_REQUEST:
                    processAuthResponse(response, oos, clientProtocol);
                    break;
                case LOGOUT_REQUEST:
                    processLogoutResponse(response, oos, clientProtocol);
                    break;
                default:
                    //Should never get here...
                    logger.error("\"" + requestType + " " + clientProtocol.getSpec() + "\" FAIL \"Unknown response type " + requestType);
            }
        }
    } catch (IllegalArgumentException iae) {
        final String msg = "\"" + clientProtocol.getSpec() + "\" FAIL \"Unknown request type " + requestTypeByte;
        if (logger.isDebugEnabled()) {
            logger.debug(msg, iae);
        } else {
            logger.warning(msg + " - Debug for StackTrace");
        }
    } catch (SecurityException e) {
        final String msg = "\"" + requestType + " " + clientProtocol.getSpec() + "\" FAIL \"Security error - " + e.getMessage() + "\"";
        if (logger.isDebugEnabled()) {
            logger.debug(msg, e);
        } else {
            logger.warning(msg + " - Debug for StackTrace");
        }
    } catch (Throwable e) {
        final String msg = "\"" + requestType + " " + clientProtocol.getSpec() + "\" FAIL \"Unexpected error - " + e.getMessage() + "\"";
        if (logger.isDebugEnabled()) {
            logger.debug(msg, e);
        } else {
            logger.warning(msg + " - Debug for StackTrace");
        }
    } finally {
        try {
            ClientObjectFactory.serverMetaData.remove();
        } finally {
            if (null != oos) {
                try {
                    oos.flush();
                } catch (Throwable e) {
                //Ignore
                }
                try {
                    oos.close();
                } catch (Throwable e) {
                //Ignore
                }
            }
            if (null != ois) {
                try {
                    ois.close();
                } catch (Throwable e) {
                //Ignore
                }
            }
            // enforced in case of exception
            securityService.disassociate();
        }
    }
}
Also used : GZIPInputStream(java.util.zip.GZIPInputStream) BufferedInputStream(java.io.BufferedInputStream) ObjectInputStream(java.io.ObjectInputStream) EjbObjectInputStream(org.apache.openejb.client.EjbObjectInputStream) CountingInputStream(org.apache.openejb.server.stream.CountingInputStream) InputStream(java.io.InputStream) FlushableGZIPOutputStream(org.apache.openejb.client.FlushableGZIPOutputStream) BufferedOutputStream(java.io.BufferedOutputStream) ObjectOutputStream(java.io.ObjectOutputStream) OutputStream(java.io.OutputStream) CountingOutputStream(org.apache.openejb.server.stream.CountingOutputStream) CountingInputStream(org.apache.openejb.server.stream.CountingInputStream) ClusterResponse(org.apache.openejb.client.ClusterResponse) IOException(java.io.IOException) ObjectOutputStream(java.io.ObjectOutputStream) Response(org.apache.openejb.client.Response) ClusterResponse(org.apache.openejb.client.ClusterResponse) CountingOutputStream(org.apache.openejb.server.stream.CountingOutputStream) RequestInfos(org.apache.openejb.server.context.RequestInfos) EjbObjectInputStream(org.apache.openejb.client.EjbObjectInputStream) ProtocolMetaData(org.apache.openejb.client.ProtocolMetaData) ServerMetaData(org.apache.openejb.client.ServerMetaData) ObjectInputStream(java.io.ObjectInputStream) EjbObjectInputStream(org.apache.openejb.client.EjbObjectInputStream) RequestType(org.apache.openejb.client.RequestType)

Aggregations

RequestType (org.apache.openejb.client.RequestType)2 BufferedInputStream (java.io.BufferedInputStream)1 BufferedOutputStream (java.io.BufferedOutputStream)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 ObjectInputStream (java.io.ObjectInputStream)1 ObjectOutputStream (java.io.ObjectOutputStream)1 OutputStream (java.io.OutputStream)1 GZIPInputStream (java.util.zip.GZIPInputStream)1 ClusterResponse (org.apache.openejb.client.ClusterResponse)1 EjbObjectInputStream (org.apache.openejb.client.EjbObjectInputStream)1 FlushableGZIPOutputStream (org.apache.openejb.client.FlushableGZIPOutputStream)1 ProtocolMetaData (org.apache.openejb.client.ProtocolMetaData)1 Response (org.apache.openejb.client.Response)1 ServerMetaData (org.apache.openejb.client.ServerMetaData)1 Server (org.apache.openejb.server.Server)1 RequestInfos (org.apache.openejb.server.context.RequestInfos)1 CountingInputStream (org.apache.openejb.server.stream.CountingInputStream)1 CountingOutputStream (org.apache.openejb.server.stream.CountingOutputStream)1