--
You received this message because you are subscribed to the Google Groups "Eclipse MicroProfile" group.
To unsubscribe from this group and stop receiving emails from it, send an email to microprofile...@googlegroups.com.
To post to this group, send email to microp...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/microprofile/cbb74408-0358-45b4-b593-bc31b7509d91%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
If we were talking about packaging and deploying to Java EE/Jakarta EE application servers, then something like this would be of great benefit. But I don't see the benefits when MicroProfile implementers can choose to package and deploy their application in any way they want, as the platform does not mandate how that should be done.
Further to "one size fits all", it wouldn't be fair to add functionality to the plugin that not all implementors provide, as then the plugin would fail for those situations. What it results in is that anything that's specific to an implementor only exists in their own plugin, and then they need to provide instructions on how to change the "common" pom.xml to use their plugin to take advantage of that implementation specific feature.
In terms of updating Starter, it's an additional hurdle for new implementations, and possibly versions of an implementation, that they need to be present within the "Boost" plugin, and have the release done and updated in Starter before they can be added to the Starter.
Sorry all for the slow response, I had to take off some days unexpectedly.Ken, thanks for the comments.
On Thursday, April 25, 2019 at 11:38:02 AM UTC-4, Ken Finnigan wrote:If we were talking about packaging and deploying to Java EE/Jakarta EE application servers, then something like this would be of great benefit. But I don't see the benefits when MicroProfile implementers can choose to package and deploy their application in any way they want, as the platform does not mandate how that should be done.There may be a diversity of packaging options but if you have a Maven project there basically has to be a JAR and/or a WAR type package (possibly EAR). We can move the packaging details for a given MicroProfile implementation into the Boost plugin so the end user can simply select a packaging type of WAR vs JAR and let Boost package its opinion of the best JAR or WAR for the given runtime. This would seem more convenient than referring to the individual plugin documentations or back to the MicroProfile starter to understand how to package for a given MicroProfile implementation.
Boost isn't going to take it upon itself to, say, implement runnable JAR support for a MicroProfile implementation that doesn't already support one. Though if the Boost influence led to more normalization in packaging across different MicroProfile implementations, I don't think that would be a bad thing.Further to "one size fits all", it wouldn't be fair to add functionality to the plugin that not all implementors provide, as then the plugin would fail for those situations. What it results in is that anything that's specific to an implementor only exists in their own plugin, and then they need to provide instructions on how to change the "common" pom.xml to use their plugin to take advantage of that implementation specific feature.So the plugins are potentially going to have different features and the implementations will also have different features.
We think abstracting over the differences in the plugin features can be done in a way that is worth the tradeoff of losing plugin-specific features.
The Boost 'package' goal handles installing a runtime dependency into the project 'target' directory (optionally installing other key dependencies like DBs), deploying an application to it, and configuring that runtime using the boost configuration layer , and building a package from the app + runtime. When combined with Boost start/stop/run/debug goals, the developer ends up getting a simple, common goal->phase mapping ("lifecycle" if that's not too overloaded), which makes up for the loss of customization you'd get by pushing the unique aspects out of the user pom.xml and into the Boost plugin.
Was there another plugin use case you had in mind here that would not be as easy to generalize over?
And also... dealing with the different features and different configuration mechanisms among implementations is a whole other matter. I'm not sure this was even part of your objection here though so don't mean to dive into that. The short answer is that on this we think this would eventually become a topic for the Boost community to address.In terms of updating Starter, it's an additional hurdle for new implementations, and possibly versions of an implementation, that they need to be present within the "Boost" plugin, and have the release done and updated in Starter before they can be added to the Starter.It's hard to compare the difficulty in updating Starter now vs. with Boost since we haven't really shared any vision on an adapter architecture or mechanism to judge against (having taken shortcuts in keeping this all in one project/repo).
But if you imagine something like with Arquillian adapters where you implement a Boost-defined "adapter" SPI and then release an artifact (with someone maybe later updating the core Boost project BOM), then it doesn't necessarily sound harder for an implementation.
For an implementation that has an existing Maven plugin with existing goals and config, well, pushing up the POM snippet into https://github.com/eclipse/microprofile-starter/blob/master/src/main/resources/pom-servers.xml is pretty straightforward.
But for a new implementation without an existing Maven plugin, etc., implementing the Boost SPI might be simpler than creating a new plugin. If the adapters can be written to support Maven and Gradle both this could allow a core Boost Gradle plugin too to extend Gradle support to these implementations at the same time.
Scott
--
You received this message because you are subscribed to the Google Groups "Eclipse MicroProfile" group.
To unsubscribe from this group and stop receiving emails from it, send an email to microprofile...@googlegroups.com.
To post to this group, send email to microp...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/microprofile/98334323-9743-46b0-bc02-291d2a2c580b%40googlegroups.com.
I don't think moving application packaging details to a plugin solves the problem. If a developer has defined the Maven project to be of type WAR, but the runtime support WAR packaging, does the user get an error? If so, how is that less user friendly than needing to use custom plugin configuration per runtime?
We think abstracting over the differences in the plugin features can be done in a way that is worth the tradeoff of losing plugin-specific features.That doesn't make any sense to me. If a runtime offered something "cool" in their plugin that no one else does, they must then educate all their users that if their application was created to use the Boost plugin they need to change it back to using their custom plugin to do the "cool" thing.
To me, what you describe above is very much traditional Java EE Application Server type deployment situations.Not all runtimes have a runtime dependency that is "installable" into the target directory, to then create a combined app and runtime package.
How does Boost work when there is no single runtime piece and it's a combination of Maven dependencies?
You presume that all plugins offer start/stop/run/debug goals. Is that the case today?
It's hard to compare the difficulty in updating Starter now vs. with Boost since we haven't really shared any vision on an adapter architecture or mechanism to judge against (having taken shortcuts in keeping this all in one project/repo).
But if you imagine something like with Arquillian adapters where you implement a Boost-defined "adapter" SPI and then release an artifact (with someone maybe later updating the core Boost project BOM), then it doesn't necessarily sound harder for an implementation.
For an implementation that has an existing Maven plugin with existing goals and config, well, pushing up the POM snippet into https://github.com/eclipse/microprofile-starter/blob/master/src/main/resources/pom-servers.xml is pretty straightforward.
But for a new implementation without an existing Maven plugin, etc., implementing the Boost SPI might be simpler than creating a new plugin. If the adapters can be written to support Maven and Gradle both this could allow a core Boost Gradle plugin too to extend Gradle support to these implementations at the same time.Even if it took the approach of the Arquillian style adapters, it's an additional hurdle for implementors to develop, maintain, and release these adapters, maybe in conjunction with updates to the plugin. Maintenance is higher as it needs to account for Boost plugin changes that necessitate updating these adapters.
I can't remember if it was mentioned during the call, but how does Gradle play into this? Though the Starter I think only deals with Maven, if it were to add Gradle support how does the Boost plugin work with Gradle?
On Thursday, May 2, 2019 at 2:41:45 PM UTC-4, Ken Finnigan wrote:I don't think moving application packaging details to a plugin solves the problem. If a developer has defined the Maven project to be of type WAR, but the runtime support WAR packaging, does the user get an error? If so, how is that less user friendly than needing to use custom plugin configuration per runtime?I think this would make the supported packaging type + runtime pairs easier to work with and the unsupported packages no worse.The MP Starter runtime-specific logic could still play a role for less-experienced users, steering them to a supported/preferred packaging type (e.g. WAR vs. JAR) for a given runtime. The simple, common boost plugin configuration could improve the user experience with supported packaging type + runtime combinations, plus make it simpler to add without having to refer back to or regenerate from the MicroProfile starter.
We think abstracting over the differences in the plugin features can be done in a way that is worth the tradeoff of losing plugin-specific features.That doesn't make any sense to me. If a runtime offered something "cool" in their plugin that no one else does, they must then educate all their users that if their application was created to use the Boost plugin they need to change it back to using their custom plugin to do the "cool" thing....To me, what you describe above is very much traditional Java EE Application Server type deployment situations.Not all runtimes have a runtime dependency that is "installable" into the target directory, to then create a combined app and runtime package.(Replying to both points):But for MicroProfile implementations where the developer workflow/lifecycle does map well to this set of abstractions / operations (package, run/start/debug, stop), whether because of a Java EE heritage or not, the Boost plugin simplifies the Maven / Gradle developer experience.
This type of packaging is used today by a significant set of implementations, which are served today by implementation-specific plugins which must be learned, just a means to deploy the app to the runtime which maybe contains the innovation the developer is really interested in.If an implementation did wanted to enhance the Maven/Gradle "package" experience for Boost users, this could be added into that implementation's Boost adapter.There are questions to work through like what happens if the Boost plugin / runtime configuration does not have every config option available and I need to drop into the "native" impl-specific plugin and/or runtime configuration? If these end up being just a relative few "corner cases" then I could see them getting value from using the Boost-defined dependencies even while perhaps not using the Boost plugin (or using it alongside the native plugin).But I think the bigger objection might be the question: what if an implementation wanted to innovate in a way such that the lifecycle (including "package", etc.) were no longer a good fit?
How does Boost work when there is no single runtime piece and it's a combination of Maven dependencies?We haven't developed this case any, but I could imagine we have some generic adapters like ExecutableJarAdapter in the Boost project itself.
You presume that all plugins offer start/stop/run/debug goals. Is that the case today?Each implementation will need to write an adapter, either pointing to an implementation-specific plugin's analogous goal or writing some other code to do the same.
It's hard to compare the difficulty in updating Starter now vs. with Boost since we haven't really shared any vision on an adapter architecture or mechanism to judge against (having taken shortcuts in keeping this all in one project/repo).
But if you imagine something like with Arquillian adapters where you implement a Boost-defined "adapter" SPI and then release an artifact (with someone maybe later updating the core Boost project BOM), then it doesn't necessarily sound harder for an implementation.
For an implementation that has an existing Maven plugin with existing goals and config, well, pushing up the POM snippet into https://github.com/eclipse/microprofile-starter/blob/master/src/main/resources/pom-servers.xml is pretty straightforward.
But for a new implementation without an existing Maven plugin, etc., implementing the Boost SPI might be simpler than creating a new plugin. If the adapters can be written to support Maven and Gradle both this could allow a core Boost Gradle plugin too to extend Gradle support to these implementations at the same time.Even if it took the approach of the Arquillian style adapters, it's an additional hurdle for implementors to develop, maintain, and release these adapters, maybe in conjunction with updates to the plugin. Maintenance is higher as it needs to account for Boost plugin changes that necessitate updating these adapters.So I'd like to address this by putting out there an adapter SPI design. I don't believe every implementation even has a Maven/Gradle plugin, so I'm not sure this is necessarily a higher maintenance cost, but it's probably better to have the discussion against a more concrete proposal and we haven't done that yet. Will follow-up soon, maybe this week.
I can't remember if it was mentioned during the call, but how does Gradle play into this? Though the Starter I think only deals with Maven, if it were to add Gradle support how does the Boost plugin work with Gradle?Yes, we had planned to have a core Boost Maven & Gradle plugin. As far as the adapter, it would seem nice to allow each implementation to have one adapter that could handle each, rather than each of a Maven + a Gradle adapter. Still, we are just prototyping this now so again, I will follow-up shortly with a proposal.Scott
--
You received this message because you are subscribed to the Google Groups "Eclipse MicroProfile" group.
To unsubscribe from this group and stop receiving emails from it, send an email to microprofile...@googlegroups.com.
To post to this group, send email to microp...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/microprofile/7e2b79f4-e470-42f4-933e-09ba6f6191df%40googlegroups.com.
--
You received this message because you are subscribed to the Google Groups "Eclipse MicroProfile" group.
To unsubscribe from this group and stop receiving emails from it, send an email to microprofile...@googlegroups.com.
To post to this group, send email to microp...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/microprofile/204baa25-2de8-4f6d-8bb7-2fd1fe25ef83%40googlegroups.com.
To unsubscribe from this group and stop receiving emails from it, send an email to microp...@googlegroups.com.
To unsubscribe from this group and stop receiving emails from it, send an email to microprofile...@googlegroups.com.
To post to this group, send email to microp...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/microprofile/b1fdcb79-f0b1-477b-a59e-9ee4eed0a859%40googlegroups.com.
We're not just intending to hide impl-specific differences for the sake of portability, but also to make working with the individual plugins easier.
--
You received this message because you are subscribed to the Google Groups "Eclipse MicroProfile" group.
To unsubscribe from this group and stop receiving emails from it, send an email to microprofile...@googlegroups.com.
To post to this group, send email to microp...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/microprofile/5bce1a37-a960-41d7-a261-431860dfbdf0%40googlegroups.com.
--
You received this message because you are subscribed to the Google Groups "Eclipse MicroProfile" group.
To unsubscribe from this group and stop receiving emails from it, send an email to microprofile...@googlegroups.com.
To post to this group, send email to microp...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/microprofile/96b745fb-3068-4739-a933-e58b3ae8938e%40googlegroups.com.
Though I wasn't at the MP Starter meeting the other day [1], it was mentioned that Payara Micro will not work with the plugin.
One thing I haven't mentioned previously, it needs to be noted that the ideas around a Maven plugin would change the goals of MicroProfile and what we've strived to do so far. "Optimizing Java for an Enterprise Architecture" as a mission is very much focused on APIs and functionality, at least in my opinion. What is being proposed would push MicroProfile into the realm of all things "tooling", which is an extremely huge ecosystem where every developer has their own preferences for tools and ways of working.With respect to your comments Scott, I have some feedback:
- Sure the MicroProfile Starter isn't going to generate every line of a pom.xml that might be needed. But why should it? To me that indicates a developer isn't capable of understanding what needs to be done, so we're going to do it for you. When you go down that road, we get an outcome that no one is happy with because it's too opinionated and follows a very specific usage path
- Boost properties are a bad idea. Yes they make it fast to run locally by setting some properties in a plugin, but what happens for production, or deploying to Cloud environments? The properties for the plugin are meaningless at that point. All we've done is delay the developer from needing to know what the properties might be for a particular runtime. If we really think that some common properties for HTTP port, etc are necessary, then let's define some MP level properties that are expected to be used by a runtime.
- One of the properties you mention is DB URL. As MP doesn't have any data solution at present, offering property settings related to solutions outside MP doesn't make any sense. Expecting a runtime to convert this DB URL for use with Hibernate or EclipseLink, or any data solution, even though MP doesn't have a spec around any of those is not realistic.
One other point of note. Though I wasn't at the MP Starter meeting the other day [1], it was mentioned that Payara Micro will not work with the plugin. From the looking at the plugin code I've done, I don't believe it would work for Thorntail or Quarkus either.
--On Thu, May 16, 2019 at 5:53 PM Scott Kurz <scot...@gmail.com> wrote:--We're not just intending to hide impl-specific differences for the sake of portability, but also to make working with the individual plugins easier. The MicroProfile starter is a good first step, but it's not going to generate every line of pom.xml you'll ever need to write.We also see Boost helping with the "flattening" of impl-specific config into:
Boost properties Maven dependencies.E.g. the demo app https://github.com/OpenLiberty/boosted-microprofile-rest-client/blob/master/pom.xml showed default Datasource configured via the boost.db.url property plus JDBC driver dependency and the JAX-RS endpoint port via boost.http.port.So right now, if I want to give a new implementation a try, I have to read the documentation for how to add a JDBC driver either through the impl-specific plugin and/or something like dependency or download plugin, and add the impl-specific parameter/property or whatever.Maybe the JDBC driver is a first-class dependency or maybe not. (I don't think the MicroProfile starter today helps with this either; it never intended to.)The next component, however, may then be pulled in and configured totally differently, in each implementation.So that's a significant learning curve working with new function in new implementation. To the extent that adding something new is just "add a boost property" and/or "add a dependency", it could make things easier.---Now, we can fast-forward to the case where the simplified Boost configuration layer isn't enough for a given function + implementation. Boost isn't going to immediately, magically add configuration for every property in every implementation in the foreseeable future.So should Boost be architected to seamlessly allow you to also use the "native" impl-specific plugin in the same project? Or do we shoot to cover 80% of cases (or maybe "all" the starter-generated projects) with Boost and recognize that there are going to be special cases where Boost isn't a good fit and deal with that somehow?That'd be a good question. It's something we need to discuss but we wanted to start by trying to put something out there to make development easier for new users, even without having settled all that at this point.Scott
You received this message because you are subscribed to the Google Groups "Eclipse MicroProfile" group.
To unsubscribe from this group and stop receiving emails from it, send an email to microprofile...@googlegroups.com.
To post to this group, send email to microp...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/microprofile/96b745fb-3068-4739-a933-e58b3ae8938e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
You received this message because you are subscribed to a topic in the Google Groups "Eclipse MicroProfile" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/microprofile/wKnUcj23URo/unsubscribe.
To unsubscribe from this group and all its topics, send an email to microprofile...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/microprofile/CAKeeVe78nkOrhBs4--%2B%2BZG75JoYxQ6sGpJn1DWqTbtxNATjGtQ%40mail.gmail.com.
One of MicroProfile missions is to support portability and interoperability. With the common plugin, it is much easier to move among app servers.
--
You received this message because you are subscribed to a topic in the Google Groups "Eclipse MicroProfile" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/microprofile/wKnUcj23URo/unsubscribe.
To unsubscribe from this group and all its topics, send an email to microprofile...@googlegroups.com.
To post to this group, send email to microp...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/microprofile/50c50b77-6213-4dc3-9a98-f1de4a6171b8%40googlegroups.com.
You received this message because you are subscribed to the Google Groups "Eclipse MicroProfile" group.
To unsubscribe from this group and stop receiving emails from it, send an email to microprofile...@googlegroups.com.
To post to this group, send email to microp...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/microprofile/1468599a-a363-4766-8df5-af7cb94bb443%40Emilys-iPhone.
To unsubscribe from this group and all its topics, send an email to microp...@googlegroups.com.
To post to this group, send email to microp...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/microprofile/50c50b77-6213-4dc3-9a98-f1de4a6171b8%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Eclipse MicroProfile" group.
To unsubscribe from this group and stop receiving emails from it, send an email to microp...@googlegroups.com.