2012-06-16 2 views
3

나는 다음과 같은 구현해야합니다오라클 트리거 보스를 통지하는 방법

다른 테이블 B.에 트리거에서 오는 DML 작업에 의해 변경 될 것으로 예상되는 테이블 A가 있습니다

내가 원하는 방아쇠가 작동 할 때마다 Jboss 빈에 알립니다. 가장 좋은 경우에 나는 빈에서 OLD와 NEW 데이터를 볼 기회를 원합니다.

가장 좋은 방법은 무엇입니까? 어떤 자료를 읽을 것을 권장 할 수 있습니까?

+0

[데이터베이스 변경 알림] (http://docs.oracle.com/cd/E14072_01/java.112/e10589/dbchgnf.htm)을 조사 했습니까? –

답변

5

Database Change Notification을 사용하는 Alex의 제안이 아마도 최선의 방법 일 것입니다. 비동기 자바 클라이언트에 메시지를 보낼 수

  • 사용 DBMS_PIPE : 행동 (당신이 트리거에서 호출 할 수있는) 오라클 PL/SQL 패키지에서 자바 프로세스 이벤트를 신호하는 다음은 몇 가지 다른 옵션이다 같은 파이프에서 듣고있어.
  • DBMS_ALERT을 사용하여 대상 경고를 수신하는 Java 클라이언트에 메시지를 보냅니다. 트랜잭션이 커밋 될 때까지 메시지가 수신되지 않습니다.
  • UTL_HTTP 또는 UTL_SMTP 또는 UTL_TCP을 사용하여 대상 HTTP, SMTP 또는 TCP 끝점에서 수신 대기중인 Java 프로세스에 메시지를 보냅니다.
  • 대상 큐/주제에서 수신 대기중인 Java 클라이언트에 Oracle/AQ JMS 메시지를 보냅니다.
  • Java 클라이언트에서 JMS 클라이언트를 만들고 Oracle 데이터베이스에 load the java classes [종속성]을 작성하십시오. 클래스를 PL/SQL 프로 시저로 감싸서 호출하여 대상 대기열/주제에서 수신 대기중인 Java 클라이언트에 신호를 보냅니다.

Calling/Using JMS from PL/SQL 질문에 PL/SQL에서 JMS 메시지를 보내는 방법에 대한 더 많은 정보가 있습니다.

+0

이러한 솔루션은 설정 및 유지 관리가 복잡합니다. 그러나 JMS 메시지는 모두 손실 될 수 있습니다. 많은 사람들이이 대답을 좋아해서 놀랐습니다. – Andomar

+0

방금 ​​콩을 찾아서 메서드를 호출하는 일부 Java 메서드를 호출 할 수 있습니까? – Oleg

+1

올레그; 일종의. 명백한 것은 아니지만 Java 메소드는 PL/SQL로 래핑되어야합니다. 그것은 거친 길의 약간이다, 나는 당신에게 말해야한다. 문제는 원격 클라이언트를 재현하기 위해로드해야하는 클래스의로드가 많이 필요하다는 것입니다. 그러나 그것은 효과가있다. – Nicholas

0

트리거를 신호 테이블에 삽입 할 수 있습니다.

JBoss 프로세스는 정기적으로 새 신호를 확인하면서 신호 테이블을 모니터링 할 수 있습니다.

+0

네, 가장 간단한 솔루션입니다. 그러나 많은 테이블에서 트리거 할 경우 동일한 수의 신호 테이블을 가져야하거나 매개 변수 테이블을 통해 열 값을 관리해야합니다. – Oleg

관련 문제