Creating first plugin, action on property add

I am having quite a lengthy copy paste session with ai. I am trying to create a plugin that captures events when properties are added to a node.

getting such stuff

import org.neo4j.graphdb.event.TransactionData;
import org.neo4j.graphdb.event.TransactionEventListener;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.RelationshipType;
import org.neo4j.graphdb.Label;
import org.neo4j.graphdb.Transaction;
import org.neo4j.logging.Log;

public class PropertyChangeListener implements TransactionEventListener<Object> {

    private final Log log;

    public PropertyChangeListener(Log log) {
        this.log = log;
    }

    @Override
    public Object beforeCommit(TransactionData data, Transaction tx, GraphDatabaseService db) {
        data.assignedNodeProperties().forEach(prop -> {
            Node node = prop.entity();
            log.info("Property changed: " + prop.key() + " on node " + node.getId());
            Node targetNode = tx.findNode(Label.label("Person"), "name", "test22");
            if (targetNode != null) {
                node.createRelationshipTo(targetNode, RelationshipType.withName("CONNECTED_TO"));
                log.info("Relationship created from node " + node.getId() + " to node " + targetNode.getId());
            }
        });
        return null;
    }

    @Override
    public void afterCommit(TransactionData data, Object state, GraphDatabaseService db) {
        // Not used in this example
    }

    @Override
    public void afterRollback(TransactionData data, Object state, GraphDatabaseService db) {
        // Not used in this example
    }
}
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.procedure.Description;
import org.neo4j.procedure.Procedure;
import org.neo4j.logging.Log;
import org.neo4j.procedure.Context;
import org.neo4j.kernel.internal.GraphDatabaseAPI;

import java.util.stream.Stream;

public class ExampleProcedures {

    @Context
    public GraphDatabaseService db;

    @Context
    public Log log;

    private static boolean isListenerRegistered = false;

    @Procedure
    @Description("com.uo.neo4j.helloWorld")
    public Stream<StringResult> helloWorld() {
        return Stream.of(new StringResult("Hello, World!"));
    }

    @Procedure
    @Description("com.uo.neo4j.registerPropertyChangeListener")
    public void registerPropertyChangeListener() {
        if (!isListenerRegistered) {
            PropertyChangeListener listener = new PropertyChangeListener(log);
            ((GraphDatabaseAPI) db).getDependencyResolver()
                .resolveDependency(org.neo4j.kernel.impl.api.TransactionEventHandlers.class)
                .registerTransactionEventHandler(listener);
            isListenerRegistered = true;
            log.info("PropertyChangeListener registered");
        } else {
            log.info("PropertyChangeListener is already registered");
        }
    }

    @Procedure
    @Description("com.uo.neo4j.dummyProcedure")
    public void dummyProcedure() {
        // A dummy procedure to ensure the class is loaded
    }

    public static class StringResult {
        public final String result;

        public StringResult(String result) {
            this.result = result;
        }
    }
}

using this as a template