Search in sources :

Example 1 with ISessionClient

use of com.servoy.j2db.ISessionClient in project servoy-client by Servoy.

the class HeadlessClientFactoryInternal method createImportHookClient.

public static ISessionClient createImportHookClient(final Solution importHookModule, final IXMLImportUserChannel channel) throws Exception {
    final String[] loadException = new String[1];
    // assuming no login and no method args for import hooks
    SessionClient sc = new SessionClient(null, null, null, null, null, importHookModule.getName()) {

        @Override
        protected IActiveSolutionHandler createActiveSolutionHandler() {
            IApplicationServer as = ApplicationServerRegistry.getService(IApplicationServer.class);
            return new LocalActiveSolutionHandler(as, this) {

                @Override
                protected Solution loadSolution(RootObjectMetaData solutionDef) throws RemoteException, RepositoryException {
                    // grab the latest version (-1) not the active one, because the hook was not yet activated.
                    return (Solution) ((IDeveloperRepository) getRepository()).getRootObject(solutionDef.getRootObjectId(), -1);
                }
            };
        }

        @Override
        protected IExecutingEnviroment createScriptEngine() {
            return new ScriptEngine(this) {

                @Override
                public Object executeFunction(Function f, Scriptable scope, Scriptable thisObject, Object[] args, boolean focusEvent, boolean throwException) throws Exception {
                    // always throw exception
                    return super.executeFunction(f, scope, thisObject, args, focusEvent, true);
                }
            };
        }

        @Override
        public void reportError(String msg, Object detail) {
            super.reportError(msg, detail);
            loadException[0] = msg;
            if (detail instanceof JavaScriptException && ((JavaScriptException) detail).getValue() instanceof Scriptable) {
                loadException[0] += " " + Utils.getScriptableString((Scriptable) ((JavaScriptException) detail).getValue());
            }
            if (detail instanceof Exception) {
                loadException[0] += " " + ((Exception) detail).getMessage();
            }
        }
    };
    sc.setUseLoginSolution(false);
    String userName = channel.getImporterUsername();
    if (userName != null) {
        // let the import hook client run with credentials from the logged in user from the admin page.
        sc.getClientInfo().setUserUid(ApplicationServerRegistry.get().getUserManager().getUserUID(sc.getClientID(), userName));
        sc.getClientInfo().setUserName(userName);
    }
    sc.setOutputChannel(channel);
    sc.loadSolution(importHookModule.getName());
    if (loadException[0] != null) {
        sc.shutDown(true);
        throw new RepositoryException(loadException[0]);
    }
    return sc;
}
Also used : RootObjectMetaData(com.servoy.j2db.persistence.RootObjectMetaData) ISessionClient(com.servoy.j2db.ISessionClient) IApplicationServer(com.servoy.j2db.server.shared.IApplicationServer) RepositoryException(com.servoy.j2db.persistence.RepositoryException) LocalActiveSolutionHandler(com.servoy.j2db.LocalActiveSolutionHandler) Scriptable(org.mozilla.javascript.Scriptable) ScriptEngine(com.servoy.j2db.scripting.ScriptEngine) JavaScriptException(org.mozilla.javascript.JavaScriptException) RemoteException(java.rmi.RemoteException) RepositoryException(com.servoy.j2db.persistence.RepositoryException) JavaScriptException(org.mozilla.javascript.JavaScriptException) Function(org.mozilla.javascript.Function) Solution(com.servoy.j2db.persistence.Solution)

Example 2 with ISessionClient

use of com.servoy.j2db.ISessionClient in project servoy-client by Servoy.

the class HeadlessClientFactoryInternal method createSessionBean.

public static ISessionClient createSessionBean(final ServletRequest req, final String solutionname, final String username, final String password, final Object[] solutionOpenMethodArgs) throws Exception {
    final ISessionClient[] sc = { null };
    final Exception[] exception = { null };
    Runnable createSessionBeanRunner = new Runnable() {

        public void run() {
            try {
                IApplicationServerSingleton as = ApplicationServerRegistry.get();
                boolean nodebug = false;
                Object[] openArgs = solutionOpenMethodArgs;
                if (solutionOpenMethodArgs != null && solutionOpenMethodArgs.length != 0 && "nodebug".equals(solutionOpenMethodArgs[solutionOpenMethodArgs.length - 1])) {
                    nodebug = true;
                    openArgs = Utils.arraySub(solutionOpenMethodArgs, 0, solutionOpenMethodArgs.length - 1);
                }
                // When last entry in solutionOpenMethodArgs in "nodebug" a non-debugging client is created.
                if (as.isDeveloperStartup() && !nodebug) {
                    sc[0] = as.getDebugClientHandler().createDebugHeadlessClient(req, username, password, null, openArgs, solutionname);
                } else {
                    sc[0] = new HeadlessClient(req, username, password, null, openArgs, solutionname);
                }
                sc[0].setUseLoginSolution(false);
                sc[0].loadSolution(solutionname);
            } catch (Exception e) {
                exception[0] = e;
                if (sc[0] != null) {
                    try {
                        sc[0].shutDown(true);
                    } catch (Exception ex) {
                        Debug.error(ex);
                    }
                }
            }
        }
    };
    if (Context.getCurrentContext() == null) {
        createSessionBeanRunner.run();
    } else {
        // we are running from a javascript thread, probably developer or webclient, create the bean in a
        // separate thread so that a new context will be created
        // $NON-NLS-1$
        Thread createSessionBeanThread = new Thread(createSessionBeanRunner, "createSessionBean");
        createSessionBeanThread.start();
        createSessionBeanThread.join();
    }
    if (exception[0] != null) {
        throw exception[0];
    }
    return sc[0];
}
Also used : IApplicationServerSingleton(com.servoy.j2db.server.shared.IApplicationServerSingleton) ISessionClient(com.servoy.j2db.ISessionClient) JavaScriptException(org.mozilla.javascript.JavaScriptException) RemoteException(java.rmi.RemoteException) RepositoryException(com.servoy.j2db.persistence.RepositoryException)

Aggregations

ISessionClient (com.servoy.j2db.ISessionClient)2 RepositoryException (com.servoy.j2db.persistence.RepositoryException)2 RemoteException (java.rmi.RemoteException)2 JavaScriptException (org.mozilla.javascript.JavaScriptException)2 LocalActiveSolutionHandler (com.servoy.j2db.LocalActiveSolutionHandler)1 RootObjectMetaData (com.servoy.j2db.persistence.RootObjectMetaData)1 Solution (com.servoy.j2db.persistence.Solution)1 ScriptEngine (com.servoy.j2db.scripting.ScriptEngine)1 IApplicationServer (com.servoy.j2db.server.shared.IApplicationServer)1 IApplicationServerSingleton (com.servoy.j2db.server.shared.IApplicationServerSingleton)1 Function (org.mozilla.javascript.Function)1 Scriptable (org.mozilla.javascript.Scriptable)1