sboesebeck/morphiumGitHubLast refreshed Oct 2, 2026
This is a public, read-only report. Striff reads this repository's docs, turns each sentence that makes a claim about the code into a rule, and checks the rule against the code on the default branch. How this works
**WatchingCacheSynchronizer** — opens a MongoDB Change Stream (ChangeStreamMonitor) directly on the watched collections and reacts to whatever it sees change at the database layer, no matter who wrote it.
WatchingCacheSynchronizer depends on ChangeStreamMonitor
Holds
Read Oct 2
de.caluga.morphium.data.MorphiumRepository<T, K> — extends CrudRepository<T, K> with Morphium-specific escape hatches that have no equivalent in the Jakarta Data 1.0 specification: distinct(String fieldName) and morphium() (direct access to the underlying Morphium instance for aggregation pipelines, atomic field operations, change streams, and messaging), plus query() as a shortcut for morphium().createQueryFor(entityClass).
MorphiumRepository has a distinct method
Holds
Read Oct 2
de.caluga.morphium.data.MorphiumRepository<T, K> — extends CrudRepository<T, K> with Morphium-specific escape hatches that have no equivalent in the Jakarta Data 1.0 specification: distinct(String fieldName) and morphium() (direct access to the underlying Morphium instance for aggregation pipelines, atomic field operations, change streams, and messaging), plus query() as a shortcut for morphium().createQueryFor(entityClass).
MorphiumRepository has a morphium method
Holds
Read Oct 2
de.caluga.morphium.data.MorphiumRepository<T, K> — extends CrudRepository<T, K> with Morphium-specific escape hatches that have no equivalent in the Jakarta Data 1.0 specification: distinct(String fieldName) and morphium() (direct access to the underlying Morphium instance for aggregation pipelines, atomic field operations, change streams, and messaging), plus query() as a shortcut for morphium().createQueryFor(entityClass).
MorphiumRepository has a query method
Holds
Read Oct 2
Repository method names are parsed by MethodNameParser into a QueryDescriptor, which QueryExecutor then translates into a Morphium Query.
MethodNameParser depends on QueryDescriptor
Holds
Read Oct 2
Repository method names are parsed by MethodNameParser into a QueryDescriptor, which QueryExecutor then translates into a Morphium Query.
QueryExecutor depends on QueryDescriptor
Holds
Read Oct 2
Repository method names are parsed by MethodNameParser into a QueryDescriptor, which QueryExecutor then translates into a Morphium Query.
QueryExecutor depends on Query
Holds
Read Oct 2
JdqlParser parses the string into a JdqlQuery;
JdqlParser depends on JdqlQuery
Holds
Read Oct 2
Aggregate/grouping support (JdqlQuery.java:25-33, JdqlMethodBridge.java:443-620): SELECT COUNT(this), SUM(field), AVG(field), MIN(field), MAX(field) are compiled into a Morphium aggregation pipeline ($match → $group → optional $match for HAVING → optional $sort).
JdqlMethodBridge depends on JdqlQuery
Holds
Read Oct 2
SortMapper.apply(...) (and the equivalent inline logic in FindMethodBridge/JdqlMethodBridge) resolves each Sort.property() to its MongoDB field name and applies ascending/descending order (SortMapper.java:26-36).
SortMapper has an apply method
Holds
Read Oct 2
Return type T (single entity), Behavior requireSingle throws EmptyResultException on zero results, NonUniqueResultException on more than one, Source QueryResultHelper.java:34-44
QueryResultHelper has requireSingle
Holds
Read Oct 2
Return type Optional<T>, Behavior optionalSingle Optional.empty() on zero results, Optional.of(entity) on exactly one, NonUniqueResultException on more than one, Source QueryResultHelper.java:53-63
QueryResultHelper has optionalSingle
Holds
Read Oct 2
The key extension point is AbstractMorphiumRepository<T, K>: it implements all CRUD logic as plain doXxx() methods (doFindById, doFindAll, doSave, doDelete, ...) and exposes a protected void setMorphium(Morphium morphium) setter that your framework subclass or generated proxy must call to wire in a live Morphium instance before any doXxx() method is used.
AbstractMorphiumRepository has a doFindById method
Holds
Read Oct 2
The key extension point is AbstractMorphiumRepository<T, K>: it implements all CRUD logic as plain doXxx() methods (doFindById, doFindAll, doSave, doDelete, ...) and exposes a protected void setMorphium(Morphium morphium) setter that your framework subclass or generated proxy must call to wire in a live Morphium instance before any doXxx() method is used.
AbstractMorphiumRepository has a doFindAll method
Holds
Read Oct 2
The key extension point is AbstractMorphiumRepository<T, K>: it implements all CRUD logic as plain doXxx() methods (doFindById, doFindAll, doSave, doDelete, ...) and exposes a protected void setMorphium(Morphium morphium) setter that your framework subclass or generated proxy must call to wire in a live Morphium instance before any doXxx() method is used.
AbstractMorphiumRepository has a doSave method
Holds
Read Oct 2
The key extension point is AbstractMorphiumRepository<T, K>: it implements all CRUD logic as plain doXxx() methods (doFindById, doFindAll, doSave, doDelete, ...) and exposes a protected void setMorphium(Morphium morphium) setter that your framework subclass or generated proxy must call to wire in a live Morphium instance before any doXxx() method is used.
AbstractMorphiumRepository has a doDelete method
Holds
Read Oct 2
The key extension point is AbstractMorphiumRepository<T, K>: it implements all CRUD logic as plain doXxx() methods (doFindById, doFindAll, doSave, doDelete, ...) and exposes a protected void setMorphium(Morphium morphium) setter that your framework subclass or generated proxy must call to wire in a live Morphium instance before any doXxx() method is used.
AbstractMorphiumRepository has a setMorphium method
Holds
Read Oct 2
setMessagingWindowSize(int): number of messages processed per batch.
MessagingSettings has a setMessagingWindowSize method
Holds
Read Oct 2
setMessagingMultithreadded(boolean): process multiple messages in parallel using a platform-thread pool;
MessagingSettings has a setMessagingMultithreadded method
Holds
Read Oct 2
setUseChangeStream(boolean): use MongoDB Change Streams to get push‑style notifications for new messages;
MessagingSettings has a setUseChangeStream method
Holds
Read Oct 2
setMessagingPollPause(int): pause (in ms) between polling requests when not using Change Streams.
MessagingSettings has a setMessagingPollPause method
Holds
Read Oct 2
Msg.timestamp is used for ordering, not scheduling
Msg has timestamp
Holds
Read Oct 2
Morphium provides MessagingCacheSynchronizer (uses this messaging system) and WatchingCacheSynchronizer (uses Change Streams directly, no messaging needed) — see the [Developer Guide](./developer-guide.md#cache-synchronization) for which one to pick.
WatchingCacheSynchronizer may not depend on MorphiumMessaging
Holds
Read Oct 2
PoppyDB is a standalone MongoDB wire protocol-compatible server built on the InMemoryDriver.
PoppyDB depends on InMemoryDriver
Holds
Read Oct 2
MorphiumProcessor.registerMorphiumIdJsonCustomizers(...) (deployment) ist das **exakte Vorbild** für das, was wir bauen wollen:
MorphiumProcessor has a registerMorphiumIdJsonCustomizers method
Quelle driver.getNumConnectionsByHost(), Typ Pull, Inhalt Connections pro Host (für Multi-Host-Setups)
MorphiumDriver has a getNumConnectionsByHost method
Holds
Read Oct 2
Quelle MorphiumStorageListener<T> (Interface, bereits für MorphiumBlockingCallDetector genutzt), Typ Push (Event), Inhalt preStore / postStore / preRemove / postRemove / postLoad / preUpdate / postUpdate — je Aufruf, mit Objekt/Query/Class-Kontext
MorphiumStorageListener has preStore
Holds
Read Oct 2
Quelle MorphiumStorageListener<T> (Interface, bereits für MorphiumBlockingCallDetector genutzt), Typ Push (Event), Inhalt preStore / postStore / preRemove / postRemove / postLoad / preUpdate / postUpdate — je Aufruf, mit Objekt/Query/Class-Kontext
MorphiumStorageListener has postStore
Holds
Read Oct 2
Quelle MorphiumStorageListener<T> (Interface, bereits für MorphiumBlockingCallDetector genutzt), Typ Push (Event), Inhalt preStore / postStore / preRemove / postRemove / postLoad / preUpdate / postUpdate — je Aufruf, mit Objekt/Query/Class-Kontext
MorphiumStorageListener has preRemove
Holds
Read Oct 2
Quelle MorphiumStorageListener<T> (Interface, bereits für MorphiumBlockingCallDetector genutzt), Typ Push (Event), Inhalt preStore / postStore / preRemove / postRemove / postLoad / preUpdate / postUpdate — je Aufruf, mit Objekt/Query/Class-Kontext
MorphiumStorageListener has postRemove
Holds
Read Oct 2
Quelle MorphiumStorageListener<T> (Interface, bereits für MorphiumBlockingCallDetector genutzt), Typ Push (Event), Inhalt preStore / postStore / preRemove / postRemove / postLoad / preUpdate / postUpdate — je Aufruf, mit Objekt/Query/Class-Kontext
MorphiumStorageListener has postLoad
Holds
Read Oct 2
Quelle MorphiumStorageListener<T> (Interface, bereits für MorphiumBlockingCallDetector genutzt), Typ Push (Event), Inhalt preStore / postStore / preRemove / postRemove / postLoad / preUpdate / postUpdate — je Aufruf, mit Objekt/Query/Class-Kontext
MorphiumStorageListener has preUpdate
Holds
Read Oct 2
Quelle MorphiumStorageListener<T> (Interface, bereits für MorphiumBlockingCallDetector genutzt), Typ Push (Event), Inhalt preStore / postStore / preRemove / postRemove / postLoad / preUpdate / postUpdate — je Aufruf, mit Objekt/Query/Class-Kontext
MorphiumStorageListener has postUpdate
Holds
Read Oct 2
Registrierung **ausschließlich** am Ende von MorphiumProducer.buildMorphium(), direkt neben der bestehenden Zeile (aktuell ca. MorphiumBlockingCallDetector.registerOn(instance) fehlt noch im aktuell gelesenen Ausschnitt bis Zeile 500 — muss beim Patch verifiziert werden, aber der Javadoc von MorphiumBlockingCallDetector belegt exakt diesen Aufrufort/diese Reihenfolge).
MorphiumProducer depends on MorphiumBlockingCallDetector
Holds
Read Oct 2
Configure via AuthSettings.setAuthMechanism("MONGODB-X509") together with the existing SslHelper mTLS setup
AuthSettings has a setAuthMechanism method
Holds
Read Oct 2
MethodNameParser/QueryExecutor (query derivation from method names), JdqlParser/ JdqlMethodBridge (the @Query JDQL grammar), FindMethodBridge (@Find/@Delete with @By parameter binding), pagination (AbstractMorphiumRepository's offset and cursor pagination), and sorting.
MethodNameParser is in morphium-jakarta-data
Holds
Read Oct 2
MethodNameParser/QueryExecutor (query derivation from method names), JdqlParser/ JdqlMethodBridge (the @Query JDQL grammar), FindMethodBridge (@Find/@Delete with @By parameter binding), pagination (AbstractMorphiumRepository's offset and cursor pagination), and sorting.
QueryExecutor is in morphium-jakarta-data
Holds
Read Oct 2
MethodNameParser/QueryExecutor (query derivation from method names), JdqlParser/ JdqlMethodBridge (the @Query JDQL grammar), FindMethodBridge (@Find/@Delete with @By parameter binding), pagination (AbstractMorphiumRepository's offset and cursor pagination), and sorting.
JdqlParser is in morphium-jakarta-data
Holds
Read Oct 2
MethodNameParser/QueryExecutor (query derivation from method names), JdqlParser/ JdqlMethodBridge (the @Query JDQL grammar), FindMethodBridge (@Find/@Delete with @By parameter binding), pagination (AbstractMorphiumRepository's offset and cursor pagination), and sorting.
JdqlMethodBridge is in morphium-jakarta-data
Holds
Read Oct 2
MethodNameParser/QueryExecutor (query derivation from method names), JdqlParser/ JdqlMethodBridge (the @Query JDQL grammar), FindMethodBridge (@Find/@Delete with @By parameter binding), pagination (AbstractMorphiumRepository's offset and cursor pagination), and sorting.
FindMethodBridge is in morphium-jakarta-data
Holds
Read Oct 2
MethodNameParser/QueryExecutor (query derivation from method names), JdqlParser/ JdqlMethodBridge (the @Query JDQL grammar), FindMethodBridge (@Find/@Delete with @By parameter binding), pagination (AbstractMorphiumRepository's offset and cursor pagination), and sorting.
AbstractMorphiumRepository is in morphium-jakarta-data
Holds
Read Oct 2
the Morphium bean and MorphiumProperties (morphium.* configuration, MorphiumAutoConfiguration), the @EnableMorphiumRepositories/ MorphiumRepositoryRegistrar/MorphiumRepositoryFactoryBean JDK-proxy mechanism that turns a @Repository interface into a Spring bean, the @MorphiumTransactional AOP aspect, and the actuator health indicator.
MorphiumProperties is in spring-boot-morphium/morphium-spring-boot-autoconfigure
Holds
Read Oct 2
the Morphium bean and MorphiumProperties (morphium.* configuration, MorphiumAutoConfiguration), the @EnableMorphiumRepositories/ MorphiumRepositoryRegistrar/MorphiumRepositoryFactoryBean JDK-proxy mechanism that turns a @Repository interface into a Spring bean, the @MorphiumTransactional AOP aspect, and the actuator health indicator.
MorphiumAutoConfiguration is in spring-boot-morphium/morphium-spring-boot-autoconfigure
Holds
Read Oct 2
the Morphium bean and MorphiumProperties (morphium.* configuration, MorphiumAutoConfiguration), the @EnableMorphiumRepositories/ MorphiumRepositoryRegistrar/MorphiumRepositoryFactoryBean JDK-proxy mechanism that turns a @Repository interface into a Spring bean, the @MorphiumTransactional AOP aspect, and the actuator health indicator.
EnableMorphiumRepositories is in spring-boot-morphium/morphium-spring-boot-autoconfigure
Holds
Read Oct 2
the Morphium bean and MorphiumProperties (morphium.* configuration, MorphiumAutoConfiguration), the @EnableMorphiumRepositories/ MorphiumRepositoryRegistrar/MorphiumRepositoryFactoryBean JDK-proxy mechanism that turns a @Repository interface into a Spring bean, the @MorphiumTransactional AOP aspect, and the actuator health indicator.
MorphiumRepositoryRegistrar is in spring-boot-morphium/morphium-spring-boot-autoconfigure
Holds
Read Oct 2
the Morphium bean and MorphiumProperties (morphium.* configuration, MorphiumAutoConfiguration), the @EnableMorphiumRepositories/ MorphiumRepositoryRegistrar/MorphiumRepositoryFactoryBean JDK-proxy mechanism that turns a @Repository interface into a Spring bean, the @MorphiumTransactional AOP aspect, and the actuator health indicator.
MorphiumRepositoryFactoryBean is in spring-boot-morphium/morphium-spring-boot-autoconfigure
Holds
Read Oct 2
the Morphium bean and MorphiumProperties (morphium.* configuration, MorphiumAutoConfiguration), the @EnableMorphiumRepositories/ MorphiumRepositoryRegistrar/MorphiumRepositoryFactoryBean JDK-proxy mechanism that turns a @Repository interface into a Spring bean, the @MorphiumTransactional AOP aspect, and the actuator health indicator.
MorphiumTransactional is in spring-boot-morphium/morphium-spring-boot-autoconfigure
Holds
49 rules from 7 docs
See these where the change is. The browser extension puts a pull request's doc findings, and a diagram of what it changed, on the GitHub page itself, so the code and what your docs say about it are side by side.