All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.geronimo.connector.AdminObjectWrapper Maven / Gradle / Ivy

There is a newer version: 10.0.0-M3
Show newest version
/**
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You 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.apache.geronimo.connector;

import java.util.Set; 

import javax.resource.spi.ResourceAdapterAssociation;
import javax.validation.ConstraintViolation; 
import javax.validation.ConstraintViolationException; 
import javax.validation.Validator; 
import javax.validation.ValidatorFactory; 


/**
 * Wrapper around AdminObject that manages the AdminObject lifecycle. 
 *
 * @version $Rev: 1005848 $ $Date: 2010-10-08 16:44:55 +0200 (Ven, 08 oct 2010) $
 */
public class AdminObjectWrapper {

    private final String adminObjectInterface;
    private final String adminObjectClass;
    protected ResourceAdapterWrapper resourceAdapterWrapper;
    
    protected Object adminObject;
    private final ValidatorFactory validatorFactory; 

    /**
     * Normal managed constructor.
     *
     * @param adminObjectInterface Interface the proxy will implement.
     * @param adminObjectClass Class of admin object to be wrapped.
     * @throws IllegalAccessException
     * @throws InstantiationException
     */
    public AdminObjectWrapper(final String adminObjectInterface,
                              final String adminObjectClass,
                              final ResourceAdapterWrapper resourceAdapterWrapper,
                              final ClassLoader cl,
                              final ValidatorFactory validatorFactory) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
        this.adminObjectInterface = adminObjectInterface;
        this.adminObjectClass = adminObjectClass;
        this.resourceAdapterWrapper = resourceAdapterWrapper;
        this.validatorFactory = validatorFactory; 
        Class clazz = cl.loadClass(adminObjectClass);
        adminObject = clazz.newInstance();
    }

    public String getAdminObjectInterface() {
        return adminObjectInterface;
    }

    /**
     * Returns class of wrapped AdminObject.
     * @return class of wrapped AdminObject
     */
    public String getAdminObjectClass() {
        return adminObjectClass;
    }


    /**
     * Starts the AdminObject.  This will validate the instance and register the object instance           
     * with its ResourceAdapter
     *
     * @throws Exception if the target failed to start; this will cause a transition to the failed state
     */
    public void doStart() throws Exception {
        // if we have a validator factory at this point, then validate 
        // the resource adaptor instance 
        if (validatorFactory != null) {
            Validator validator = validatorFactory.getValidator(); 
            
            Set generalSet = validator.validate(adminObject);
            if (!generalSet.isEmpty()) {
                throw new ConstraintViolationException("Constraint violation for AdminObject " + adminObjectClass, generalSet); 
            }
        }
        if (adminObject instanceof ResourceAdapterAssociation) {
            if (resourceAdapterWrapper == null) {
                throw new IllegalStateException("Admin object expects to be registered with a ResourceAdapter, but there is no ResourceAdapter");
            }
            resourceAdapterWrapper.registerResourceAdapterAssociation((ResourceAdapterAssociation) adminObject);
        }
    }

    /**
     * Stops the target.  This is a NOP for AdminObjects
     *
     * @throws Exception if the target failed to stop; this will cause a transition to the failed state
     */
    public void doStop() throws Exception {
    }

    /**
     * Fails the target.  This is a nop for an AdminObject. 
     */
    public void doFail() {
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy