`
lobin
  • 浏览: 423403 次
  • 性别: 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

 

分享到:
评论

相关推荐

    ip domain-lookup命令解释

    Name/address lookup uses domain service Name servers are 192.168.0.23 Host Flags Age Type Address(es) 2501B (perm, OK) 0 IP 172.16.10.2 1900S.noko.com (temp, OK) 0 IP 192.168.0.32 ``` 以上信息显示了...

    rapidsh-SSH经典整合框架-包括权限管理-文件上传下载-用户管理-分页-lookup

    综上所述,"rapidsh-SSH经典整合框架-包括权限管理-文件上传下载-用户管理-分页-lookup"是一个集成了上述技术的项目实例,它提供了一个完整的开发模板,可以帮助开发者快速搭建起具备上述功能的Web应用。通过学习和...

    PyPI 官网下载 | drf-multi-lookup-0.0.14.tar.gz

    标题中的"PyPI 官网下载 | drf-multi-lookup-0.0.14.tar.gz"表明这是一个从Python Package Index (PyPI)官方下载的软件包,名为`drf-multi-lookup`,版本为0.0.14,且以tar.gz格式压缩。这个包可能是针对Python...

    PyPI 官网下载 | drf-multi-lookup-0.0.19.tar.gz

    《PyPI上的drf-multi-lookup-0.0.19.tar.gz:Python库与分布式系统集成解析》 在IT领域,Python作为一种强大且灵活的编程语言,被广泛应用于各种项目,尤其是Web开发。PyPI(Python Package Index)是Python开发者...

    前端开源库-nsq-lookup-jc

    【nsq-lookup-jc】是一个专为前端开发者设计的开源库,主要用于与nsqlookupd服务进行交互,帮助开发者方便地查找并连接到nsqd节点。nsq是一款由Golang编写的高可用、高性能的消息队列系统,常用于实时处理大规模数据...

    Java Methods-Lookup Tables and Hashing.ppt

    Java 方法lookup表和哈希表 Java 方法是一种面向对象的编程语言,广泛应用于安卓应用开发、Web 开发、企业软件开发等领域。在 Java 编程中,lookup 表和哈希表是两种常用的数据结构,用于快速存储和检索数据。 ...

    devicon-lookup:在每个文件名的开头添加正确的devicon

    用例用例包括:将devicons放在目录中的文件之前ls | devicon-lookup --color向grep结果添加图标rg test | devicon-lookup --prefix :大型结果集的流式结果rg str --color always | devicon-lookup -c -p : | fzf --...

    Linux-vfs-path-lookup

    文件系统原生文档path-lookup翻译

    PyPI 官网下载 | digdeo-syspass-ansible-lookup-0.2.4.tar.gz

    标题中的"PyPI 官网下载 | digdeo-syspass-ansible-lookup-0.2.4.tar.gz"指的是在Python Package Index (PyPI) 官网上可以找到的一个开源项目,名为`digdeo-syspass-ansible-lookup`。这个项目版本号为0.2.4,被打包...

    nested-lookup-feedstock:一个用于嵌套查找的conda-smithy存储库

    通过使用以下方法将conda-forge添加到您的通道中,可以从conda-forge通道安装nested-lookup : conda config --add channels conda-forge 启用conda-forge频道后,可以使用以下命令安装nested-lookup : conda ...

    iso-countries-lookup:通过多种语言的国家名称查找国家_地区代码

    iso-countries-lookup 使用输入的基本容错能力的多种语言按国家/地区名称查找国家/地区代码(ISO 3166-1 alpha-2)。 返回给定国家/地区名称的ISO 3166-1 alpha-2国家/地区代码。 支持基于以及基于备用名称。 安装...

    Python库 | digdeo-syspass-ansible-lookup-0.1.1.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:digdeo-syspass-ansible-lookup-0.1.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    spring-jndi-lookup:如何使用Spring从JNDI查找数据源

    春天jndi查找 如何使用Spring从JNDI查找数据源 Server.xml &lt;... maxActive="100" maxIdle="20" minIdle="5" ...jee:jndi-lookup id =“ dataSource” jndi-name =“ jdbc / javatechie” Expected

    web服务器缓存实现原理,通过chrome f12观察web服务器缓存

    web服务器缓存实现原理,通过chrome f12观察web服务器缓存 后台action命中缓存hit Via X-cache X-Cache-Lookup

    Ajax-ip-lookup.zip

    Ajax-ip-lookup.zip,IP地理定位找到您想要的,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分在不重新加载网页的情况下更改。

    sourcemap-lookup:消费源地图的工具

    用法使用npm install -g sourcemap-lookup ,然后运行sourcemap-lookup -h了解详细用法。 Usage: sourcemap-lookup &lt;path&gt;:&lt;line&gt;:&lt;column&gt; [options]Path to map file may include the .map or it will be assumed ...

    country-code-lookup:通过各种国家_地区代码查找国家_地区

    支持的代码: FIPS 10-4码(2位) ISO 3166(2位数字) ISO 3166(3位数字) ISO 3166(数字) 互联网代码安装$ npm install country-code-lookup用法const lookup = require ( 'country-code-lookup' )// search ...

    Python库 | pubmed-lookup-0.1.4.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:pubmed-lookup-0.1.4.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    办公自动化WPS 2019 基础课程wps表格-LOOKUP函数.mp

    办公自动化WPS 2019 基础课程wps表格-LOOKUP函数.mp4

    spacy-lookup:基于字典的命名实体识别

    "spacy-lookup" 是一个针对自然语言处理(NLP)的扩展库,专门用于实现基于字典的命名实体识别(NER)。在自然语言处理领域,命名实体识别是一项重要的任务,它涉及到从文本中识别出具有特定意义的实体,如人名、...

Global site tag (gtag.js) - Google Analytics