Pergunta

Eu tenho um banco de dados Apache Derby em execução (no modo de rede) dentro de uma aplicação java swing, eu conectar a ele através de chamadas JDBC directo através de um aplicativo cliente Java.

Isso tudo é muito bom e funciona muito bem no entanto eu sei que tem um requisito adicional para implementar licenças simultâneas para esta aplicação cliente / servidor.

O ideal é um usuário com uma única licença de usuário deve ser capaz de ter um aplicativo cliente em execução em um laptop e também um segundo aplicativo cliente executando em um desktop e ser capaz de se conectar ao servidor de ambos.

Eu não tenho o luxo de um servidor web assim que eu estou querendo saber se a minha única opção é usar a "MaxThreads" propriedade runtime em Derby e essencialmente forçar o usuário ter que fazer logoff a palavra laptop se querem em seguida, usar o aplicativo a partir de sua área de trabalho.

Se eu deixar a propriedade timeslice a 0, em seguida, será uma chamada para getConnection tempo limite para que eu possa exibir uma mensagem para o usuário explicando que eles precisam para desconectar um dos aplicativos cliente.

São tópicos de conexão uma maneira confiável de fazer isso?

Am I faltando uma outra solução?

Foi útil?

Solução

Se eu entendi a pergunta corretamente, você tem licenças bloqueado pelo usuário e quer evitar um único usuário com uma única licença de acessar o "servidor" de mais de uma instância do cliente de cada vez. O seu "servidor" é simplesmente um banco de dados e você não quiser criar uma camada de aplicação no lado do servidor.

Eu realmente não gosto de sua sugestão inicial de usar o pool de threads e tempo limite de conexão para impor restrições de licenciamento, porque ambas as coisas são usados ??para outros fins.

Em vez disso, para resolver este eu poderia considerar exigir que o usuário inserir seu número de licença no GUI a primeira vez que usá-lo. Isso pode ser salvo no diretório home do usuário para partidas subsequentes do GUI. O mesmo aconteceria se eles começarem a GUI, pela primeira vez em outra máquina. Então, para cada transação a GUI faz com o banco de dados, seria primeiro atualizar uma tabela licenças ou similar para indicar a licença do usuário está atualmente participando de uma transação. Onde quer que a mesma licença já está em cima da mesa, marcada como ativa, ou similar, a GUI seria rejeitar a transação e exibição para o usuário a sua licença já está em uso por outro cliente.

Se você gosta dessa idéia, pense bem mais longe do que eu tenho. Eu posso ver alguns erros na lógica usuários bloqueando permanentemente :-)

Outras dicas

Parece que você quer fazer a ação de "entrando" e "logout" do banco de dados explícito, então talvez você pode querer ter uma mesa especial no banco de dados onde o aplicativo grava um registro ao iniciar a sessão ou para fora.

Em seguida, o aplicativo pode consultar essa tabela para descobrir se outras cópias do aplicativo está conectado no momento.

Você pode querer incluir campos adicionais na tabela para rastrear a data / hora quando você logado / out, o nome do host e endereço IP do cliente que executou o login / logout, etc.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top