spring-io / start.spring.io

https://start.spring.io
Apache License 2.0
2.21k stars 899 forks source link

Improve end-user experience with Spring Integration #600

Closed artembilan closed 3 years ago

artembilan commented 3 years ago

Currently Spring Integration appears in the search result only when we type something like "integration", "messaging", "enterprise", "adapter" - some general words in the project description or tags. I suggest to improve that text for all the support integration protocols: (s)ftp, JMS, JDBC, RSocket, ZeroMQ etc. You name it! See more about supported in the project modules: https://github.com/spring-projects/spring-integration. This way end-user would know that Spring Integration supports this or that technology according their wishes.

Another improvement suggestion is to add respective Spring Integration module as dependency when some target well-known library is supported in Spring Integration. For example when end-user asks for AMQP, we suggest Spring Integration (if the first point is fixed) and Spring for RabbitMQ. When end-user select both, we also add implicitly spring-integration-amqp, so we assume that in most cases users want to use channel adapters for AMQP from Spring Integration. And so on for all the supported protocols. Some similar solution I see here: https://github.com/spring-io/start.spring.io/blob/master/start-site/src/main/java/io/spring/start/site/extension/dependency/springsession/SpringSessionBuildCustomizer.java.

Another proposal, which might be too destructive, is a "fine-graining" Spring Integration modules, like you do at the moment for Spring Data. So, this is just like another angle looking at the original end-user experience problem...

If any thing of this sounds good, let me know and I'll issue a PR!

Happy holidays!

snicoll commented 3 years ago

Thanks for the suggestion Artem. There are several things to unwind here and we prefer to focus on one thing at time so we may fork other issues based on the discussion.

IMO, the key to your proposal is to add a spring-integration specific module when a given tech is selected. This brings the most value and helps connect the dots between the technology and what Spring Integration has to offer. To move forward with this, could you please provide us with a mapping between an entry on start.spring.io and the artifactId of the spring-integration module to add? Said module should be in the bom which I guess is a given. If there is some "module-specific" section in the documentation, please add that to the mapping as we could augment HELP.md with that based on what the user has selected.

Based on this list, we can build that smart mapping and improve the description on start.spring.io. We need to be careful to avoid a too lengthy description for the Spring Integration entry so we may use another way.

spring-projects-issues commented 3 years ago

If you would like us to look at this issue, please provide the requested information. If the information is not provided within the next 7 days this issue will be closed.

spring-projects-issues commented 3 years ago

If you would like us to look at this issue, please provide the requested information. If the information is not provided within the next 7 days this issue will be closed.

artembilan commented 3 years ago

Thanks, @snicoll , for considering such an improvement!

I don't see fully your suggestion in action, but that's just probably because of my lack of experience in this project. So, I'll just answer to your request providing a table with mapping between start.spring.io entry and Spring Integration module and its docs:

start.spring.io entry Spring Integration Module Doc link
Spring for RabbitMQ spring-integration-amqp https://docs.spring.io/spring-integration/reference/html/amqp.html
Spring for Apache Geode spring-integration-gemfire https://docs.spring.io/spring-integration/reference/html/gemfire.html
Spring Web spring-integration-http https://docs.spring.io/spring-integration/reference/html/http.html
Spring Data JDBC spring-integration-jdbc https://docs.spring.io/spring-integration/reference/html/jdbc.html
Spring Data JPA spring-integration-jpa https://docs.spring.io/spring-integration/reference/html/jpa.html
Spring for Apache ActiveMQ 5, Spring for Apache ActiveMQ Artemis spring-integration-jms https://docs.spring.io/spring-integration/reference/html/jms.html
Spring for Apache Kafka spring-integration-kafka https://docs.spring.io/spring-integration/reference/html/kafka.html
Java Mail Sender spring-integration-mail https://docs.spring.io/spring-integration/reference/html/mail.html
Spring Data MongoDB, Spring Data Reactive MongoDB spring-integration-mongodb https://docs.spring.io/spring-integration/reference/html/mongodb.html
Spring Data R2DBC spring-integration-r2dbc https://docs.spring.io/spring-integration/reference/html/r2dbc.html
Spring Data Redis (Access+Driver), Spring Data Reactive Redis spring-integration-redis https://docs.spring.io/spring-integration/reference/html/redis.html
RSocket spring-integration-rsocket https://docs.spring.io/spring-integration/reference/html/rsocket.html
WebSocket spring-integration-stomp, spring-integration-websocket https://docs.spring.io/spring-integration/reference/html/stomp.html, https://docs.spring.io/spring-integration/reference/html/websocket.html
Spring Reactive Web spring-integration-webflux https://docs.spring.io/spring-integration/reference/html/webflux.html
Spring Security spring-integration-security https://docs.spring.io/spring-integration/reference/html/security.html
Spring Web Services spring-integration-ws https://docs.spring.io/spring-integration/reference/html/ws.html

That's only what we have access for at the moment somehow. Here is a list of the rest of Spring Integration modules which don't have any reasonable search clues from start.spring.io:

We probably may consider these "unreachable" modules in a separate issue with different approach...

Let me know if we are on the same page and how can I proceed with the fix!

Thanks again.

snicoll commented 3 years ago

I don't see fully your suggestion in action, but that's just probably because of my lack of experience in this project.

What your table describes, actually. Taking one random example, when you add "Spring Integration" and "Spring Security" the spring-integration-security module is added to the build automatically and a link to the dedicated section of the reference guide is added to HELP.md as well.

This may not improve the discovery upfront but we can address that using HELP.md or any other suggestion that you have. I am afraid that listing a reference to spring integration in all these modules does not sound practical.

We probably may consider these "unreachable" modules in a separate issue with different approach...

I am open to suggestions but I don't think we have to cover them all. I can see that the groovy module can be added automatically if one selects Groovy though.

Let me know if we are on the same page and how can I proceed with the fix!

Certainly a good first step would be to turn that table into something smart start.spring.io can do. If you want a concrete example of how to do this, you can have a look to the Testcontainers integration, in particular the registry. By building such a registry with the information in the table, a BuildCustomizer can automatically add the relevant module based on what the user has selected. Would you be willing to give that a try?

artembilan commented 3 years ago

Sure! I want to contribute such a feature. Thank you for the pointer in the Testcontainers support!

I'll do my best to adapt the discussed table: the rest of Spring Integration modules we can discuss later in the separate issue.

snicoll commented 3 years ago

Closing in favour of PR #605