简体   繁体   English

多米诺骨牌同步。 如何将 CodeLock 等 Lotusscript 函数转换为 Java?

[英]Domino synchronization. How to convert Lotusscript functions like CodeLock to Java?

This class for syncronization in Lotusscript, create Lock for document by document ID.这个 class 用于 Lotusscript 中的同步,通过文档 ID 为文档创建锁定。 Implement functional: only one agent can simultaneously change document or documents under the lockID to database.实现功能:只有一个代理可以同时将lockID下的一个或多个文档更改为数据库。

Class classSynchronization
    
    Private lockName As String
    Private lockID As Integer

    Function getCount As long
        getCount = CodeLockCheck(Me.lockID)
    End Function
    
    Function Wait As Boolean
        Wait = CodeLock(Me.lockID) 
    End Function
    
    Sub New( lockNameID As String)
        
        Me.lockName = lockNameID
        Me.lockID = CreateLock(Me.lockName)

    '   MsgBox "Synchronization Lock: "+ Me.lockName+ " Count in queue: " + CStr (CodeLockCheck(Me.lockID)  )

    End Sub
    
    Sub Delete()
    
        Dim releaseLock As Boolean
        Dim deleteLock As Boolean
    
        '   MsgBox "Synchronization Release Lock: "+ Me.lockName+ " Count in queue: " + CStr (CodeLockCheck(Me.lockID)  )
        
        ' When we are finished, destroy this reference  to the lock
        releaseLock = CodeUnlock(Me.lockID)
        deleteLock = DestroyLock(Me.lockID) 
    
    End Sub 
    
End Class

How to convert this class to Java class in domino?如何在多米诺骨牌中将此 class 转换为 Java class?

There are no direct Java equivalents to the builtin locking (CodeLock, CodeUnLock, DestroyLock, CreateLock, DestroyLock...) functions in LotusScript. LotusScript 中没有与内置锁定(CodeLock、CodeUnLock、DestroyLock、CreateLock、DestroyLock...)函数直接等效的 Java。 You will need to learn about Java's synchronization primitives, analyze your application's synchronization requirements, and find the best fit to accomplish what your application requires.您将需要了解 Java 的同步原语,分析您的应用程序的同步需求,并找到最适合您的应用程序所需的东西。

  1. Is the Java operation synchronized(obj) work between NotesSession? NotesSession之间的Java操作同步(obj)是否有效? (In other words, 2 users run one agent at the same time and try to set changes in a document). (换句话说,2 个用户同时运行一个代理并尝试在文档中设置更改)。 where obj is a string and has the value NoteID.其中 obj 是一个字符串,其值为 NoteID。
  2. How to create the obj available between NotesSession?如何创建 NotesSession 之间可用的 obj?

No Effect没有效果

    import lotus.domino.*;
    import java.util.*;

public class JavaAgent extends AgentBase {

    public void NotesMain() {


        try {
            Session session = getSession();
            AgentContext agentContext = session.getAgentContext();
            Document doc = agentContext.getDocumentContext();

            String lock = doc.getNoteID();

            synchronized (lock) {

                for (int i = 1; i < 10; i++){
                    System.out.println(lock + " " + session.getEffectiveUserName() + " " + Integer.toString(i));
                    Thread.sleep(1000);
                }
            }

        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

Result:结果:

[002413:000171-00007F99DC253700] 12/03/2021 11:47:51 PM  HTTP JVM: 46AFE CN=Administrator/O=test 1
[002413:000171-00007F99DC253700] 12/03/2021 11:47:52 PM  HTTP JVM: 46AFE CN=Administrator/O=test 2
[002413:000171-00007F99DC253700] 12/03/2021 11:47:53 PM  HTTP JVM: 46AFE CN=Administrator/O=test 3
[002413:000173-00007F99DC4C7700] 12/03/2021 11:47:54 PM  HTTP JVM: 46AFE CN=User 3/O=test 1
[002413:000171-00007F99DC253700] 12/03/2021 11:47:54 PM  HTTP JVM: 46AFE CN=Administrator/O=test 4
[002413:000173-00007F99DC4C7700] 12/03/2021 11:47:55 PM  HTTP JVM: 46AFE CN=User 3/O=test 2
[002413:000171-00007F99DC253700] 12/03/2021 11:47:55 PM  HTTP JVM: 46AFE CN=Administrator/O=test 5
[002413:000173-00007F99DC4C7700] 12/03/2021 11:47:56 PM  HTTP JVM: 46AFE CN=User 3/O=test 3
[002413:000171-00007F99DC253700] 12/03/2021 11:47:56 PM  HTTP JVM: 46AFE CN=Administrator/O=test 6
[002413:000173-00007F99DC4C7700] 12/03/2021 11:47:57 PM  HTTP JVM: 46AFE CN=User 3/O=test 4
[002413:000171-00007F99DC253700] 12/03/2021 11:47:57 PM  HTTP JVM: 46AFE CN=Administrator/O=test 7
[002413:000173-00007F99DC4C7700] 12/03/2021 11:47:58 PM  HTTP JVM: 46AFE CN=User 3/O=test 5
[002413:000171-00007F99DC253700] 12/03/2021 11:47:58 PM  HTTP JVM: 46AFE CN=Administrator/O=test 8
[002413:000173-00007F99DC4C7700] 12/03/2021 11:47:59 PM  HTTP JVM: 46AFE CN=User 3/O=test 6
[002413:000171-00007F99DC253700] 12/03/2021 11:47:59 PM  HTTP JVM: 46AFE CN=Administrator/O=test 9
[002413:000173-00007F99DC4C7700] 12/03/2021 11:48:00 PM  HTTP JVM: 46AFE CN=User 3/O=test 7
[002413:000173-00007F99DC4C7700] 12/03/2021 11:48:01 PM  HTTP JVM: 46AFE CN=User 3/O=test 8
[002413:000173-00007F99DC4C7700] 12/03/2021 11:48:02 PM  HTTP JVM: 46AFE CN=User 3/O=test 9

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM