`
lobin
  • 浏览: 383366 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java service provider-lookup mechanism

 
阅读更多

Java service provider-lookup mechanism(发现机制)-1

 

public interface CacheLookup {

    public String naming();

    public Object get();

    public void add(Object cache);

    public void remove(Object cache);
}

 

public class DefaultCacheLookup implements CacheLookup {

    private List<Object> cached;

    private Object defaultCache;

    public DefaultCacheLookup() {
        cached = new ArrayList<Object>();
    }

    public String naming() {
        return "default cache lookup provider";
    }

    @Override
public Object get() {
        int size = cached.size();
        if (size < 1) {
            return defaultCache;
        }
        Random random = new Random(System.currentTimeMillis());
        return cached.get(random.nextInt(size));
    }

    @Override
public void add(Object cache) {
        cached.add(cache);
    }

    @Override
public void remove(Object cache) {
        cached.remove(cache);
    }
}

 

public class AdvancedCacheLookup implements CacheLookup {

    private List<Object> cached;

    private Object defaultCache;

    public AdvancedCacheLookup() {
        cached = new ArrayList<Object>();
    }

    public String naming() {
        return "advanced cache lookup provider";
    }

    @Override
public Object get() {
        int size = cached.size();
        if (size < 1) {
            return defaultCache;
        }
        Random random = new Random(System.currentTimeMillis());
        return cached.get(random.nextInt(size));
    }

    @Override
public void add(Object cache) {
        cached.add(cache);
    }

    @Override
public void remove(Object cache) {
        cached.remove(cache);
    }
}

 

    classpath下META-INF\services\com.xxx.ddal.CacheLookup:

 

com.xxx.ddal.DefaultCacheLookup
com.xxx.ddal.AdvancedCacheLookup

 

@Test
public void test() {
    Iterator<CacheLookup> interator = Service.providers(CacheLookup.class);
    while (interator.hasNext()) {
        CacheLookup lookup = interator.next();
        System.out.println(lookup.getClass());
        System.out.println(lookup.naming());
    }
}

 

 

class com.xxx.ddal.DefaultCacheLookup

default cache lookup provider

class com.xxx.ddal.AdvancedCacheLookup

advanced cache lookup provider

 

 

1、http://docs.oracle.com/javase/1.4.2/docs/guide/jar/jar.html#Service%20Provider

2、http://docs.oracle.com/javase/1.5.0/docs/guide/jar/jar.html#Service%20Provider

3、http://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html

 

 

Java service provider-lookup mechanism(发现机制)-2

public interface Coherence {

    public String naming();
}

 

public class DefaultCoherence implements Coherence {

    public String naming() {
        return "default coherence protocol";
    }
}

 

 

public class Jobs implements Coherence {

    public String naming() {
        return "jobs coherence protocol";
    }
}

  

 

 

 

classpath下META-INF\services\com.xxx.ddal.coherence.Coherence 写道
com.xxx.ddal.coherence.DefaultCoherence
com.xxx.ddal.coherence.Jobs

 

 

 

@Test
public void test() {
    ServiceLoader<Coherence> serviceLoader = ServiceLoader.load(Coherence.class);
    for (Coherence coherence : serviceLoader) {
        System.out.println(coherence.getClass());
        System.out.println(coherence.naming());
    }
}

 

 

输出 写道
class com.xxx.ddal.coherence.DefaultCoherence
default coherence protocol
class com.xxx.ddal.coherence.Jobs
jobs coherence protocol

 

 

@Test
public void test() {
//		String cn = "com.sun.xml.internal.ws.api.message.saaj.SAAJFactory";
	String cn = "javax.print.PrintServiceLookup";
	Class<?> clazz = null;
	try {
		clazz = Class.forName(cn);
	} catch (ClassNotFoundException e) {
		Assert.fail("Class not found: " + cn);
	}
    ServiceLoader<?> serviceLoader = ServiceLoader.load(clazz);
    for (Object obj : serviceLoader) {
    	System.out.println(obj.getClass());
    }
}

 

输出 写道
class sun.print.Win32PrintServiceLookup

  

 

 

public class ProviderService extends Provider {

	static private final String DEFAULT_JAXWSPROVIDER = 
			"com.sun.xml.internal.ws.spi.ProviderImpl";
	
	private Provider wrapper;
	
	public ProviderService() {
		Class<?> klass = null;
		try {
			klass = Class.forName(DEFAULT_JAXWSPROVIDER);
			wrapper = (Provider) klass.newInstance();
		} catch (Exception e) {
			throw new WebServiceException("Provider " + DEFAULT_JAXWSPROVIDER + " error: " + e.getMessage(), e);
		}
		
	}
	@Override
	public ServiceDelegate createServiceDelegate(URL wsdlDocumentLocation, QName serviceName, Class serviceClass) {
		return wrapper.createServiceDelegate(wsdlDocumentLocation, serviceName, serviceClass);
	}

	@Override
	public Endpoint createEndpoint(String bindingId, Object implementor) {
		return wrapper.createEndpoint(bindingId, implementor);
	}

	@Override
	public Endpoint createAndPublishEndpoint(String address, Object implementor) {
		return wrapper.createAndPublishEndpoint(address, implementor);
	}

	@Override
	public EndpointReference readEndpointReference(Source eprInfoset) {
		return wrapper.readEndpointReference(eprInfoset);
	}

	@Override
	public <T> T getPort(EndpointReference endpointReference, Class<T> serviceEndpointInterface,
			WebServiceFeature... features) {
		return wrapper.getPort(endpointReference, serviceEndpointInterface, features);
	}

	@Override
	public W3CEndpointReference createW3CEndpointReference(String address, QName serviceName, QName portName,
			List<Element> metadata, String wsdlDocumentLocation, List<Element> referenceParameters) {
		return wrapper.createW3CEndpointReference(address, serviceName, portName, metadata, wsdlDocumentLocation, referenceParameters);
	}
}

 

 

META-INF\services\javax.xml.ws.spi.Provider 写道
 com.javax.jws.distributed.ProviderService

 

 
Provider provider = Provider.provider(); // ProviderService

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics