001 /** 002 * 003 * Copyright 2003-2005 The Apache Software Foundation 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 package org.apache.geronimo.connector; 019 020 import javax.resource.ResourceException; 021 import javax.resource.spi.ActivationSpec; 022 import javax.resource.spi.BootstrapContext; 023 import javax.resource.spi.ResourceAdapter; 024 import javax.resource.spi.ResourceAdapterAssociation; 025 import javax.resource.spi.ResourceAdapterInternalException; 026 import javax.resource.spi.endpoint.MessageEndpointFactory; 027 import javax.transaction.xa.XAResource; 028 029 /** 030 * Dynamic GBean wrapper around a ResourceAdapter object, exposing the config-properties as 031 * GBean attributes. 032 * 033 * @version $Rev: 430508 $ $Date: 2006-08-10 12:56:47 -0700 (Thu, 10 Aug 2006) $ 034 */ 035 public class ResourceAdapterWrapper implements ResourceAdapter { 036 037 private final String resourceAdapterClass; 038 039 private final BootstrapContext bootstrapContext; 040 041 protected final ResourceAdapter resourceAdapter; 042 043 044 /** 045 * default constructor for enhancement proxy endpoint 046 */ 047 public ResourceAdapterWrapper() { 048 this.resourceAdapterClass = null; 049 this.bootstrapContext = null; 050 this.resourceAdapter = null; 051 } 052 053 public ResourceAdapterWrapper(String resourceAdapterClass, 054 BootstrapContext bootstrapContext, 055 ClassLoader cl) throws InstantiationException, IllegalAccessException, ClassNotFoundException { 056 this.resourceAdapterClass = resourceAdapterClass; 057 this.bootstrapContext = bootstrapContext; 058 Class clazz = cl.loadClass(resourceAdapterClass); 059 resourceAdapter = (ResourceAdapter) clazz.newInstance(); 060 } 061 062 public ResourceAdapterWrapper(ResourceAdapter resourceAdapter, BootstrapContext bootstrapContext) { 063 this.resourceAdapterClass = resourceAdapter.getClass().getName(); 064 this.bootstrapContext = bootstrapContext; 065 this.resourceAdapter = resourceAdapter; 066 } 067 068 public String getResourceAdapterClass() { 069 return resourceAdapterClass; 070 } 071 072 public void registerResourceAdapterAssociation(final ResourceAdapterAssociation resourceAdapterAssociation) throws ResourceException { 073 resourceAdapterAssociation.setResourceAdapter(resourceAdapter); 074 } 075 076 public void start(BootstrapContext ctx) throws ResourceAdapterInternalException { 077 throw new IllegalStateException("Don't call this"); 078 } 079 080 public void stop() { 081 throw new IllegalStateException("Don't call this"); 082 } 083 084 //endpoint handling 085 public void endpointActivation(final MessageEndpointFactory messageEndpointFactory, final ActivationSpec activationSpec) throws ResourceException { 086 resourceAdapter.endpointActivation(messageEndpointFactory, activationSpec); 087 } 088 089 public void endpointDeactivation(final MessageEndpointFactory messageEndpointFactory, final ActivationSpec activationSpec) { 090 resourceAdapter.endpointDeactivation(messageEndpointFactory, activationSpec); 091 } 092 093 public XAResource[] getXAResources(ActivationSpec[] specs) throws ResourceException { 094 return resourceAdapter.getXAResources(specs); 095 } 096 097 public void doStart() throws Exception { 098 resourceAdapter.start(bootstrapContext); 099 } 100 101 public void doStop() { 102 resourceAdapter.stop(); 103 } 104 105 public void doFail() { 106 resourceAdapter.stop(); 107 } 108 109 }