문제

Java Swing 애플리케이션 내에서 아파치 더비 데이터베이스 (네트워크 모드)가 실행 중이므로 Java 클라이언트 응용 프로그램을 통해 직접 JDBC 통화를 통해 연결합니다.

이것은 매우 훌륭하고 훌륭하지만이 클라이언트/서버 응용 프로그램에 대한 동시 라이센스를 구현 해야하는 추가 요구 사항이 있다는 것을 알고 있습니다.

이상적으로는 단일 사용자 라이센스를 가진 사용자는 랩톱에서 1 개의 클라이언트 앱을 실행할 수 있고 데스크탑에서 두 번째 클라이언트 앱을 실행하고 두 사람 모두 서버에 연결할 수 있어야합니다.

웹 서버의 사치가 없으므로 Derby의 "Maxthreads"런타임 속성을 사용하는 것이 유일한 옵션이 궁금합니다. 기본적으로 사용자가 노트북을 로그 오프 해야하는 경우 사용하려면 데스크탑에서 앱.

Timeslice 속성을 0으로 남겨두면 GetConnection timeout을 호출하여 클라이언트 앱 중 하나를 분리해야한다고 설명하는 메시지를 표시 할 수 있습니다.

연결 스레드가 신뢰할 수있는 방법입니까?

다른 솔루션이 빠졌습니까?

도움이 되었습니까?

해결책

질문을 올바르게 이해하면 사용자 잠금 라이센스가 있으며 한 번에 하나 이상의 클라이언트 인스턴스에서 단일 라이센스가있는 단일 사용자가 "서버"에 액세스하는 것을 방지하려고합니다. "서버"는 단순히 데이터베이스이며 서버 측에서 애플리케이션 계층을 만들고 싶지 않습니다.

스레드 풀과 연결 시간 초과를 사용하여 라이센스 제약을 시행한다는 초기 제안이 마음에 들지 않습니다. 두 가지가 다른 목적으로 사용되기 때문입니다.

대신,이를 해결하기 위해 사용자가 처음 사용할 때 GUI에 라이센스 번호를 입력하도록 요구할 수 있습니다. 이는 GUI의 후속 시작을 위해 사용자의 홈 디렉토리에 저장할 수 있습니다. 그들이 다른 기계에서 처음으로 GUI를 시작하는 경우에도 마찬가지입니다. 그런 다음 GUI가 데이터베이스를 사용한 각 거래에 대해 먼저 라이센스 테이블을 업데이트하거나 유사하게 사용자의 라이센스가 현재 거래에 참여하고 있음을 나타냅니다. 동일한 라이센스가 이미 테이블에 있거나 활성 또는 이와 유사한 것으로 표시된 경우 GUI는 거래를 거부하고 다른 클라이언트가 라이센스를 이미 사용하고있는 사용자에게 표시합니다.

당신 이이 아이디어를 좋아한다면, 내가 가진 것보다 더 멀리 생각하십시오. 논리 잠금 사용자에서 사용자가 영구적으로 몇 가지 오류를 볼 수 있습니다 :-)

다른 팁

데이터베이스의 "로그인"및 "로그 아웃"의 조치를 명시하고 싶을 것 같습니다. 아마도 로그인 또는 출력 할 때 응용 프로그램이 레코드를 작성하는 데이터베이스에 특수 테이블을 갖고 싶을 수도 있습니다.

그런 다음 응용 프로그램에서 해당 테이블을 쿼리하여 응용 프로그램의 다른 사본이 현재 로그인되어 있는지 확인할 수 있습니다.

로그인/아웃 된 날짜/시간을 추적하기 위해 추가 필드를 테이블에 포함시킬 수 있습니다. 로그인/로그 아웃 등을 수행 한 클라이언트의 호스트 이름 및 IP 주소 등을 추적 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top