[
https://issues.apache.org/jira/browse/LUCENE-9281?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17066870#comment-17066870
]
ASF subversion and git services commented on LUCENE-9281:
---------------------------------------------------------
Commit 2c7a7109456e8c018b286ff43f754d77c5064d79 in lucene-solr's branch
refs/heads/master from Uwe Schindler
[ https://gitbox.apache.org/repos/asf?p=lucene-solr.git;h=2c7a710 ]
LUCENE-9281: Retire SPIClassIterator from master because Java 9+ uses different
mechanism to load services when module system is used (#1360)
LUCENE-9281: Use java.util.ServiceLoader to load codec components and analysis
factories to be compatible with Java Module System
> Retire SPIClassIterator from master because Java 9+ uses different mechanism
> to load services when module system is used
> ------------------------------------------------------------------------------------------------------------------------
>
> Key: LUCENE-9281
> URL: https://issues.apache.org/jira/browse/LUCENE-9281
> Project: Lucene - Core
> Issue Type: Improvement
> Components: core/other
> Affects Versions: master (9.0)
> Reporter: Uwe Schindler
> Assignee: Uwe Schindler
> Priority: Major
> Fix For: master (9.0)
>
> Time Spent: 5h 10m
> Remaining Estimate: 0h
>
> We currently have our own implementation of the service loader standard (SPI)
> fo several reasons:
> (1) In some older JDKs the order of classpath was not respected and this lead
> to wrong order of codecs implementing the same SPI name. This caused tests to
> sometimes use wrong class (we had this in Lucene 4 where we had a test-only
> read/write Lucene3 codec that was listed before the read-only one). That's no
> longer an issue, the order of loading does not matter. In addition, Java now
> does everything correct.
> (2) In Analysis, we require SPI classes to have a constructor taking args (a
> Map of params in our case). We also extract the NAME from a static field.
> Standard service loader does not support this, it tries to instantiate the
> class with default ctor.
> With Java 9+, the ServiceLoader now has a stream() method that allows to
> filter and preprocess classes:
> [https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/ServiceLoader.html#stream()]
> This allows us to use the new interface and just get the loaded class (which
> may come from module-info.class or a conventional SPI file):
> [https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/ServiceLoader.Provider.html#type()]
> This change allows us to convert Lucene to modules listing all SPIs in the
> module-info.java.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]