多线程化一个java代理

时间:2014-07-14 15:13:05

标签: java multithreading lotus-domino lotusscript lotus-formula

java代理必须在后台上传文件并返回上传文件的Url。上传时,代理必须报告其进度。

我将代理标记为“在后台客户端线程中运行。

我陷入了以下两难境地:

  • 我可以从Lotus Script运行代理并将其参数传递到In-Memory文件中,但客户端实际上并不在自己的线程中运行。相反,它会阻止整个客户端。
  • 我可以从公式运行代理,但是我无法传递任何参数!
  • 如果我使用Lotus Script并在Java中自己处理线程,我的线程甚至都没有开始!

我读过Notes client doesn't support multithreading。但我无法创建代理RunOnServer,因为它正在访问仅适用于客户端的Web服务器。

顺便说一句,这与another question of mine有关。

有没有更好的解决方案?

1 个答案:

答案 0 :(得分:1)

如果您无法创建代理RunOnServer,则可以使用LS2J代替代理。使用线程创建自己的类并使用其属性 以下是自定义Java ClassJava Timer的示例:

import java.util.Timer;
import java.util.TimerTask;

public class Test
{
    private boolean _isOver;
    private int _counter;
    private Timer _timer;
    private String _url; 

    public Test()
    {
        _timer = new Timer("Timer");
    }

    public void Start() //Add parameters here that you want to use in Java
    {
        _counter = 0;
        _isOver = false;
        _url = "";

        TimerTask timerTask = new TimerTask()
        {
            public void run()
            {   
                if (_counter++ == 9)
                {
                    _isOver = true;

                    _timer.cancel();

                    _url = "http://stackoverflow.com/";
                }
            }
        };

        _timer.scheduleAtFixedRate(timerTask, 30, 5000);
    }

    public int getCounter() { return _counter; }
    public boolean getIsOver() { return _isOver; }
    public String getURL() { return _url; }
}

LotusScript中添加全局LS2J变量:

(Options)
Uselsx "*javacon"
Use "MyJavaLibrary"

(Declarations)
Dim jSession As JavaSession
Dim jClass As JavaClass
Dim jObject As JavaObject

Sub Initialize

    Set jSession = New JavaSession()
    Set jClass = jSession.GetClass("MyClass")
    Set jObject = jClass.CreateObject

End Sub

要开始Java object使用(LotusScript中的Button):

Call jObject.Start() 'Call with parameters that you want to use in Java

要检查状态并显示进度使用情况(LotusScript中的Timer):

If jObject.getIsOver() Then
    s$ = jObject.getURL()
    'Show results
Else        
    i% = jObject.getCounter()
    'Show progress
End If