2010-05-26 3 views
7

Java 프로그램이 데이터베이스 테이블과 계속 통신해야하는 시나리오가 있습니다. 예를 들어 Java 프로그램은 런타임에 새 행을 추가 할 때 테이블의 데이터를 가져와야합니다. 내 프로그램과 데이터베이스간에 지속적인 커뮤니케이션이 이루어져야합니다.Java를 사용하여 데이터베이스에서 데이터를 계속 페치합니다.

테이블에 처음으로 10 개의 행이 있고 사용자가 2 개의 행을 추가하면이를 감지하고 행을 반환해야합니다.

내 프로그램에서 AJAX 및 타이머를 사용하지 않아야합니다.

+3

Java 프로그램이나 다른 응용 프로그램을 통해 데이터베이스에 대한 호출 (행 추가)이 있습니까? – JeremyFromEarth

답변

0

가장 간단한 문제는 아니지만 실제로.

의 2 개 작은 문제로 나누어 보자

1) 타이머와 아약스없이 다시로드하도록 설정하는 방법을 서버 측

  1. 를 통지 할 수있는 방법은 없습니다 구현하는 방법을

    2) 클라이언트를 서버에서 가져옵니다. 따라서 플래시, 실버 라이트 또는 JavaFX 또는 애플릿을 사용하여 씩 클라이언트를 만들어야합니다. Ajax 문제는이 문제에 대한 사용법을 모르는 경우 ajax를 지원하는 jsp 태그 또는 jsf 구성 요소의 바로 사용할 수있는 라이브러리를 조사 할 수 있습니다.

  2. 서버가 1 개인 경우 캐시를 추가하기 만하면됩니다. 서버가 여러 개인 경우 분산 캐시 사용을 고려하십시오.

3

사용중인 데이터베이스가 오라클의 경우, DB를 변화의 클라이언트를 통지하는 전화 java stored procedure이 (JMS, RMI을 사용하거나 당신이 원하는 무엇이든) triggers를 사용하는 것이 좋습니다.

0

트래픽이 적은 데이터베이스의 경우 DB (폴링)에 대한 업데이트를 빠르게 검사하는 스레드를 구현할 수 있습니다.

트래픽이 많은 DB를 사용하는 경우 권장하지 않으므로 폴링이 트래픽을 많이 발생시킵니다.

2

Ajax 및 타이머가 없으면이 작업을 수행하지 않는 것 같습니다.

나는 또한 동일한 문제에 직면했다. 서버가 변경되면 서버에서 클라이언트로 일부 데이터를 전송해야한다.

이 경우 사용자는 서버 AKA "혜성" 프로그래밍을 누를 수 있습니다. COMENT

  • 에서

    우리는 클라이언트가 특정 채널에 대한 구독 클라이언트와 서버 사이의 채널을합니다.

  • 서버는 데이터가있을 때 채널에 데이터를 저장합니다.
  • 클라이언트가 채널을 읽을 때 채널의 모든 데이터를 가져오고 채널이 비게됩니다.
  • 그래서 클라이언트가 채널에서 읽을 때마다 새로운 데이터 만 가져옵니다.또한

, 당신은 두 가지를 할 수 있습니다, DB의 변경 사항을 모니터링

  1. 일부 트리거/타이머 특정 이벤트에 채널에서 데이터를 밀어
  2. 이벤트 기본 메커니즘 (Quartz Scheduler을 확인)합니다. 기본적으로

는, 클라이언트는 서버 측에서 일어나는 아무것도 알 수 없다, 그래서 당신은 클라이언트, i have some new data, please call some method에게 데이터 나 이벤트를 밀어해야합니다. 그것의 종류의 통지. 따라서 이벤트 알림으로 혜성/서버 푸시를 확인하십시오.

희망이 도움이됩니다.

감사합니다.

0

클라이언트를 알리는 서버는 좋지 않습니다 (클라이언트가 1000 인 시나리오를 고려하십시오). 일부 영속성 레이어를 사용합니까 아니면 순수한 JDBC를 사용해야합니까?

+0

참으로 나는 지층을 가지고 있고 데이터베이스는 DB2입니다. 친절하게 조언하십시오. – deathcaller

0

MYSQL에서 바이너리 로그를 켠 경우 데이터베이스에서 발생하는 모든 트랜잭션을 볼 수 있습니다.

0

이 작업을 수행하는 휴대용 방법은 행이 테이블에 추가 된시기를 나타내는 열 시간 스탬프 (생성 날짜)를 추가하는 것입니다. 내용을 처음로드 한 후 where 절인 current_time> = create_date와 같은 새 내용을 폴링하기 만하면됩니다. 행에 동일한 타임 스탬프가있을 수있는 경우 중복을 필터링하기 전에 추가해야합니다.

관련 문제