Package org.drools.repository

Source Code of org.drools.repository.RepositorySessionUtil

/**
* 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.repository;

import java.io.File;
import javax.jcr.LoginException;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.SimpleCredentials;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* This is a utility to simulate session behavior for the test suite.
*
* @author Michael Neale
*/
public class RepositorySessionUtil {

    private static ThreadLocal<RulesRepository> repo = new ThreadLocal<RulesRepository>();
    private static Repository multiThreadedRepository;
    private static Session session = null;
    private static final Logger log = LoggerFactory.getLogger(RepositorySessionUtil.class);

    // private static final Logger log = Logger.getLogger( RepositorySessionUtil.class );

    public static boolean deleteDir( File dir ) {

        if (dir.isDirectory()) {
            String[] children = dir.list();
            for (int i = 0; i < children.length; i++) {
                if (!deleteDir(new File(dir, children[i]))) {
                    return false;
                }
            }
        }

        // The directory is now empty so delete it
        return dir.delete();
    }

    public static RulesRepository getRepository() throws RulesRepositoryException {
        RulesRepository repoInstance = repo.get();
        if (repoInstance == null) {

            log.info("Creating a new Repository Instance..");

            File dir = new File("repository");
            log.info("DELETING test repo: " + dir.getAbsolutePath());
            deleteDir(dir);
            log.info("TEST repo was deleted.");

            try {
              //configurator = new JackrabbitRepository
              // create a repo instance (startup)
           
              multiThreadedRepository = RulesRepositoryConfigurator.getInstance(null).getJCRRepository();
 
              // create a session
              //Session session;
           
                session = multiThreadedRepository.login(new SimpleCredentials("alan_parsons", "password".toCharArray()));
                RulesRepositoryAdministrator admin = new RulesRepositoryAdministrator(session);

                // clear out and setup
                if (admin.isRepositoryInitialized()) {
                    admin.clearRulesRepository();
                }
                RulesRepositoryConfigurator.getInstance(null).setupRepository(session);
                repoInstance = new RulesRepository(session);

                multiThreadedRepository.login(new SimpleCredentials("ADMINISTRATOR", "password".toCharArray()));
                // loonie hack
                // DroolsRepositoryAccessManager.adminThreadlocal.set( adminSession );
                repo.set(repoInstance);
            } catch (Exception e) {
                throw new RulesRepositoryException(e);
            }
        }

        return repoInstance;
    }

    public static synchronized RulesRepository getMultiThreadedRepository() throws RulesRepositoryException {
        if (multiThreadedRepository == null) {
          
            File dir = new File("repository");
            log.info("DELETING test repo: " + dir.getAbsolutePath());
            deleteDir(dir);
            log.info("TEST repo was deleted.");

            try {
              // create a repo instance (startup)
              multiThreadedRepository = RulesRepositoryConfigurator.getInstance(null).getJCRRepository();

                // create a session to config repo
                Session session = multiThreadedRepository.login(new SimpleCredentials("alan_parsons", "password".toCharArray()));
                RulesRepositoryAdministrator admin = new RulesRepositoryAdministrator(session);

                // clear out and setup
                if (admin.isRepositoryInitialized()) {
                    admin.clearRulesRepository();
                }
                RulesRepositoryConfigurator.getInstance(null).setupRepository( session);
            } catch (Exception e) {
                throw new RulesRepositoryException(e);
            }
        }

        // associate this repo instance with thread specific sessions every time.
        Session session;
        try {
            session = multiThreadedRepository.login(new SimpleCredentials("alan_parsons", "password".toCharArray()));
            RulesRepository threadLocalRepo = new RulesRepository(session);
            return threadLocalRepo;
        } catch (LoginException e) {
            e.printStackTrace();
        } catch (RepositoryException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    public static void shutdown() throws RepositoryException {
      RulesRepositoryConfigurator.getInstance(null).shutdown();
        repo.set(null);
        multiThreadedRepository = null;
    }

}
TOP

Related Classes of org.drools.repository.RepositorySessionUtil

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.