MarkKnopfler:
Entendi, o que eu estava querendo no início é isso mesmo. Sugestões de tecnologias. O Herbert deu a dica do JSF e o Sérgio, do JavaFX/JWS/Vaadin/Griffon (q tanto!). Eu já sei da existência do JavaFX, mas não sabia que ele é padrão no Java SE 7. Sim, estou usando o Java 7. Eu não sabia que Swing é ruim assim para acesso remoto, mas eu consegui acessar sem grande dificuldade (claro, apanhei um pouco para pegar as manhas, mas uma vez aprendido foi blz). Com relação a não ser trivial, não se preocupe, eu estou querendo é apanhar um pouco mais com tecnologias novas, acho que depois de umas boas leituras vc tem que ralar pondo a mão na massa.
Vc fala que não é problema apanhar. Ok. então faça em C++ :twisted:
Vc quer aprender. Tudo bem. Mas suponho que tb queira um negocio funcionando. Senão, what’s the point ?
Veja que as tecnologias mencionndas se excluem mutuamente. Não é JavaFX e JWS e Vaadin e Griffon . É JavaFX + JWS ou Vaadin ou Griffon.
Swing não é ruim. É que não é o futuro. O futuro é JavaFX. Griffon é uma casca que permite vc programar sem saber se é swing ou swt. Vc escreve um codigo mais agnóstico. Mas ainda vai gerar um desktop no final. É uma forma de acelerar o processo, é uma ferramenta. Se vc quer aprender do zero, não vale a pena aprender swing porque está obsuleto. Eu sei swing, então para mim é mais dificil usar javafx que tenho que aprender do que usar algo que conheço. Mas para vc , deveria escolher o que é novo.
O swing não é ruim para acesso remoto. Ele não faz acesso remoto. É vc que tem que criar esse design . O swing é só a UI. Mas num sistema cliente=servidor, o cliente é mais que a UI. Ele contém logicas para comunicar com o servidor. Seja qualquer o protocolo.
Existem padrões antigos e existem padrões modernos. Porque vc vai perder tempo aprendendo o antigo ? Não é mais eficaz aprender o que é moderno ? Por exemplo, pq usar RMI se pode usar REST ? Ninguem programa sockets mais, se usam tecnologias de mais alto nível. Quanto mais alto mais simples.
Por ordem de simplicidade e parta do principio que as opções são excludentes
Só Web
MVC modelo 2 : Spring MVC ou algum outro framework web + Spring IoC + Web container (tomcat) + JSP. Simples. O problema é que tem que ser mais ou menos bom de html e css.
MVC modelo 3 : JSF + CDI + Web container (tomcat). Simples. O problema é que tem que ser mais ou menos bom de html e css e JSf é mais complexo que JSP e MVC, mas também não é nada do outro mundo.
Tendencia : Vaadin + Spring IoC + web container. Não precisa programa html nem css nem javascript. É tudo java. Só java. Os padrões são os mesmos usados no swing , swt e outros frameworks dektop. Então isso lha dá um conhecimento de como seria a UI do desktop, mas sem o problema de criar todo o protocolo de comunicação. O ZK é uma opção ao Vaadin. Ai é questão de gosto, talvez…
Desktop sem web
Cliente : JavaFX para a UI + Spring IoC para organização + JWS para distribuição. Servidor : JEE . Uso de EJB remote para a comunicação.
Desktop com web
Cliente : JavaFX para a UI + Spring IoC para organização + JWS para distribuição. Servidor : Web container. Uso de REST para a comunicação.
Desktop com web + Modulo de acesso pelo Browser
Cliente Desktop : JavaFX para a UI + Spring IoC para organização + JWS para distribuição. Servidor : Web container. Uso de REST para a comunicação.
Cliente Browser :um de “Só Web”
Existem realmente muitas opções. Vc poderia aprender todas e decidir depois. Mas pragmaticamente isso é impossível. Aliás, por isso que vc veio perguntar aqui. A principio eu lhe diria para usar o que já conhece,mas como não conhece nada, então esse conselho não serve. Então o próximo passo é : exclua o que é velho. O que é mais novo é mais dificil. Vc vai encontrar menos ajuda na net. Mas sendo que vc quer ralar, isso é o ideal para vc.
Independentemente da tecnologia pense na aquitetura e no design primeiro. Depois escolha a tecnologia que mais o ajudar a montar seu design. Tenha em mente que numa aplicação distribuída cada nodo tem as mesmas camadas que o outro, mas não necessariamente implementadas da mesma forma. as camadas padrão são
Cliente UI (a parte que realmente integra com o usuario e ele vê. Por ser o swing, o swt, o jvafx, o html , etc…) Vc tem que usar uma tecnologia para pegar os gestos e itenções do usuário e devolver a informação.
Apresentação. Esta parte é independente do Cliente. Então, qualquer cliente deve encaixar nesta camada. Esta camada contém as regras de apresentação. Navegação, desabilitação, foco, mensagens popup, etc… e delegação à camada de baixo
Dominio. Aqui estão as regras verdadeiras que podem ser chamadas de diferentes apresentações em diferentes clientes e nodos. É o core. É o sistema realmente dito.
Integração. Chamadas as outros nodos. Ao sistema de arquivos. Ao OS. Ao banco de dados. No servidor isto é normalmente a ligação ao banco. No cliente isto é a ligação ao servidor.
Recursos. Isto são os dados em si. Arquivos de configuração. Arquvios de imagem. Bancos de dados. Indexes do lucene. etc… Algums dados têm que viajar de nodo para nodo, outros não.
Não é apenas uma questão tecnológica. É uma questão de design. Por isso que eu falei que as suas razões eram erradas. Vc quer abraçar o mundo. Não precisa.
Comece por baixo. Veja funcionando. Depois vc expande. Por exemplo, o desktop é muito legal e pode paracer que vai dar uma melhor user experience , mas qual é a razão real para usar desktop ? Hoje em dia web faz tudo que o desktop faz e é muito mais rápido de criar. Tem que haver uma razão para ir para o desktop. Sem ela é tudo um exercício fútil. uma razão que eu sempre penso é integração com periféricos. Impressora, scanner, essas coisas. Se isso é necessário então o desktop é mais recomendado, de fato. Mas a pergunta tem que ser : preciso mesmo disso ?