⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 coordservice.java

📁 一个完整的XACML工程,学习XACML技术的好例子!
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
* Copyright (c) 2006, University of Kent
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without 
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this 
* list of conditions and the following disclaimer.
* 
* Redistributions in binary form must reproduce the above copyright notice, 
* this list of conditions and the following disclaimer in the documentation 
* and/or other materials provided with the distribution. 
*
* 1. Neither the name of the University of Kent nor the names of its 
* contributors may be used to endorse or promote products derived from this 
* software without specific prior written permission. 
*
* 2. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS  
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
* PURPOSE ARE DISCLAIMED. 
*
* 3. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
* POSSIBILITY OF SUCH DAMAGE.
*
* 4. YOU AGREE THAT THE EXCLUSIONS IN PARAGRAPHS 2 AND 3 ABOVE ARE REASONABLE
* IN THE CIRCUMSTANCES.  IN PARTICULAR, YOU ACKNOWLEDGE (1) THAT THIS
* SOFTWARE HAS BEEN MADE AVAILABLE TO YOU FREE OF CHARGE, (2) THAT THIS
* SOFTWARE IS NOT "PRODUCT" QUALITY, BUT HAS BEEN PRODUCED BY A RESEARCH
* GROUP WHO DESIRE TO MAKE THIS SOFTWARE FREELY AVAILABLE TO PEOPLE WHO WISH
* TO USE IT, AND (3) THAT BECAUSE THIS SOFTWARE IS NOT OF "PRODUCT" QUALITY
* IT IS INEVITABLE THAT THERE WILL BE BUGS AND ERRORS, AND POSSIBLY MORE
* SERIOUS FAULTS, IN THIS SOFTWARE.
*
* 5. This license is governed, except to the extent that local laws
* necessarily apply, by the laws of England and Wales.
*/
package org.globus.services.core.coord.impl;

import java.rmi.RemoteException;
import org.w3c.dom.Element;
import org.globus.wsrf.Resource;
import org.globus.wsrf.ResourceProperties;
import org.globus.wsrf.ResourceProperty;
import org.globus.wsrf.ResourcePropertySet;
import org.globus.wsrf.impl.ReflectionResourceProperty;
import org.globus.wsrf.impl.SimpleResourcePropertySet;
import org.globus.stubs.CoordService_instance.*;
import uk.ac.kent.dpa.coord.database.CoordinationHandler;
import uk.ac.kent.dpa.coord.database.CoordDatabaseException;
import uk.ac.kent.dpa.obligation.engine.*;
import java.util.Properties;
import java.io.*;
import ke.files.*;
import java.util.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class CoordService implements Resource, ResourceProperties {
    
    private static Log logger = LogFactory.getLog(CoordService.class.getName());
    private ResourcePropertySet propSet;
    private String config;
    private String cadt;
    private ArrayList handlers;
    private ArrayList readLocks;
    private ArrayList writeLocks;

	public CoordService() throws RemoteException {
            this.handlers = new ArrayList();
            this.readLocks = new ArrayList();
            this.writeLocks = new ArrayList();
            Properties props = new Properties();
            String fileName = "/home/WSRF_Coordination_Config";
            Config config = new Config();
            logger.info("to read WSRF coordination configuration from "+fileName);
            
            this.propSet = new SimpleResourcePropertySet(
                            CoordQNames.RESOURCE_PROPERTIES);

            try {
                InputStream in = new FileInputStream(config.getURL(fileName));
                props.load(in);
                in.close();
                String cfg = props.getProperty("dbConfigurationFileName");
                String cat = props.getProperty("CADTableName");
                
                ResourceProperty configRP = new ReflectionResourceProperty(
                                CoordQNames.RP_CONFIG, "Config", this);
                this.propSet.add(configRP);
                setConfig(cfg);

                ResourceProperty cadtRP = new ReflectionResourceProperty(
                                CoordQNames.RP_CADT, "Cadt", this);
                this.propSet.add(cadtRP);
                setCadt(cat);
            } catch (Exception e) {
                    throw new RuntimeException(e.getMessage());
            }
	}
        
	public String getCadt() {
		return cadt;
	}
        
        public void setCadt(String cadt) {
		this.cadt = cadt;
	}

	public String getConfig() {
		return config;
	}
        
	public void setConfig(String config) {
		this.config = config;
	}
        
	/* Remotely-accessible operations */ 
        
        
        public String getConfigRP(GetConfigRP params) {
            return this.config;
	}
      
	public SetConfigRPResponse setConfigRP(String config) {
            this.config = config;
            return new SetConfigRPResponse();
	}
        
	public String getCadtRP(GetCadtRP params) {
            return this.cadt;
	}
        
	public SetCadtRPResponse setCadtRP(String cadt) {
            this.cadt = cadt;
            return new SetCadtRPResponse();
	}
        
        public UnlockResponse unlock(String name) throws RemoteException {
            /*
             *This is reserved for API version
            CoordinationHandler handler = this.getHandler(name);
            try {
                if (handler.unlockCoordinationData())
                    return new UnlockResponse();
                else throw new RemoteException("failure to unlock");
            } catch (PEPException pe) {
                throw new RemoteException("failure to unlock "+pe);
            } */
            this.readLocks.remove(name);
            this.writeLocks.remove(name);
            logger.debug("release lock "+name);
            return new UnlockResponse();
        }

        public LockAllResponse lockAll(LockAll params) throws RemoteException {
            String dbURL = params.getDbURL();
            String param = params.getTables();
            int index = param.indexOf(" ");
            String attribute = null;
            if (index>0) {
                attribute = param.substring(0,index);
            } else throw new RemoteException("invalid lock parameters");
            //CoordinationHandler handler = this.getHandler(dbURL,attribute);
            ArrayList localR = this.convert(param,"READ");
            ArrayList localW = this.convert(param,"WRITE");
            for (Iterator i=localW.iterator();i.hasNext();) {
                Object lock = i.next();
                while (this.readLocks.contains(lock));
                while (this.writeLocks.contains(lock));
                if (this.writeLocks.contains(lock)) continue;
                this.writeLocks.add(lock);
                logger.debug(" write lock "+(String)lock);
            }
            for (Iterator i=localR.iterator();i.hasNext();) {
                Object lock = i.next();
                while (this.writeLocks.contains(lock));
                if (this.readLocks.contains(lock)) continue;
                this.readLocks.add(lock);
                logger.debug(" read lock "+(String)lock);
            }
            /*
             *this is reserved for API version
             
             try {
                if (handler.lockAllCoordinationData(param))
                    return new LockAllResponse();
                else throw new RemoteException("failure to lock all");
            } catch (PEPException pe) {
                throw new RemoteException("failure to lock all"+pe);
            } */
            return new LockAllResponse();
        }
        // this is for API version
        private String convert(String param,CoordinationHandler handler) throws RemoteException {
            int len = param.length();
            int index1 = -1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -