Git Product home page Git Product logo

cooma's People

Contributors

oldratlee avatar zavakid avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cooma's Issues

Wrapper类不要自动加载

Wrapper类不要自动加载。

0.1.0的实现中,com.metaframe.cooma.ExtensionLoader#loadExtensionClasses方法会直接加载有拷贝构造函数的扩展点到com.metaframe.cooma.ExtensionLoader#cachedWrapperClasses中。

这个导致不能手动配置Wapper有哪些。

解决方法

getExtension方法,添加Wrapper list参数,显式指定需要的Wrapper

createExtension要Cache操作的Throwable

com.metaframe.cooma.ExtensionLoader#createExtension出错,则会每次getExtension都再执行createExtension,有性能问题!

处理方式和getAdaptiveExtension一样!

统一相关术语使用Extension

代码还有service这样的字眼,改成extension。

是用service,还是ExtensionLoader,或是其它还要再思考一下。

在扩展点配置文件中,支持属性

0.1.0的格式:

# Comment 1
impl1=com.foo.ext1.impl.Ext1Impl1 #Hello World
impl2=com.foo.ext1.impl.Ext1Impl2  # Comment 2
   impl3=com.foo.ext1.impl.Ext1Impl3 # with head space

使用name=impl-class,可以不用加载类文件即知道扩展的点的名字。

0.2.0中期望加上属性,格式:

# Comment 1
name=impl.class(attrib1=value1,attrib2=value2)

foo1=com.foo.Impl1(isProvider,order=3)
foo2=com.foo.Impl2(isConsumer,order=5)

有了这些属性,方法ExtensionLoader使用者,可以过滤,查到需要扩展,自动加载

Wrapper实例实现成单例

目前Wrapper在调用getExtesion方法时创建,所以不是单例的。

这和Extension的管理不一样。

删除没有必要的getExtName方法

这个方法,目前对于返回带有Wrapper的实例的情况下,返回是错误的。

另外,从Dubbo中这个方法的使用Case来看(反查扩展名),场景可以通过使用方存过扩展名来解决。

扩展点配置文件格式加强

PS: 修改对应的文档

格式示例

impl1=com.foo.Impl1
*=com.foo.ManualAdaptive
+wrapper1=com.foo.Wrapper1

说明

  • 前缀 * 表示 是 Adaptive Class。
    约定调整!不用实现类上加@Adaptive注解!
  • 前缀 + 表示 是 Wrapper Class。
    约定调整!不再以是否有拷贝构造函数来判定是否是Extension Wrapper。

清理注释

问题

注释有的是英文有的是中文。

英文注释质量不好。

解决方法

代码中使用中文的注释。先要准确的表达自己的意思。

文档写一份英文的。

可以通过编程方式让cooma接管新的扩展点接口

目前方式是在接口上加@\Extension注解,否则ExtensionLoader调用出异常,拒绝税控。

如果不能方便修改接口类代码,这个就不方便了。

一般这不是问题,使用cooma管理的是自己的实现,可以改接口代码。

统一getExtension:getDefaultExtension的返回方式

getExtension有则返回扩展点,否则出异常。(异常中会给出可能的原因。)

这是大部分情况下使用需求

getDefaultExtension方法会返回null表示没有缺省扩展点。

两个方法的返回方式不一致。

统一throw IllegalStateException表示没有扩展点。

通过hasExtension方法来确认是否有此扩展点。

扩展点配置文件的目录可以配置

目前的实现是写死的:

private static final String SERVICES_DIRECTORY = "META-INF/extensions/";

可以使用-D选项来配置:

-Dcooma.extension.dir="META-INF/cooma/extensions/"

或是getExtensionLoader时设置,这样可以在一个进程中选择不同的目录。
比如dubbo库在 MF/dubbo ,napoli在 MF/napoli

也会需要配置 多个加载目录的需要,这样方便兼容老的Extension实现,不用修改Extension配置文件目录。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.