[ https://issues.apache.org/jira/browse/EAGLE-442?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Hao Chen updated EAGLE-442: --------------------------- Description: ## Module Registry Interfaces * ApplicationProvider ``` ApplicationProvider{ void register(ModuleRegistry) } ``` * ModuleRegistry ``` ModuleRegistry { void register(ModuleScope scope,Module module); default void register(Module moduel) { register(GlobalScope.class, module) } } ``` * ModuleScope - Modules registered in scope of `GlobalScope` will be visible globally - Modules registered in `MySQLMetadataStore`/`MongodbMetadataStore`/`MemoryMetadataStore` will only be visible when selected MetadataStore is active (set in configuration file) ``` ModuleScope |- GlobalScope |- MetadataStore |- MySQLMetadataStore |- MongodbMetadataStore |- MemoryMetadataStore ``` ## Example * Registry: in `HBaseAuditLogAppProvider` ``` @Override public void register(ModuleRegistry registry) { registry.register(MemoryMetadataStore.class, new AbstractModule() { @Override protected void configure() { bind(ISecurityMetadataDAO.class).to(InMemMetadataDaoImpl.class); } }); registry.register(MySQLMetadataStore.class, new AbstractModule() { @Override protected void configure() { bind(ISecurityMetadataDAO.class).to(JDBCSecurityMetadataDAO.class); } }); } ``` * Inject: For example, `HbaseMetadataBrowseWebResource` could get current `ISecurityMetadataDAO` with `@Inject ISecurityMetadataDAO metadataDAO` as following, instead of using [`MetadataDaoFactory`](https://github.com/apache/incubator-eagle/blob/9b10f22221b60f0f6451e71ac3396b326f9565ef/eagle-security/eagle-security-common/src/main/java/org/apache/eagle/security/service/MetadataDaoFactory.java) ``` @Inject public HbaseMetadataBrowseWebResource(ApplicationEntityService entityService, ISecurityMetadataDAO metadataDAO){ this.entityService = entityService; this.dao = metadataDAO; } ``` ## More Use Cases * ExampleResource * ExampleService * ExampleApplicationProviderTest#testApplicationExtensions ## JIRA * https://issues.apache.org/jira/browse/EAGLE-442 * https://issues.apache.org/jira/browse/EAGLE-431 was: Module Registry Interfaces ApplicationProvider ApplicationProvider{ void register(ModuleRegistry) } ModuleRegistry ModuleRegistry { void register(ModuleScope scope,Module module); default void register(Module moduel) { register(GlobalScope.class, module) } } ModuleScope Modules registered in scope of GlobalScope will be visible globally Modules registered in MySQLMetadataStore/MongodbMetadataStore/MemoryMetadataStore will only be visible when selected MetadataStore is active (set in configuration file) ModuleScope |- GlobalScope |- MetadataStore |- MySQLMetadataStore |- MongodbMetadataStore |- MemoryMetadataStore Example Registry: in HBaseAuditLogAppProvider @Override public void register(ModuleRegistry registry) { registry.register(MemoryMetadataStore.class, new AbstractModule() { @Override protected void configure() { bind(ISecurityMetadataDAO.class).to(InMemMetadataDaoImpl.class); } }); registry.register(MySQLMetadataStore.class, new AbstractModule() { @Override protected void configure() { bind(ISecurityMetadataDAO.class).to(JDBCSecurityMetadataDAO.class); } }); } Inject: For example, HbaseMetadataBrowseWebResource could get current ISecurityMetadataDAO with @Inject ISecurityMetadataDAO metadataDAO as following, instead of using MetadataDaoFactory @Inject public HbaseMetadataBrowseWebResource(ApplicationEntityService entityService, ISecurityMetadataDAO metadataDAO){ this.entityService = entityService; this.dao = metadataDAO; } More Use Cases ExampleResource ExampleService ExampleApplicationProviderTest#testApplicationExtensions > Support to extend metastore DAO modules in SPI > ---------------------------------------------- > > Key: EAGLE-442 > URL: https://issues.apache.org/jira/browse/EAGLE-442 > Project: Eagle > Issue Type: Sub-task > Affects Versions: v0.5.0 > Reporter: Hao Chen > Assignee: Hao Chen > Labels: app-framework, extensibility > Fix For: v0.5.0 > > > ## Module Registry Interfaces > * ApplicationProvider > ``` > ApplicationProvider{ > void register(ModuleRegistry) > } > ``` > * ModuleRegistry > ``` > ModuleRegistry { > void register(ModuleScope scope,Module module); > default void register(Module moduel) { > register(GlobalScope.class, module) > } > } > ``` > * ModuleScope > - Modules registered in scope of `GlobalScope` will be visible globally > - Modules registered in > `MySQLMetadataStore`/`MongodbMetadataStore`/`MemoryMetadataStore` will only > be visible when selected MetadataStore is active (set in configuration file) > ``` > ModuleScope > |- GlobalScope > |- MetadataStore > |- MySQLMetadataStore > |- MongodbMetadataStore > |- MemoryMetadataStore > ``` > ## Example > * Registry: in `HBaseAuditLogAppProvider` > ``` > @Override > public void register(ModuleRegistry registry) { > registry.register(MemoryMetadataStore.class, new AbstractModule() { > @Override > protected void configure() { > > bind(ISecurityMetadataDAO.class).to(InMemMetadataDaoImpl.class); > } > }); > registry.register(MySQLMetadataStore.class, new AbstractModule() { > @Override > protected void configure() { > > bind(ISecurityMetadataDAO.class).to(JDBCSecurityMetadataDAO.class); > } > }); > } > ``` > * Inject: For example, `HbaseMetadataBrowseWebResource` could get current > `ISecurityMetadataDAO` with `@Inject ISecurityMetadataDAO metadataDAO` as > following, instead of using > [`MetadataDaoFactory`](https://github.com/apache/incubator-eagle/blob/9b10f22221b60f0f6451e71ac3396b326f9565ef/eagle-security/eagle-security-common/src/main/java/org/apache/eagle/security/service/MetadataDaoFactory.java) > ``` > @Inject > public HbaseMetadataBrowseWebResource(ApplicationEntityService > entityService, ISecurityMetadataDAO metadataDAO){ > this.entityService = entityService; > this.dao = metadataDAO; > } > ``` > ## More Use Cases > * ExampleResource > * ExampleService > * ExampleApplicationProviderTest#testApplicationExtensions > ## JIRA > * https://issues.apache.org/jira/browse/EAGLE-442 > * https://issues.apache.org/jira/browse/EAGLE-431 -- This message was sent by Atlassian JIRA (v6.3.4#6332)