{"action":"opened","issue":{"url":"https://api.github.com/repos/eclipse/microprofile/issues/43","repository_url":"https://api.github.com/repos/eclipse/microprofile","labels_url":"https://api.github.com/repos/eclipse/microprofile/issues/43/labels{/name}","comments_url":"https://api.github.com/repos/eclipse/microprofile/issues/43/comments","events_url":"https://api.github.com/repos/eclipse/microprofile/issues/43/events","html_url":"https://github.com/eclipse/microprofile/issues/43","id":340570374,"node_id":"MDU6SXNzdWUzNDA1NzAzNzQ=","number":43,"title":"[Architecture Board] Clean up SPI to provide implementations","user":{"login":"OndrejM","id":2195988,"node_id":"MDQ6VXNlcjIxOTU5ODg=","avatar_url":"https://avatars0.githubusercontent.com/u/2195988?v=4","gravatar_id":"","url":"https://api.github.com/users/OndrejM","html_url":"https://github.com/OndrejM","followers_url":"https://api.github.com/users/OndrejM/followers","following_url":"https://api.github.com/users/OndrejM/following{/other_user}","gists_url":"https://api.github.com/users/OndrejM/gists{/gist_id}","starred_url":"https://api.github.com/users/OndrejM/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OndrejM/subscriptions","organizations_url":"https://api.github.com/users/OndrejM/orgs","repos_url":"https://api.github.com/users/OndrejM/repos","events_url":"https://api.github.com/users/OndrejM/events{/privacy}","received_events_url":"https://api.github.com/users/OndrejM/received_events","type":"User","site_admin":false},"labels":[{"id":991591096,"node_id":"MDU6TGFiZWw5OTE1OTEwOTY=","url":"https://api.github.com/repos/eclipse/microprofile/labels/Architecture%20board","name":"Architecture board","color":"1d76db","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2018-07-12T10:00:18Z","updated_at":"2018-07-12T10:00:18Z","closed_at":null,"author_association":"CONTRIBUTOR","body":"Many MP specs provide an SPI for implementations to provide implementations of some API interfaces. Usually, the following pattern is used:\r\n\r\n* CoreInterface interface in the root API package\r\n* a CoreInterfaceResolver abstract class in an SPI package\r\n* a static resolver method which provides a default CoreInterface instance\r\n* the resolver method uses the service loader mechanism to load a CoreInterfaceResolver implementation which provides an instance of CoreInterface\r\n* alternatively, CoreInterfaceResolver implementation can also be set globally with a static `setInstance` method (to simplify providing an implementation in an OSGi environment)\r\n\r\nSeveral issues have been raised to remove the `setInstance` method from the API artifact, claiming that separating it into an SPI package within the same artifact isn't enough to prevent API consumers using it: https://github.com/eclipse/microprofile-rest-client/issues/103, https://github.com/eclipse/microprofile-open-api/issues/224, https://github.com/eclipse/microprofile-config/issues/364"}}
{"actor":{"display_login":"OndrejM"}}