Skip to content

Develop + SDK docs for the Spring-style Java model: new "Coming from Spring Boot" guide, per-language split, annotation-free extensions#128

Merged
iliyan-velichkov merged 15 commits into
masterfrom
feat/java-spring-style-dev-model
Jun 22, 2026
Merged

Develop + SDK docs for the Spring-style Java model: new "Coming from Spring Boot" guide, per-language split, annotation-free extensions#128
iliyan-velichkov merged 15 commits into
masterfrom
feat/java-spring-style-dev-model

Conversation

@iliyan-velichkov

@iliyan-velichkov iliyan-velichkov commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Summary

Updates the Develop guide and the Java SDK reference to the Spring-style client-Java model introduced in eclipse-dirigible/dirigible#6051, and reorganizes the affected pages so a reader instantly finds the language they want.

New: "Coming from Spring Boot"

A new docs/help/develop/coming-from-spring-boot.md (linked from the Develop sidebar) for developers who already know Spring:

  • A Spring/Jakarta → Dirigible mapping table (@Component, @Autowired@Inject, ApplicationContextBeans, @RestController@Controller, Spring Data→JavaRepository, @Scheduled/@JmsListener, TextWebSocketHandler/@ServerEndpoint, @RolesAllowed@Roles, lifecycle).
  • A "Side-by-side: implementing each artifact" section that shows the Spring example first, then the Dirigible one for Listener, Job, WebSocket, Controller, Repository and Extension — both the self-describing-interface and method-level styles — so the similarity is obvious. Every snippet (both Spring and Dirigible) is fully imported and copy-paste-ready.

Develop pages — current model + per-language split

  • dependency-injection@Component, constructor / field / collection injection, Beans; the "How it is wired" section is kept implementation-agnostic (behavioural guarantees only, no internal class names) so it won't go stale.
  • scheduled-jobs / message-listeners / websockets — the two clean styles (self-describing interface vs method-level annotation); reflective/hybrid wording removed; real examples linked to the matching sample repos.
  • extension-providers — rewritten to the annotation-free model (plain interface + @Component contribution + List<…> collection injection / Extensions.find); the "Consume at runtime" section split into clear Java vs TypeScript/JavaScript subsections.
  • rest-apis and entities-and-persistence — the former "side by side" code blocks are now separate ### Java / ### TypeScript / JavaScript subsections (Java first); constructor injection shown.
  • security-and-roles, working-with-data, working-with-files-and-cms, working-with-git@Roles, the Java User API, and the IO/CMS/Git examples split per language; the tenancy/multi-tenancy sections removed from entities-and-persistence, working-with-data and working-with-files-and-cms.
  • decorators-model, languages/java, develop/index — corrected the stale "@Scheduled/@Listener/@Extension are meta-@Component" claim and dropped removed @Extension/@ExtensionPoint references.

SDK reference (/sdk)

  • component@Component, @Inject (field/constructor/parameter + collection), @Repository as a bean; new Beans page wired into the sidebar.
  • job / messaging / net — self-describing JobHandler/MessageHandler/WebsocketHandler; method-level @Scheduled/@Listener; new @OnOpen/@OnMessage/@OnError/@OnClose; reflective/class-level wording removed.
  • extensions — annotation-free model; Extensions.find/getExtensions clarified.
  • db/store, http/decorators, get-started — Beans instead of BeanProvider for client access; @Controller is a bean (constructor injection).

Other help & blog pages

Swept docs/help/** and the 2026-05-19 Java-decorators blog so they no longer present the removed/old API (no client-facing BeanProvider, no @Extension/@ExtensionPoint, no @Scheduled(cron=…) for Dirigible, no removed internal class names). TypeScript/JavaScript content and the classic registry artefacts (.job, .listener, .extension, …) are unchanged.

Documents eclipse-dirigible/dirigible#6051merge after it (and after the sample PRs the examples reference).

🤖 Generated with Claude Code

iliyan-velichkov and others added 3 commits June 19, 2026 16:55
Update the Develop section for the new Spring-style Java SDK surface
introduced by eclipse-dirigible/dirigible#6051:

- dependency-injection.md: rewrite the Java section to @component (with
  Spring naming), constructor injection (preferred), field @Inject,
  collection injection (List<T>), @PostConstruct/@PreDestroy, and the
  Beans facade; client code should not use BeanProvider. Describe the
  single ComponentContainer per ClientClassLoader generation and remove
  RepositoryClassConsumer / RepositoryRegistry / DependencyResolver and
  the fixed @order 100/200/300 chain.
- decorators-model.md: add @component to the parallel-surface table;
  note strong interfaces AND method-level annotations for jobs /
  listeners / websockets; replace the @order wiring description.
- scheduled-jobs.md, message-listeners.md, websockets.md: show BOTH the
  strong interface and the method-level annotation on a @component
  (@scheduled / @Listener / @OnOpen/@OnMessage/@OnError/@onclose),
  keeping the reflective fallback note.
- extension-providers.md: present collection injection as the
  recommended Spring-style way to consume all providers, keeping
  Extensions.find as the programmatic / cross-runtime alternative.
- rest-apis.md, entities-and-persistence.md: controllers use
  constructor injection of the repository.
- security-and-roles.md: add a Java vs TypeScript User API parity table.
- languages/java.md: align its DI section with the new model.

Adds Sample project and SDK reference links across the Java sections.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Rewrite the Java sections of scheduled-jobs, message-listeners and
websockets to exactly two styles, never mixed on one @component class,
with no reflective by-name fallback:

- Style 1 is the self-describing interface (JobHandler.cron(),
  MessageHandler.destination()/kind(), WebsocketHandler.endpoint()) on a
  @component, carrying the binding itself - no class-level
  @Scheduled/@Listener/@websocket. Mirrors org.quartz.Job /
  jakarta.jms.MessageListener / TextWebSocketHandler.
- Style 2 is the method-level annotation (@Scheduled/@Listener), except
  websockets keep @websocket as a class annotation (the endpoint has no
  method-level home, like Jakarta @serverendpoint) with @OnOpen/
  @OnMessage/@OnError/@onclose methods.

Drop all reflective/hybrid wording and update the decorators-model
parallel-surface table and handler-styles section to match.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…mples

Add a Spring Boot -> Dirigible mapping page (annotation table + key
differences) and link it from the develop index. Replace the placeholder
Java snippets in the building-block pages with the actual code from the
dirigiblelabs/sample-java-* repos, showing both the self-describing
interface and method-level annotation styles where applicable, each with
a "Sample project" link and an SDK reference.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@iliyan-velichkov iliyan-velichkov changed the title Develop docs: Spring-style Java model (@Component, constructor & collection injection, method-level callbacks, Java security API) Develop docs: Spring-style Java model + "Coming from Spring Boot" guide + real sample examples Jun 22, 2026
iliyan-velichkov and others added 9 commits June 22, 2026 11:46
…, per-artifact comparisons

- Add "Coming from Spring Boot" to the Develop sidebar (config.mts)
- Rewrite extension-providers: extension point = plain interface,
  contribution = @component (no @Extension/@ExtensionPoint); split
  Consume-at-runtime into Java (List injection + Extensions.find) and TS
- working-with-data: split SQL examples into Java / TS subsections, drop
  the Multi-tenancy section
- coming-from-spring-boot: add side-by-side per-artifact examples
  (Listener, Job, WebSocket, Controller, Repository, Extension) using
  real classes from the sample-java-* repos

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…Key differences section

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ions

Reorganize security-and-roles, working-with-files-and-cms, and
working-with-git develop pages so each topic separates its Java and
TypeScript/JavaScript examples under ### Java / ### TypeScript / JavaScript
subheadings (Java first), matching the convention already used on the data,
listeners, and jobs pages. Where a feature is config-only or facade-only,
that is stated explicitly instead of forcing a split. No documented APIs
or behavior changed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…DI 'How it is wired' implementation-agnostic

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…and working-with-files-and-cms

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…(PR #6051)

- component: @component bean + field/constructor/parameter @Inject + collection
  injection; @repository is a plain bean; new Beans facade page + sidebar entry
- job: @scheduled is method-level only; JobHandler is self-describing (cron()+run())
- messaging: @Listener is method-level only; MessageHandler is self-describing
- net: @websocket + @onx, or self-describing WebsocketHandler; drop reflective fallback
- extensions: remove @Extension/@ExtensionPoint; plain-interface points + @component
  contributions; find(Class) no longer throws checked exception
- http: @controller is a managed bean (constructor injection, no no-arg ctor needed)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…Provider

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sweep the help docs and the Java-decorators blog so the Java model
matches eclipse-dirigible/dirigible #6051: SDK annotations under
org.eclipse.dirigible.sdk.*, @Component/@Inject DI with constructor
injection preferred, @repository extends JavaRepository<T>, the Beans
facade instead of the platform-internal BeanProvider, method-level
@scheduled(expression=...), and plain-interface extension points with
@component contributions consumed via List<T> / Extensions.find.

Removes the retired Java surface (@Extension/@ExtensionPoint,
@scheduled(cron=...), the JavaClassConsumer fan-out and the named
internals) from the Java sections only. TypeScript content, the classic
registry artefacts, and docs/help/develop|api|sdk are left unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…stale meta-annotation list

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@iliyan-velichkov iliyan-velichkov self-assigned this Jun 22, 2026
iliyan-velichkov and others added 2 commits June 22, 2026 14:52
…ng from Spring Boot'

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…Coming from Spring Boot'

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@iliyan-velichkov iliyan-velichkov changed the title Develop docs: Spring-style Java model + "Coming from Spring Boot" guide + real sample examples Develop + SDK docs for the Spring-style Java model: new "Coming from Spring Boot" guide, per-language split, annotation-free extensions Jun 22, 2026
…sample link

The sample-java-* PRs are merged to master, so the extension-provider sample now lives on
master — reference the repo without the (branch feat/spring-style-extension-injection) suffix.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@iliyan-velichkov iliyan-velichkov requested a review from delchev June 22, 2026 14:44
@iliyan-velichkov iliyan-velichkov merged commit de66073 into master Jun 22, 2026
@iliyan-velichkov iliyan-velichkov deleted the feat/java-spring-style-dev-model branch June 22, 2026 14:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant