Criar ou não um servidor? Sugestões

Ae pessoal!

Preciso criar um processo q irá servir determinada tarefa pra mim. Considere essa tarefa como sendo um programa em background, isso mesmo, um programa.

Então, eu terei um servidor q irá executar esse processo (imagine esse processo como sendo um prompt do windows), esse programa irá ficar em standalone e o servidor irá esperar até q alguém se conecte e peça para executar algo no processo (prompt do windows). Imagine q o cliente peça para listar o conteúdo de tal diretório.

Qd chegar mais de uma requisição o servidor irá colocar os pedidos em uma fila, esperando até q o processo anterior termine para poder executar o próximo pedido.

Blz!?

Agora, estarei rodando isso na mesma máquina, não vou fazer nenhuma requisição externa, ou seja, de outra máquina. Preciso criar um servidor utilizando TCP pra isso?
O processo q irei rodar é um sistema q a empresa utiliza e já fiz alguns testes e funciona perfeitamente. O problema é q acho q um servidor utilizando TCP… é muita coisa, não é?

Eu poderia criar um programa q assim q executado abra um processo novo(prompt do windows), execute a tarefa e termina o programa, mas isso é muito custoso. Imaginem se vários programas deste estiverem rodando ao mesmo tempo, a máquina explode… rsss

Alguém tem alguma sugestão?

Valeu galera!

Olá

Limitando minha resposta apenas na escolha da tecnologia listo os seguintes argumentos:

  1. Dependendo da pressa e do quanto lhe pagam faça o mais simples usando scripts.
  2. Caso 1 seja simplório demais e inviável, use TCP pois é possível que no futuro as coisas não fiquem na mesma máquina
  3. Usando TCP, adote sockets e controle as coisas manualmente.
  4. Caso controlar manualmente seja inviável, pense na possibilidade que os processos rodarem como métodos remotos. Neste caso RMI provê tudo o que precisa.
  5. Caso precise rodar em rede e os processos devem estar em uma WAN sem VPN, considere a possibilidade de passar os objetos por http. Neste caso RMI não serve e você vai precisar serializar objetos ou usar web services.

[]s
Luca

É possível usar RMI/HTTP ou até mesmo RMI/HTTPS sem ter que mudar uma linha do código cliente.

Olá

Certo, muito bem lembrado! A gente fica tão hipnotizado por hypes (web services por exemplo) que as vezes esquece de soluções mais simples para ligar Java com Java.

[]s
Luca

[quote=Luca]1. Dependendo da pressa e do quanto lhe pagam faça o mais simples usando scripts.
2. Caso 1 seja simplório demais e inviável, use TCP pois é possível que no futuro as coisas não fiquem na mesma máquina
3. Usando TCP, adote sockets e controle as coisas manualmente.
4. Caso controlar manualmente seja inviável, pense na possibilidade que os processos rodarem como métodos remotos. Neste caso RMI provê tudo o que precisa.
5. Caso precise rodar em rede e os processos devem estar em uma WAN sem VPN, considere a possibilidade de passar os objetos por http. Neste caso RMI não serve e você vai precisar serializar objetos ou usar web services.[/quote]

Realmente Luca, utilizar script não dá. O processo vai exigir manipulação de templates e estou utilizando Velocity pra isso. Tb faço conexão com BD.

A propósito estarei utilizando rede local, nada externo. No máximo poderei fazer requisições de outra máquina, mas isso não está no projeto.

Nunca precisei implementar nada parecido com esse sistema e tudo isso é novo pra mim. Já fiz uns testes com ServerSocket e Socket, funciona legal, mas ainda não testei com RMI. Vou dar uma olhada nisso.

Valeu pelas dicas pessoal.

Também tem esse aqui:
http://www.retrogui.com/cgi-bin/wiki_dualrpcserver.pl/DualRpcServer

[quote=Luiz Henrique Coura]
Nunca precisei implementar nada parecido com esse sistema e tudo isso é novo pra mim. Já fiz uns testes com ServerSocket e Socket, funciona legal, mas ainda não testei com RMI. Vou dar uma olhada nisso.[/quote]

Você não acha que utilizar um Stateless Session Bean é mais simples que trabalhar com Sockets na unha? :slight_smile:

Ou que tal você utilizar Servlets? Seu cliente pode chamar o servidor fazendo simples requests HTTP.

Abraços,
Marco Campêlo
Sun Certified Idiot Ideas Specialist

Hum, se você não quer usar um Tomcat (web) ou JBoss (ejb) da vida, e seu servidor é especializado para certos protocolos, você pode tentar algo parecido com o que foi feito com o James (james.apache.org), que foi construído sobre o Avalon ( http://excalibur.apache.org/ ). Não estou recomendando o Avalon, mas a idéia está aí.

Se a infra dai já possui um servidor J2EE 1.3, use JMS com MDBs.
Senão use JMS e um servidor manual (o activemq faz algo do genero, MD POJOs).

Bom, o sistema q irá processar os dados que o usuário requisitou está na rede interna. Temos servidores Tomcat rodando aplicações, mas está na rede externa e nesta rede não tenho acesso ao programa q preciso e tb aos dados q ficam num sistema de discos internos.

A minha idéia seria criar um servidor simples, por socket na rede interna, somente para prover uma instância de um ou mais processos (que é o nosso sistema) para que esse(s) possam tratar determinada tarefa do usuário e jogar essa informação no BD. Essa requisição não virá de um usuário externo, mas de um usuário(sistema) interno. Acontece q essas requisições podem ser multiplas e preciso organizá-las para q meu sistema possa processá-las.

Poderia instalar um servidor Tomcat na rede interna, mas acho q não tem necessidade. Naverdade já criei o servidor e agora estou gerando as threads q irão processar o trabalho pra mim.

Pretendo estudar RMI para implementar a mesma coisa, mas por enquanto estou sem tempo e pretendo deixar alguma coisa pronta, já operacional.

Andei lendo o q o pessoal passou, mas isso é muito novo pra mim e estou tentando não atropelar as coisas.

Enfim, agradeço a ajuda de vcs e os links. Já marquei esse topic no meu bookmark. Ainda tenho muito q estudar!

Valeu galera!

Comunicação entre 2 processos?
Requisições múltiplas?

Tudo indica que o que você precisa é JMS! :wink: Dê uma estudada nisso que acho que pode te ajudar bastante!

[]'s
Marco Campêlo

Seu servidor simples vai te dar mais dor de cabeça que usar o tomcat e estender ServletRequest direto.

Hoje em dia Web Services estão na moda (por exemplo, eles permitem que você possa ter um sistema com .NET e Java na mesma empresa sem grandes problemas de interoperabilidade).
Que tal usar Tomcat e Web Services? É meio pesado (e põe pesado nisso), mas é quase “click and go” dependendo da ferramenta que você tiver.