[ 
https://issues.apache.org/jira/browse/JAMES-3836?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jean Helou resolved JAMES-3836.
-------------------------------
    Resolution: Fixed

> Proposal: Improved mail repository loading
> ------------------------------------------
>
>                 Key: JAMES-3836
>                 URL: https://issues.apache.org/jira/browse/JAMES-3836
>             Project: James Server
>          Issue Type: Improvement
>            Reporter: Jean Helou
>            Priority: Major
>          Time Spent: 2h 20m
>  Remaining Estimate: 0h
>
> At the moment we have 2 approaches to instanciating mail repositories:
>  * constructor based instantiation with technical dependencies and the 
> MailRepositoryUrl as a constructor argument ( MemoryMailRepository, 
> CassandraMailRepository)
>  * constructor based instantiation with technical dependencies. The 
> MailRepositoryUrl is used in a PostConstruct through Configurable to isolate 
> instances from one another (FileMailRepository, JDBCMailRepository, 
> JPAMailRepository)
>  
> The former instantiation technique requires hacking around the guice loader 
> in order to create a subcontext for the correct url when loading the mail 
> repository instance ( see 
> org.apache.james.modules.mailrepository.guice.GuiceMailRepositoryLoader#load )
> The second technique creates an invalid instance which becomes valid only 
> once the configure method has been called.
> We were faced with this when building BlobMailRepository and tried to find a 
> better way. We propose a factory based approach where factories capture the 
> technical requirements of the mail repository implementation, are bound to 
> the general context  using a @ProvideIntoSet The loader then selects the 
> appropriate factory and uses it to build the requested instance.
> This requires no custom hacking of the guice context while allowing for pure 
> constructor based instantiation.
>  
> We propose a corresponding pull request which 
>  * implements and demonstrates the new loading mechanism
>  * provides factories and bindings all used repository implementations 
> (memory, blob, cassandra, jpa) 
> Creating the corresponding factories for the remaining implementations should 
> be fairly straightforward.
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to