/* * Copyright 2008 Niclas Hedhman. * * 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.qi4j.library.jini.importer; import org.qi4j.api.common.Optional; import org.qi4j.api.injection.scope.Service; import org.qi4j.api.service.ImportedServiceDescriptor; import org.qi4j.api.service.ServiceImporter; import org.qi4j.api.service.ServiceImporterException; import java.io.IOException; import java.lang.reflect.Proxy; public class JiniImporter implements ServiceImporter { @Optional @Service private JiniStatusService statusService; /** * Import a service from Jini by looking creating a Proxy which holds the Lookup cache to the wanted Jini service. * * @param serviceDescriptor The service descriptor. * @return a service instance * @throws ServiceImporterException */ public Object importService( ImportedServiceDescriptor serviceDescriptor ) throws ServiceImporterException { final Class<?> serviceType = serviceDescriptor.type(); JiniProxyHandler handler; try { handler = new JiniProxyHandler( serviceType, statusService ); } catch( IOException e ) { throw new ServiceImporterException( "Unable to establish network.", e ); } Class[] type = new Class[]{ serviceType }; return Proxy.newProxyInstance( JiniImporter.class.getClassLoader(), type, handler ); } public boolean isActive( Object instance ) { JiniProxyHandler jiniHandler = (JiniProxyHandler) Proxy.getInvocationHandler( instance ); return jiniHandler.isActive(); } public boolean isAvailable( Object instance ) { JiniProxyHandler jiniHandler = (JiniProxyHandler) Proxy.getInvocationHandler( instance ); return jiniHandler.isActive(); } }