Pequenas dúvidas sobre RESTful

Olá galera! Estou fazendo meu projeto para o fim de curso e dei de frente com três pequenas dúvidas, e não achei em nenhum lugar alguma resposta…

-Conexões de clientes em um servidor são enfileiradas, ou são multithreads?
Por exemplo, supomos que vários clientes acessem www.host.com/login, o primeiro à chegar será processado, tipo FIFO, ou várias threads entrarão no código?

-É correto fazer vários arquivos, um para cada recurso ou apenas um para vários?
Por exemplo, ServicoLogin.java para /login e ServicoLogoff para /logoff, ou apenas Servico para ambos?

-Onde tecnicamente fica o “main”? Devo utilizar um construtor e fazer um Singleton nos construtores dos Servico_.java ou outra maneira?

Agradeço muito quem poder responder!

-Conexões de clientes em um servidor são enfileiradas, ou são multithreads?
Por exemplo, supomos que vários clientes acessem www.host.com/login, o primeiro à chegar será processado, tipo FIFO, ou várias threads entrarão no código?

Depende de como o servidor está implementado. Geralmente usa-se servidores multi-thread: para cada requisição que chega ao servidor cria-se uma nova thread para tratá-la. Uma outra opção que está se tornando muito popular é criar um servidor composto por uma única thread mas que trata todas as operações de I/O de maneira assíncrona.

-É correto fazer vários arquivos, um para cada recurso ou apenas um para vários?
Por exemplo, ServicoLogin.java para /login e ServicoLogoff para /logoff, ou apenas Servico para ambos?

Sim.

-Onde tecnicamente fica o “main”? Devo utilizar um construtor e fazer um Singleton nos construtores dos Servico_.java ou outra maneira?

Não entendi muito bem a sua dúvida nesse caso …

De qualquer maneira, me parece que você está querendo reinventar a roda. Se o foco do TCC forem as regras de negócio, eu sugiro utilizar um servidor Web ou framework pronto.

Peço perdão pelo reply atrasado

O “main” que eu digo é, onde é o ponto de inicio do RESTful? Gostaria de instanciar uma classe de controle, por exemplo, para fazer comunicação com o banco de dados, controlar um socket para outra operações, etc, etc, etc, sem instanciar ela no momento em que há uma requisição, sem fazer singletone. É possível isso?

Como eu disse, isso depende da implementação. Qualquer programa servidor nada mais é do que uma aplicação comum executando em um loop infinito. Quando você utiliza um servidor Java como o Tomcat ou o Wildfly esse loop já está pronto para você, inclusive já estão prontos: abertura de sockets, criação de threads, etc. Tudo o que você tem que fazer é implementar o seu serviço RESTful seguindo a especificação JEE e fazer o deploy no servidor.

Caso você queira criar seu serviço RESTful a partir do zero, sem reutilizar nenhum servidor pronto ou algo do tipo, também não tem muito segredo: basicamente você tem que criar uma aplicação que fica em loop infinito e abre um server socket em uma determinada porta. Ao receber a conexão você cria uma nova thread passando o novo socket para essa thread ler os dados de entrada e gerar a saída.

Quanto você sabe sobre aplicações web, em geral e em java?
Pergunto pois a forma de execução de uma aplicação web é bem diferente de uma batch/desktop, onde você tem uma classe main.
Basicamente, o servidor funciona como uma grande classe main, que instancia toda a tua aplicação e deixa ela esperando uma conexão (requisição ao servidor, seguido de “/nomeDaAplicacao”).
A partir daí, a aplicação seguirá os fluxos que foram desenvolvidos internamente.
Está desenvolvendo estes serviços utilizando o que? Algum framework?