【问题标题】:I can't open a database because the session is always null我无法打开数据库,因为会话始终为空
【发布时间】:2014-07-07 10:32:12
【问题描述】:

我想为我的所有网络服务创建一个日志。 我有java登录,它可以工作。 我想在 Lotus Domino 中使用我对 LS2J 类做的 java 类做同样的事情。

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

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中: 我不能有一个会话,这总是空的

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”
“获取所有文档”
“警告!”
“警告!”
会话:“空

更新 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:无法从 Domino 服务器获取 IOR: http://myhost/diiop_ior.txt 在 lotus.domino.NotesFactory.requestIORPlain(Unknown Source) at lotus.domino.NotesFactory.requestIORUsingArgs(未知来源)在 lotus.domino.NotesFactory.getIOR(未知来源)在 lotus.domino.NotesFactory.createSessionC(Unknown Source) at lotus.domino.NotesFactory.createSession(Unknown Source) at com.pasquier.launcher.LogWebService.setLog(LogWebService.java:64) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 在 java.lang.reflect.Method.invoke(Method.java:611) 在 lotus.domino.JavaConnectInvoker.invoke(未知来源)在 sun.reflect.GeneratedMethodAccessor3780.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 在 java.lang.reflect.Method.invoke(Method.java:611)

我尝试更改服务器配置中的某些点:

在服务器文档中,我转到 Internet 协议选项卡,然后是 DIIOP 选项卡。我在主机名/地址字段中指定服务器的 Internet 主机名。 我转到 Internet Protocols 选项卡、HTTP 选项卡和 R5 Basics 选项卡。然后我将“允许 HTTP 客户端浏览数据库”字段设置为是。

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

 NotesException: Invalid user name/password

但是我放了令牌?我做错了什么?

一个想法?

【问题讨论】:

  • logDTO.setDateHeureDebutWS(dt)更改为call logDTO.setDateHeureDebutWS(dt)
  • 当你添加call 指令时它是否编译lotusscript,正如我在之前的评论中提到的那样?
  • 我尝试“调用 logDTO.setDateHeureDebutWS(dt)”但我有这个错误:108:不是成员 SETDATEHEUREDEBUTWS
  • 添加显示你如何声明和初始化logDTO的lotusscript代码
  • 变量logDTO 指的是LogWSDTO 类的一个实例,并且只有一个方法setDateHeureDebutWS(dateHeureDebut As String) 如您所见,它需要一个字符串参数,而您正在尝试传递NotesDateTime 参数价值。

标签: java lotus-domino ls2j


【解决方案1】:

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

不过,我可以涵盖两点。

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

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

另一点与您的日志记录有关。在 Java 中创建日志记录机制似乎有些矫枉过正。您可以在 LotusScript 中完成同样的事情。它甚至有自己的日志机制,称为NotesLog

【讨论】:

  • 你说得对,我是从这个意义上说的。我需要 web 服务 java 和 lotusScript 的日志。我已经在 java 中有这个日志,所以我想在 Lotus 中使用它。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-07
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 2015-08-11
  • 1970-01-01
相关资源
最近更新 更多