Uwe Schindler created LUCENE-9281:
-------------------------------------

             Summary: Retire SPIServiceIterator 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


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. 
standard service loader does not support this. 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: issues-unsubscr...@lucene.apache.org
For additional commands, e-mail: issues-h...@lucene.apache.org

Reply via email to