繁体   English   中英

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

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

这个 class 用于 Lotusscript 中的同步,通过文档 ID 为文档创建锁定。 实现功能:只有一个代理可以同时将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

如何在多米诺骨牌中将此 class 转换为 Java class?

LotusScript 中没有与内置锁定(CodeLock、CodeUnLock、DestroyLock、CreateLock、DestroyLock...)函数直接等效的 Java。 您将需要了解 Java 的同步原语,分析您的应用程序的同步需求,并找到最适合您的应用程序所需的东西。

  1. NotesSession之间的Java操作同步(obj)是否有效? (换句话说,2 个用户同时运行一个代理并尝试在文档中设置更改)。 其中 obj 是一个字符串,其值为 NoteID。
  2. 如何创建 NotesSession 之间可用的 obj?

没有效果

    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();
        }
    }
}

结果:

[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