Package org.drools.guvnor.server.util

Source Code of org.drools.guvnor.server.util.TestEnvironmentSessionHelper

/*
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.drools.guvnor.server.util;

import org.drools.repository.JCRRepositoryConfigurator;
import org.drools.repository.RepositorySessionUtil;
import org.drools.repository.RulesRepositoryAdministrator;
import org.drools.repository.RulesRepositoryConfigurator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.SimpleCredentials;
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.Properties;

/**
* This is only to be used for testing, eg in hosted mode, or unit tests.
* This is deliberately in the src/main path.
*/
public class TestEnvironmentSessionHelper {

    private static final Logger log = LoggerFactory.getLogger(TestEnvironmentSessionHelper.class);

    private static Repository repository;

    public static synchronized Session getSession() {
        return getSession(true);
    }

    public static synchronized Session getSession(boolean erase) {
        if (repository == null) {
            try {

                if (erase) {
                    File repoDir = new File("repository");
                    log.info("DELETE test repo dir: " + repoDir.getAbsolutePath());
                    RepositorySessionUtil.deleteDir(repoDir);
                    log.info("TEST repo dir deleted.");
                }

                RulesRepositoryConfigurator config = RulesRepositoryConfigurator.getInstance(null);
                String home = System.getProperty("guvnor.repository.dir");
                Properties properties = new Properties();
                if (home != null) {
                    properties.setProperty(JCRRepositoryConfigurator.REPOSITORY_ROOT_DIRECTORY,
                            home);
                }
                repository = config.getJCRRepository();

                //-->Workaround for lock problems
                int retries = 3;
                Session testSession = null;
                while (retries > 0) {
                    try {
                        testSession = repository.login(new SimpleCredentials("alan_parsons",
                                "password".toCharArray()));

                        retries = 0;
                    } catch (RepositoryException re) {
                        System.err.println("Failed to get the repository session: Retrying... ");
                        re.printStackTrace();

                        System.err.println("Attemptng to shutdown repository... ");
                        shutdown();
                        repository = config.getJCRRepository();

                        retries--;
                        try {
                            Thread.sleep(500);
                        } catch (InterruptedException ie) {
                        }
                    }
                }
                if (testSession == null) {
                    throw new IllegalStateException("Unable to get Repository Session. Refer to previous messages for details.");
                }
                //<--

                RulesRepositoryAdministrator admin = new RulesRepositoryAdministrator(testSession);
                if (erase && admin.isRepositoryInitialized()) {
                    admin.clearRulesRepository();
                }
                config.setupRepository(testSession);
                File file = File.createTempFile("pete",
                        "txt");
                file.deleteOnExit();
                PrintWriter out = new PrintWriter(new FileOutputStream(file));
                out.close();
                return testSession;
            } catch (Exception e) {
                System.err.println("Failed to get the repository session: ");
                e.printStackTrace();
                throw new IllegalStateException(e);
            }
        } else {
            try {
                return repository.login(new SimpleCredentials("alan_parsons",
                        "password".toCharArray()));
            } catch (Exception e) {
                throw new IllegalStateException(e);
            }
        }
    }

    /**
     * Uses the given user name.
     */
    public static synchronized Session getSessionFor(String userName) throws RepositoryException {
        return repository.login(new SimpleCredentials(userName,
                "password".toCharArray()));
    }

    public static synchronized void shutdown() {
        try {
            RulesRepositoryConfigurator.getInstance(null).shutdown();
        } catch (Exception e) {
            log.error("Could not shut down repository.", e);
        }
        repository = null;
    }

}
TOP

Related Classes of org.drools.guvnor.server.util.TestEnvironmentSessionHelper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.