2009-09-11 4 views
2

Java Swing 애플리케이션 내에서 (네트워크 모드로 실행되는) Apache Derby 데이터베이스를 가지고 있는데, Java 클라이언트 애플리케이션을 통해 직접 JDBC 호출을 통해 연결합니다.Apache Derby 데이터베이스에 대한 동시 액세스 관리

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

단일 사용자 라이선스를 보유한 사용자는 랩톱 컴퓨터에서 실행되는 클라이언트 응용 프로그램이 1 개뿐 아니라 데스크톱에서 실행되는 두 번째 클라이언트 응용 프로그램과 둘 다에서 서버에 연결할 수 있어야합니다.

나는 웹 서버의 고급 스러움이 없기 때문에 유일한 옵션은 Derby의 "maxthreads"런타임 속성을 사용하고 본질적으로 사용자가 랩톱에서 로그 오프해야한다고 강요합니다. 데스크톱에서 앱을 사용하십시오.

timeslice 속성을 0으로두면 getConnection 시간 초과가 호출되어 사용자에게 클라이언트 응용 프로그램 중 하나의 연결을 끊어야한다고 설명하는 메시지를 표시 할 수 있습니다.

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

다른 해결책이 누락 되었습니까?

답변

0

질문을 올바르게 이해하면 사용자가 라이센스를 잠그고 단일 라이센스를 가진 단일 사용자가 한 번에 둘 이상의 클라이언트 인스턴스에서 "서버"에 액세스하지 못하도록하고 싶습니다. "서버"는 단순히 데이터베이스이며 서버 측에 응용 프로그램 계층을 만들지 않으려 고합니다.

두 가지가 다른 용도로 사용되기 때문에 라이선스 제한을 적용하기 위해 스레드 풀과 연결 시간 제한을 사용하는 초기 제안을 정말 좋아하지 않습니다.

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

이 아이디어가 마음에 들면, 내가 가지고있는 것보다 더 멀리 생각하십시오. 나는 로직을 잠그고있는 로직에서 몇 가지 오류를 볼 수있다 :-)

+0

귀하의 제안에 감사드립니다. – prhayes

0

데이터베이스의 "로그인"과 "로그 아웃"작업을 원하는 것처럼 보이므로 아마도 로그인 또는 로그 아웃 할 때 응용 프로그램에서 레코드를 쓰는 데이터베이스의 특수 테이블.

그런 다음 응용 프로그램의 다른 사본이 현재 로그인되어 있는지 확인하려면 해당 테이블을 조회 할 수 있습니다 응용 프로그램.

당신이 로그인 할 때 날짜/시간을 추적하기 위해 테이블의 추가 필드를 포함 할 수 있습니다

/로그 아웃을 수행 한 클라이언트의 호스트 이름과 IP 주소 등을 표시합니다.

관련 문제