簡體   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