- Reading and Writing Notes Items in Java: getItemValue Hands You a Vector, Not the Array You Know
In LotusScript, doc.GetItemValue returns a Variant array and you loop over it without a second thought. In Java, the same call returns a java.util.Vector — you have to know the element type, a missing item comes back empty instead of throwing, and if it holds DateTime objects it leaks memory. This piece covers reading and writing items on the Java Document: getItemValue and the typed getters and their missing-item behavior, what Java types replaceItemValue accepts and how it auto-creates an item, why appendItemValue quietly makes duplicate items, and three instincts LotusScript won't carry over.
2026.08.14 - What's in Domino 14.5.1 FP1: Remote RAG, 49 Fixes, and a JVM Bump
The first Fix Pack for Domino 14.5.1 shipped quietly on 2026-07-16 with a one-line 'recommended for all customers.' Here's what actually matters to developers and admins: RAG gains a Remote mode (LLM on a remote endpoint, vector DB still local), a good chunk of the ~49 fixes are cleaning up regressions 14.5.1 introduced itself, the JVM moves to Semeru 21.0.11+10, two OIDC security fixes, and a few notes.ini toggles worth knowing.
2026.08.13 - XPages/SSJS: Working with Multi-Value Fields Using java.util.Vector
LotusScript has no removeElementAt, so dropping one multi-value element means rebuilding an array. SSJS is the opposite — it runs on Java, a multi-value field reads in as a java.util.Vector, and addElement/removeElementAt/insertElementAt are right there, then you write it back with replaceItemValue. A field report on using Vector for multi-value work, why removeElementAt loops backwards, and the two traps you will hit (the empty field's [""], and getValue's type).
2026.08.12 - LotusScript Has No removeElementAt: Removing One Element from an Array, List, or Multi-Value Field
Removing one multi-value element is easy in SSJS/XPages — java.util.Vector has removeElementAt, loop backwards and delete by index. In LotusScript you hit a wall: no Vector, no removeElementAt, and Erase clears a whole array rather than dropping one element. This is a field report on the real options — figure out what your collection actually is first, then reach for Split/Join, an array rebuild, a List's Erase(tag), or Evaluate + @Replace.
2026.08.11 - Anatomy of a Java Agent: Triggers, Rights, Output, Debugging
The first three pieces assume the agent is already running — you can recycle, you have a Session, you run DQL. But how does a Java agent get triggered, whose rights does it run with, where does System.out go, and how do you debug it? This fills in the step before NotesMain(): the AgentBase skeleton, Trigger and unprocessedDocuments, the signer that decides an agent's rights, restricted vs unrestricted, and the System.out-to-log.nsf debugging path.
2026.08.10 - Running DQL from Java: DominoQuery and QueryResultsProcessor
The site's DQL trilogy teaches the query language, but it runs DQL from LotusScript or the console. In Java, DQL goes through two classes: DominoQuery compiles, tunes, and runs; QueryResultsProcessor sorts, aggregates, joins across databases, and outputs JSON. And a common first-time trip-up: you get both from the Database, not the Session. A field report on how DQL actually runs from Java.
2026.08.09 - Getting a Session in Java: NotesFactory, Local, and Remote
LotusScript's session is a global you never create; Java has no such thing. Before you touch a single document you have to obtain a Session yourself — and how you get one depends on whether your code runs as an agent, a standalone program, or remotely. A field report on NotesFactory's three paths, local (JNI) vs remote (DIIOP), the who-creates-recycles rule, and the two traps: JVM bitness and one session per thread.
2026.08.08 - Rewrote LotusScript in Java and Memory Blew Up? You Forgot recycle()
The same logic runs forever in LotusScript, then blows up the agent's memory the first time you loop it over tens of thousands of documents in Java. The reason is that every Java Domino object is backed by a native handle the garbage collector can't see. A field report on the mechanism, the four official rules, the loop leak pattern and its fix, NotesThread's role, and how local vs remote sessions change the cost.
2026.08.07 - Why Does the Same Notes User Fail a Comparison? Understanding NotesName's Three Name Formats
You compare a name to session.EffectiveUserName and it's never equal, even though it's obviously the same person. Or you write a user into a Readers field and they still can't see the document. Same root cause: a Notes name has three text forms — canonical, abbreviated, common — and you compared two different ones. A field report on NotesName: what each format is, which one Notes stores internally, and why every name comparison should normalise through NotesName first.
2026.08.06