我无法打开数据库,因为会话始终为空



我想为我所有的web服务创建一个日志。我有java的日志,它的工作原理。我想在Lotus Domino中使用我在LS2J类中使用的java类来做同样的事情。

它可以编译java类和ls2j代码。当我尝试在lotus中调用这个java时,它工作了!但是当我在java中调用getter时,我有一个空值!

Class GetAllDocuments
Private logDTO As LogWSDTO
Private objectJavaA As JAVAOBJECT   
Private a  As LogWebService
Private db As NotesDatabase
Public Sub New()                
    Set logDTO = New LogWSDTO() 
        Set a = New LogWebService()     
    Set objectJavaA = a.getJavaObject   
End Sub
Public Function GetAllDocuments()
    call logDTO.setNomBaseNotesWS(db.FileName)           
    objectJavaA.setLog(logDTO.getJavaObject())  
End Function 

我在lotus中有一个类,它叫做我的java类:

UseLSX "*javacon" 
Class LogWSDTO
sessionJava As JAVASESSION      
classJava As JAVACLASS
objectJava As JAVAOBJECT        
methodJava As JAVAMETHOD    
Public Sub New()
    Set sessionJava = New JAVASESSION
    Set classJava = sessionJava.GetClass("com.pasquier.DTO.WS/LogWSDTO")
    Set objectJava = classJava.CreateObject     
End Sub
Public Function getNomBaseNotesWS()
    Set methodJava = classJava.GetMethod("getNomBaseNotesWS","()Ljava/lang/String;")
    getNomBaseNotesWS = objectJava.getNomBaseNotesWS()      
End Function
Public Sub setNomBaseNotesWS(nomBaseNotesWS As String)      
    Set methodJava = classJava.GetMethod("setNomBaseNotesWS","(Ljava/lang/String;)V")
    objectJava.setNomBaseNotesWS(nomBaseNotesWS)        
End Sub

java:我不能有会话,这总是null

public void setLog(LogWSDTO log) {
    System.out.println("entrée java");      
    System.out.println(log.getNomBaseNotesWS()); <== I Have the data !!
    this.logDTO = log;  
            if (session == null)
    {
        System.out.println("alert !");              
        session =  session.getSession(); <== it doesn't compil i pass it in comment to test         
        System.out.println("alert !");
    }       
    System.out.println("Session :" + session );     
}

的结果是:

"主菜java "
"GetAllDocuments"
"警告!"
"警告!"
Session:"null

UPDATE 2:

我修改了我的代码,我用代理获取我的会话LotusScript的令牌,我放入myLogBean。在java中,我尝试创建一个新会话:

public void setLog(LogWSDTO log) {
        this.logDTO = log;  
        String sessionParam = logDTO.getSessionParam();             
        if (session == null)
        {               
            try {
                session = lotus.domino.NotesFactory.createSession("myhost",sessionParam);

            } catch (NotesException e) {
                // TODO Bloc catch auto-généré
                e.printStackTrace();
            }
            System.out.println("alert !");
        }
        System.out.println("Session :" + session );     
    }

结果是:

NotesException: Could not get IOR from Domino Server:http://myhost/diiop_ior.txt在lotus.domino.NotesFactory。requestIORPlain(未知来源)atlotus.domino.NotesFactory。requestIORUsingArgs(未知来源)lotus.domino.NotesFactory。getIOR(来源不明)lotus.domino.NotesFactory。createSessionC(未知来源)atlotus.domino.NotesFactory。createSession(未知来源)com.pasquier.launcher.LogWebService.setLog (LogWebService.java: 64)sun.reflect.NativeMethodAccessorImpl。invoke0(本机方法)atsun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java: 60)在sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java: 37)java.lang.reflect.Method.invoke(Method.java:611lotus.domino.JavaConnectInvoker。调用(未知源)atsun.reflect.GeneratedMethodAccessor3780。调用(未知源)atsun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java: 37)java.lang.reflect.Method.invoke (Method.java: 611)

我试图改变服务器配置中的一些点:

在Server文档中,我打开Internet Protocols选项卡,然后是DIIOP选项卡。我在主机名/地址字段中为服务器指定Internet主机名。我打开了互联网协议选项卡、HTTP选项卡和R5基础选项卡。然后我将"允许HTTP客户端浏览数据库"字段设置为Yes。

我添加任务DIIOP,它不是相同的错误:

 NotesException: Invalid user name/password

但是我放了token ?我做错了什么?

一个想法?

我无法回答你的确切问题,因为我认为需要更多的信息才能这样做。据猜测,在调用会话对象之前,似乎没有创建会话对象。

不过我可以讲两点。

你提到WebServices和LS2J。您是说SOAP web服务在您的Java代码中吗?如果是这样,那么您的代码将永远无法工作,因为LotusScript使用与WebServices相关的保留对象。这个保留对象会阻止LS2J正常工作。

如果是这种情况,唯一的解决方案是使用全Java。

另一点与您的日志记录有关。在Java中创建日志记录机制似乎有些多余。您可以在LotusScript中完成同样的事情。它甚至有自己的日志机制,叫做NotesLog

相关内容

最新更新