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

时间:2014-07-07 10:32:12

标签: java lotus-domino ls2j

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

它可以编译我的java类和ls2j代码。 当我尝试在莲花中调用这个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 );     
}

结果是:

  

“entréejava”
  “GetAllDocuments”
  “警告!”
  “警告!”
  会话:“null

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

但我把令牌?我做错了什么?

一个想法?

1 个答案:

答案 0 :(得分:0)

我无法回答您的确切问题,因为我认为需要提供更多信息。猜测看起来你在调用之前没有创建会话对象。

我可以涵盖两点。

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

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

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

的日志记录机制