2013-10-29 7 views
1

업데이트 10 월 30 일, 질문 하단을 참조하십시오.Domino Java Agent에서 SBT를 사용하려고 시도하면 NoSuchMethodError : org/apache/http/protocol/BasicHttpContext와 함께 실패합니다. <init>() V

SBT의 sbt.sample.app GetAllCommunitiesApp.java를 기반으로 Eclipse에서 독립 실행 형 Java 응용 프로그램의 작업 예제를 만들었습니다. 내 유일한 변경은 수동으로 BasicEndpoint를 만들어서 관리되는 Bean의 사용을 건너 뛰도록하는 것입니다. 끝점 구성 (따라서 managed-beans.xml 읽기).이 말처럼 Eclipse가 멋지게 작동합니다.

코드를 로컬 Notes Java 에이전트 (에이전트가 로컬 데이터베이스에 배치 됨)로 이동하면, 먼저 가장 먼저 SBT jar 파일을 C : \ Program Files (x86) \ IBM \ Lotus \ Notes \ jvm \ lib \ ext 카탈로그에 복사했습니다.이 파일의 목록은 아래를 참조하십시오. 다음 스택 추적;

StackOverflow에 다른 사이트를 검색 59,868,836,511,984,161,953,210
Exception in thread "AgentThread: JavaAgent" java.lang.NoSuchMethodError: org/apache/http/protocol/BasicHttpContext.<init>()V 
    at org.apache.http.impl.client.AbstractHttpClient.createHttpContext(AbstractHttpClient.java:285) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:851) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784) 
    at com.ibm.sbt.services.client.ClientService.executeRequest(ClientService.java:1043) 
    at com.ibm.sbt.services.client.ClientService._xhr(ClientService.java:1006) 
    at com.ibm.sbt.services.client.ClientService.execRequest(ClientService.java:972) 
    at com.ibm.sbt.services.client.ClientService.xhr(ClientService.java:932) 
    at com.ibm.sbt.services.client.ClientService.get(ClientService.java:808) 
    at com.ibm.sbt.services.client.ClientService.get(ClientService.java:804) 
    at com.ibm.sbt.services.client.base.BaseService.retrieveData(BaseService.java:350) 
    at com.ibm.sbt.services.client.base.BaseService.retrieveData(BaseService.java:372) 
    at com.ibm.sbt.services.client.base.BaseService.retrieveData(BaseService.java:325) 
    at com.ibm.sbt.services.client.base.BaseService.getEntities(BaseService.java:185) 
    at com.ibm.sbt.services.client.connections.communities.CommunityService.getMyCommunities(CommunityService.java:265) 
    at com.ibm.sbt.services.client.connections.communities.CommunityService.getMyCommunities(CommunityService.java:249) 
    at no.tine.sbt.SBTCommunityHelper.getMyCommunities(SBTCommunityHelper.java:36) 
    at JavaAgent.NotesMain(JavaAgent.java:27) 
    at lotus.domino.AgentBase.runNotes(Unknown Source) 
    at lotus.domino.NotesThread.run(Unknown Source) 

다른 사람이 혼합 된 아파치 HttpClient를을의 버전과 비슷한 문제를 볼 것을 보여줍니다 (HttpClient를 4.0.1을 사용하고있다 일반적으로 사람들, 그리고 문제는 멀리로 대체 갔다 HttpClient를 4.1). SBT에는 httpclient-4.2.1.jar가 포함되어 있는데이 파일은 Lotus Notes의 C : \ Program Files (x86) \ IBM \ Lotus \ Notes \ jvm \ lib \ ext에 복사 한 파일입니다.

로터스 노츠 (Lotus Notes)가 어떻게 든 어딘가에서 다른 httpclient를 사용하고있는 것처럼 보입니다. 어쩌면 구형 인 것 같습니다.

그래서 질문은 - Notes가 SBT 항아리를 어떤 식 으로든 사용할 수있게 할 수 있습니까? 어떤 아이디어?

참조를 위해, C : \ Program Files (x86) \ IBM \ Lotus \ Notes \ jvm \ lib \ ext에 복사 한 SBT jar 파일은 다음과 같습니다.

com.ibm.commons-1.0.0.20131024-1349.jar 
com.ibm.commons.runtime-1.0.0.20131024-1349.jar 
com.ibm.commons.xml-1.0.0.20131024-1349.jar 
com.ibm.sbt.core-1.0.0.20131024-1349.jar 
com.ibm.sbt.playground-1.0.0.20131024-1349.jar 
apache-mime4j-0.6.jar 
com.ibm.sbt.javamail-1.4.5.jar 
commons-codec-1.3.jar 
commons-fileupload-1.2.2.jar 
commons-io-2.4.jar 
commons-logging-1.1.1.jar 
httpclient-4.2.1.jar 
httpcore-4.2.1.jar 
httpmime-4.2.1.jar 

2013 년 10 월 30 일 UPDATE : 2013 년 10 월 30 일 UPDATE : 동일한 줄을 따라 가려고하는 샘플을 발견했습니다. 다음 코드는 Apache.org HttpClient 4.2 예제 코드에서 직접 작성한 핵심 코드가 포함 된 완전한 Notes Java Agent입니다. 이것 역시 NoSuchMethodError를 생성하며, SBT보다 디버깅이 쉽습니다.

/* 
* Sample retrieved from 
* http://hc.apache.org/httpcomponents-client-4.2.x/httpclient/examples/org/apache/http/examples/client/ClientWithResponseHandler.java 
*/ 
import java.io.IOException; 
import org.apache.http.client.ResponseHandler; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.BasicResponseHandler; 
import org.apache.http.impl.client.DefaultHttpClient; 
import lotus.domino.*; 

public class JavaAgent extends AgentBase { 

    public void NotesMain() { 

     try { 
      Session session = getSession(); 
      AgentContext agentContext = session.getAgentContext(); 

      HttpClient httpclient = new DefaultHttpClient(); 
      try { 
       HttpGet httpget = new HttpGet("http://www.google.com/"); 

       System.out.println("executing request " + httpget.getURI()); 

       // Create a response handler 
       ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
       String responseBody = httpclient.execute(httpget, responseHandler); 
       System.out.println("----------------------------------------"); 
       System.out.println(responseBody); 
       System.out.println("----------------------------------------"); 

      } finally { 
       // When HttpClient instance is no longer needed, 
       // shut down the connection manager to ensure 
       // immediate deallocation of all system resources 
       httpclient.getConnectionManager().shutdown(); 
      } 


      // Notes Exception catcher 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

BTW; 나는 httpclient, httpcore 등을 SBT의 com.ibm.sbt.libs.domino \ lib-catalog에서 파일로 대체하려고 시도했다. 불행히도 같은 결과 –

답변

0

먼저 에이전트는 어디에서 실행됩니까? 메모? 그렇다면 훌륭한 위치 인 또는 On the Server? 서버에서 라이브러리가 있는지 확인해야합니다.

중대한 테스트 중 하나는 라이브러리를 에이전트의 코드에 넣는 것입니다.

데이터베이스> 코드를 확장 디자이너

에서 데이터베이스 열기> 에이전트

찾아보기를 클릭하여 아카이브

가져 오기를 클릭> 아카이브

당신의 에이전트

클릭을 엽니 다 (찾기 참조 된 jars가있는 폴더)

당신이

마침

클릭하여 원하는 항아리를 선택 저장 (이 컴파일하자) 경로가

를 발행에

닫기과

이 작동하는 경우 테스트

, 그것은 아래의 클릭 - - 업데이트 ----

com.ibm.sbt.core/com.ibm.commons.xml com.ibm.commons.runtime com.ibm.commons httpcore를 추가했습니다. HttpClient를 보관

내가 코드를 사용하고, Java1.5

에 작업 공간의 호환성을 변경 그때 보안 3. 수평을 변경 같은 에이전트에 평민 로깅이 항아리 ... 같은 시도해야 , 실패 할 경우 충돌하는 Java 클래스를 조사해야합니다.

import lotus.domino.AgentBase; 
import lotus.domino.AgentContext; 
import lotus.domino.Session; 

import org.apache.http.client.HttpClient; 
import org.apache.http.client.ResponseHandler; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.BasicResponseHandler; 
import org.apache.http.impl.client.DefaultHttpClient; 



public class JavaAgent extends AgentBase { 

    public void NotesMain() { 

     try { 
      Session session = getSession(); 
      AgentContext agentContext = session.getAgentContext(); 
      lotus.domino.Log log = session.createLog("SampleAgentSBT"); 
      log.openAgentLog(); 

      HttpClient httpclient = new DefaultHttpClient(); 
      try { 
       HttpGet httpget = new HttpGet("http://www.google.com/"); 

       log.logAction("executing request " + httpget.getURI()); 

       // Create a response handler 
       ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
       String responseBody = httpclient.execute(httpget, 
         responseHandler); 
       log.logAction("----------------------------------------"); 
       log.logAction(responseBody); 
       log.logAction("----------------------------------------"); 

      } finally { 
       // When HttpClient instance is no longer needed, 
       // shut down the connection manager to ensure 
       // immediate deallocation of all system resources 
       httpclient.getConnectionManager().shutdown(); 
      } 
      log.close(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 

     } 
    } 
} 
+0

안녕하세요 폴과 답장을 보내 주셔서 감사합니다. 에이전트는 Lotus Notes 클라이언트에서 실행되고 Java 에이전트는 로컬 데이터베이스 내에 배치됩니다. 아직 관여 된 서버가 없습니다. 예, 언급 한 모든 jar 파일을 Java 에이전트에 직접 포함 시키려고했습니다. 또한 코드를 삽입 한 Java Script 라이브러리에 jar 파일을 포함 시키려고했습니다. 또한 Java 파일을 에이전트 내부에 배치하려고했습니다. 지금까지 모든 변형에 대한 스택 추적. Notes JVM이 httpclient/httpcore jar 파일의 자체 버전을 선호하는 것처럼 보입니다. –

+0

검색의 또 다른 결과입니다. Notes 9 Designer 클라이언트에 다음 버전의 httpcore 4.0.1이 설치되어 있습니다. "C : ₩ Program Files (x86) ₩ IBM ₩ Lotus ₩ Notes ₩ osgi ₩ shared ₩ Eclipse ₩ plugins ₩ org.apache.wink_1.1.2.20130301-1506 ₩ lib ₩ httpcore-4.0.1.jar" 및 "C : ₩ Program Files (x86) ₩ IBM ₩ Lotus ₩ Notes ₩ framework ₩ shared ₩ eclipse ₩ plugins ₩ org.apache.wink_1.1.2.20130301-1506 ₩ lib ₩ httpcore-4.0.1.jar" 이제 이 파일이 Notes 클라이언트 에이전트 관리자 JVM에서 재생되는지 여부는 확실하지 않습니다. 그것의 재미를 위해, 나는 4.0.1 폴더 내용을 SBT 4.2.1 내용으로 대체하려고 노력했다. –

+0

에이전트 실행에 대한 제한을 변경 했습니까? –