Tenho um servidor Java que roda como servidor de uma aplicao web em Ruby on Rails .
A camada Ruby on Rails pega os dados via Web service do servidor Java .
O problema que tenho que retornar uma lista muito grande via web-service a partir da apliacao Java . Um relatorio gigante .
E essa lista via WEB-services esta demorando muito para ser carregada .
Qual melhor a solucao para este problema ?
Estava pensando em fazer um acesso direto da apliacao Ruby on Rails no banco , mas isso quebraria a arquitetura em camadas ( A parte de INFRA so comunica com Java ) .
Meu, você não precisa de um web-service para separar em camadas, se o objetivo do web-service está sendo somente “separar”, então é melhor jogar os códigos dessa comunicação no lixo.
Camadas podem ser divididas por pacotes, por classes… pela construção simples oferecida pela linguagem, não precisa de uma coisa complicada. O objetivo da criação de camadas é reduzir o número de dependências entre classes, já que você cria restrições de alto nível, como: a camada de domínio não conhece a camada de apresentação.
É isso. (Acho que tem gente que pode responder melhor que eu, tô meio com sono.)
o Web-service foi uma excelente escolha, já que estamos falando aqui de duas aplicações distintas no quesito de linguagem e plataforma. O XML sem dúvida deve fazer parte da sua comunicação.
Agora quanto ao lande de retornar uma lista imensa, na minha opnião existem duas respostas:
1 - É realmente necessári trazer esta lista ? Ela não pode ser filtrada por algum parêmetro ?
2 - Se não tem jeito, então comunique ao seu gerente e peça uma banda larga maior : /
Quando você tem relátorios grandes, pesados e complexos, as vezes você precisa violar a sua divisão em camadas… não tem muito jeito.
É claro que você tem que gastar um bom tempo e esforço pra tentar arranjar uma solução que não viole as camadas. A sugestão do colega de filtar a lista é interessante.
Outra coisa importante é analizar exatamente onde esta sendo o problema…O problema esta sendo exatamente onde, na transferência do XML, parse, execução da query? Se o problema for na transferência do XML, será que não da para compactar o XML (existem algumas técnicas específicas para SOAP)? Ou tentar usar um outro formato?
Mas se não tiver jeito, não fique tão preocupado. Não é incomum ter que violar alguma boa prática pra obter mais performace, principalmente em relatórios pesados. Uma decisão desse tipo não deveria ser tomada de forma apressada e sem entender exatamente qual é o problema.
Se optar por acessar direto o banco, faça isso da forma mais isolada, o resto da sua aplicação não precisa saber que aquele relatório viola a divisão de camadas do sistema.
[quote=Zaperjava]Tenho um servidor Java que roda como servidor de uma aplicao web em Ruby on Rails .
A camada Ruby on Rails pega os dados via Web service do servidor Java .
O problema que tenho que retornar uma lista muito grande via web-service a partir da apliacao Java . Um relatorio gigante .
E essa lista via WEB-services esta demorando muito para ser carregada .
Qual melhor a solucao para este problema ?
Estava pensando em fazer um acesso direto da apliacao Ruby on Rails no banco , mas isso quebraria a arquitetura em camadas ( A parte de INFRA so comunica com Java ) .[/quote]
em caso de nao dar para melhorar o link entre as duas aplicações, eu poderia surgir uma arquitetura para a comunicação entre sua aplicação java e a ruby…
não daria para você dividir esse relatório em “partes”, armazena-lo por um curto periodo de tempo e depois ao buscar esse relatório ir buscando cada parte de uma vez?
por exemplo, você acessa um web service, ele cria o relatorio e o armazena temporariamente (serializa ele em disco, no banco, sei la), retorna um nome para esse relatório (que possa ser identificado depois por esse nome) e a quantidade de partes que possue, depois você acessa outro web service pedindo pelo nome do relatório e a parte que você quer, uma por uma até acabar no ruby… depois você junta as partes em ruby e faz o que tiver que fazer (acredito que seja exibi-lo)…
fica muito ruim essa abordagem, no devido escopo fornecido pelo ?