2012-08-24 3 views
0

POST (1) 제어 : 우리는 몇 가지 소프트웨어를 사용AspectJ를 및 다른 항아리에 전화

, 즉 실제로 그것을 제어하기위한 자신의 톰캣과 쉘 스크립트와 웹 모듈이다 이론적 인 질문을. 또한 플러그인 시스템을 가지고 있습니다.이 플러그인 시스템을 사용하면 특정 구조의 .jar 파일을 업로드하여 응용 프로그램에 새로운 기능을 추가 할 수 있습니다.

질문 : &은 (내 항아리가 아닌) 기본 시스템/응용 프로그램에서 다른 호출에 대한 응답을 실제로 변경하려고합니다. AspectJ를 사용하면 될까요? 그 이유는 무엇? 주 응용 프로그램의 코드를 변경하는 것을 제외하고는 다른 일반적인 가능성은 무엇입니까?


POST 2 : 나는 jar 파일에 클래스를 추가

  • 을 AspectJ의 프로젝트에서 다음

    을하려고 나는 (이클립스에서) 이런 식으로하려고 노력 짠 수 있습니다 (사실 나는 그것을 INPATH에 추가했습니다).

  • "AspectJ 지원이있는 Jar"로 프로젝트를 내 보냅니다.
  • 2 단계에서 내 보낸 jar 파일을 배치했습니다. 결과 없음.

질문 : 내 보낸 측면 항아리에서

  1. 은 만의 AspectJ 프로젝트의 class 파일의 INPATH - 항아리 없음 class 파일이 있습니다. 가져온 INPATH-jar의 다른 클래스가 있어야합니까?

  2. 내 보낸 애스펙트 jar에는 aspectj-runtime (aspectj-rt.jar)이있는 jar가 없습니다. 거기에 있어야합니까, 아니면 가상 머신을 구성하는 방법입니까?

+0

응용 프로그램을 다시 시작하지 않고 기존 응용 프로그램 (특히로드 된 클래스)의 동작을 수정하는 웹 응용 프로그램에 새 JAR을 업로드 하시겠습니까? –

+0

@ Jochen.Kohler 정확히 내가 원하는 것입니다. – icvg

+0

"AJ 지원 JAR"이 작동하지 않는 이유는 모르겠지만 (나중에 JAR이 다른 AJ 프로젝트의 aspect 경로에 추가 된 것일 수도 있습니다), "Runnable JAR file"을 하위 옵션 " 패키지를 생성 된 JAR에 패키지화해야합니다. " 여기에는 필요한 라이브러리가 포함됩니다. 약간의 트릭으로 하나의 aspect에 대해 더미'main' 메소드를 생성하고 내보내기 도우미의 다음 페이지로 이동하기 위해 내보내기 동안 선택해야하는 Java 실행 구성을 작성해야 할 수도 있습니다. – kriegaex

답변

1

예, 그렇습니까? 질문을 넓히고 시스템에있는 행위자와 행동을 설명 할 수 있다면 (예를 들어) 아마도 우리는 좀 더 구체적으로 당신을 도울 수있을 것입니다. 하지만 기본적으로 아무런 문제가 없습니다. JAR 모듈은 동적으로로드 될 수 있지만, 인터셉트하려는 Tomcat 응용 프로그램의 호출을 알고있는 경우 JVM 시작 중에 기존 클래스를 다시 웨이브하거나 LTW (로드 타임 위빙)를 통해 동적으로 인스트루먼트 할 수 있습니다 . 업로드 된 JAR 모듈을 만질 필요는 없습니다. 이해할 수있는대로, 피해야 할 항목을 선택하십시오.

당신은 아마

  • around() 조언과 함께

    • execution(<methodsToBeChecked>) 포인트 컷을 통해 주요 응용 프로그램의 대상 클래스를 직조하고 싶다.

    다른 세부 사항

  • 은 특정 사용 케이스, 패키지, 클래스와 메소드 이름, 매개 변수 등에 따라 달라집니다호출 매개 변수를 조작
    • 결정 발신자,
    • 확인 전화 PARAMATERS, 원본 또는 변경된 매개 변수
    • 호출 원래의 목표,
    • 다음 around 조언은 하나 또는 여러 개의 다음과 같은 것들을 할 수 있습니다
    • 또는 원래 전화를 전혀 수행하지 않는 경우
    • 원래 호출의 결과를 호출자에게 건 너
    • 자신의 예외를 던져,
    • 가 호출자에게 올바른 반환 형식으로 어떤 합성 값을 전달, 호출자에게 다시 원래의 호출에 의해 제기
    • 캐치 예외를 결과의 조작 버전을 통과

    환상 (및 AspectJ의 몇 가지 제한 사항)이 한계가 있습니다. :-)

  • +0

    WebApp 또는 Tomcat을 다시 시작하지 않고도 작동합니까? 이 경우 정적으로 웹 애플리케이션의 "변경 불가능한"코드를 계측 할 것이라고 가정합니다. – icvg

    +0

    나는 그렇게 생각한다. 정적 계측은 가장 간단하고 까다로운 방법입니다. aspect (aspect 또는 instance variable) 스위치를 aspect에 추가하여 런타임 중에 포인트 컷 앞에'if (switch) && ... '를 추가하여 활성화시킬 수있다. 성능 오버 헤드는 존재하지만 극적인 것은 아닙니다. 어쩌면 당신은 그것을 알아 채지 못할 것입니다. 한번 시도해보십시오. LTW는 사용법을 알고 있다면 시험해 볼 가치가 있습니다. – kriegaex

    +0

    시도 했습니까? 너 성공 했니? – kriegaex

    관련 문제