Solução ao JSF. O que a comunidade está usando

FATO, pra WebApp eu não cogitaria outra coisa alem de JSF. Por N fatores, mas o principal seria pessoal… É o framework que eu conheço melhor, então minha produtividade com ele é alta…

[quote=gomesrod]Se ater ao uso da especificação = JSF :slight_smile:
Utilizar Servlet/JSP para uma aplicação completa hoje em dia não é nem mesmo considerado uma opção, não tem como competir em produtividade com outros frameworks.

Sei que para determinadas empresas quanto mais dentro do padrão melhor, mas existem outros nomes que são muito bem aceitos até por grandes corporações. Produtos como Struts, Spring, Hibernate, Apache Commons, etc que acabaram tornando-se padrões de facto para o desenvolvimento de aplicações.
Portanto, se houvesse esse tipo de restrição eu não partiria para o VRaptor por exemplo (que apesar do reconhecimento da comunidade ainda pode ser considerado arriscado em ambientes mais tradicionais), mas tentaria outros frameworks vinculados a nomes “de respeito” como Struts 2 (é leve e rápido) e Spring MVC 3 (boa produtividade, trabalha com alguns conceitos parecidos com o VRaptor).[/quote]

Opa Gomes, beleza cara ?

Pois bem, imaginava que pudesse ouvir essa relação entre “Spec = JSF” e “Servlest + JSP(puros) = inviável”…

Eu sempre pensei assim como você colocou, só que pensei que a tecnologia houvesse evoluido de forma a minimizar esses conceitos negativos… Enfim, Obrigado pelo retorno e qualquer outra dica será muito bem vinda.

Abs []

:? “o controle vos libertará”

Por que você não quer fugir muito da especificação?
Restrição da empresa/cliente?

Como já dito a única especificação é JSF…
Servlet/JSP são especificação, mas para uma camada mais baixa.

Se está afim de conhecer o mundo fora do JSF, acho que pode relaxar um pouco estas restrições.

Quais critérios está avaliando para selecionar uma opção?

Produtividade é um critério complicado de se avaliar para uma ferramenta que não conhece.
Você sempre será mais produtivo com JSF enquanto só fizer projetos com ele.

Sugiro que faça um projeto mínimo com cada uma das sugestões citadas e sinta se aquilo combina com seu estilo de desenvolvimento.
E quando digo projeto mínimo, tô falando de uma noite, 4 horas, de trabalho.
Aquele projeto de exemplo da apostila doVraptor por exemplo, dá pra fazer em menos de 2 se seguir o passo a passo.

Caso esteja disposto a experimentar ainda mais, sugiro dar uma olhada no Backbone.js ou no Spine.js (com backend em Vraptor ou Spring).

Já que está querendo utilizar uma nova tecnologia, aprendendo coisas diferentes,
que tal em ir de Play Framework 2.0 e se tornar super produtivo, sendo que pode
utilizar scala ou java como linguagem base.

Essa é uma solução que consideraria no seu leque.

Cara, achei tão interessante essa discussão que vô até acompanha-la, estou com a mesma dúvida(apesar de bastante esclarecida aqui). A diferença é que estou entrando nesse “mundo JSF” agora, e devo concordar com alguns que citaram toda beleza e facilidades dos componentes rich, prime, etc… No entanto, perambula sobre mim a seguinte problemática: tenho alguns sites para fazer, não consigo abstrair e construir(ainda, por falta de conhecimento e prática) um mecanismo para gerencia-los de tal forma que este seja único e suficiente para qualquer site que venha fazer. Para tal, já consegui assimilar a idéia do hibernate e do jsf, to entrando em breve no Spring. Logo(por tudo que vi falarem até aqui), sei que, principalmente, o jsf e richfaces vai me ajudar nessa aplicação enquanto nos sites pode ser inviável, certo?

Obrigado.

Porque não VAADIN… http://demo.vaadin.com/sampler ou GWT… http://gwt.google.com/samples/Showcase/Showcase.html#!CwCheckBox ?!

Ferreira, achei interessante… tô aprendendo mesmo, vô da uma “olhadela” a noite, mas me diz aí… isso é para substituir o rich e JSF, seria pra usar com servlet? desculpa se viajei agora… mas é a inexperiência falando.

[quote=ferreira2006@gmail.com]Porque não VAADIN… http://demo.vaadin.com/sampler ou GWT… http://gwt.google.com/samples/Showcase/Showcase.html#!CwCheckBox ?![/quote]De certo modo o VAADIN é component based como o JSF. Se for para fugir de JSF não acho que esse cara seria uma boa idéia, apesar de seu modo de desenvolvimento ser totalmente diferente.
https://vaadin.com/learn

pera lá Ferreira, deixa eu perguntar melhor: com o GWT e/ou Vaadin eu posso deixar o resto da minha aplicação(beans, managedBeans e daos) do mesmo jeito, mudando então só a view? e como ficaria isso, tipo: requisição para uma servlet->processo->resposta html(gerada pelo GWT) para o cliente por exemplo com um “out.print(meuGwt)” . é isso?

É por aí … a forma de trabalho é muito parecida com swing … a questão de servlet e implantações, mudam bastante com relação ao jsp … vc acaba trabalhando mais no lado servidor … o gwt “puro” limita o uso para apenas algumas classes do java, porem com o vaadin é possivel usar quase tudo do java… estou olhando com mais atenção o vaadin, e ainda não encontrei maiores problemas no seu uso… no Brasil ele nao é muito conhecido, mas a comunidade “lá de fora” é grande.
O vaadin abstrai toda a conversaiada do cliente e servidor (servlet), fornecendo conponentes que acabam fazendo o trabalho pesado, por exemplo esta é uma tela de login que andei testando:

@SuppressWarnings("serial")
public class LoginPanel extends VerticalLayout {	

	private LoginForm loginForm; // componente fornecido pelo VAADIN
	private JanelaPrincipal janelaPrincipal;
	
	public LoginPanel( JanelaPrincipal janelaPrincipal) {
        this.janelaPrincipal = janelaPrincipal;                
        initUI();
	}

	private void initUI() {
		
	this.janelaPrincipal.getTitulo().setValue("Acesso ao Sistema");
	loginForm = new LoginForm();
    	loginForm.setLoginButtonCaption("Login");
    	loginForm.setUsernameCaption("E-mail");
    	loginForm.setPasswordCaption("Senha");
    	
    	
    	setStyleName("login");
    	
    	loginForm.addListener(new LoginListener() {		
    		 public void onLogin(LoginForm.LoginEvent event) {  
    			 
                 String email = event.getLoginParameter("username");
                 String pass = new CriptografaString().criptografaString(event.getLoginParameter("password"));
				try {
					PessoaVo usuario = new PessoaDao().buscaUsuarioLogin(email, pass);
					if (usuario != null) {
						janelaPrincipal.getTitulo().setValue("");
						janelaPrincipal.getApplication().setUser(usuario.getNomeCompleto());
					//	janelaPrincipal.removeComponent(janelaPrincipal.getRodape());
						janelaPrincipal.getRodape().setVisible(false);
					}else {
						getWindow().showNotification("Email e/ou senha incorreto(s)", Notification.TYPE_ERROR_MESSAGE);
					}

				} catch (Exception e) {
					getWindow().showNotification("Email e/ou senha incorreto(s)", Notification.TYPE_ERROR_MESSAGE);
					e.printStackTrace();					
				}
                  
             }

		});
    	
    	HorizontalLayout hl = new HorizontalLayout();
    	hl.setSpacing(true);
    	Button btnCadastro = new Button("Não sou Cadastrado");
    	btnCadastro.setStyleName(Runo.BUTTON_LINK);
    	btnCadastro.addListener(new Button.ClickListener() {
			
			public void buttonClick(ClickEvent event) {
				janelaPrincipal.addWindow(new NovoUsuario(janelaPrincipal));
			}
		});
    	Button btnEsqueci = new Button("Esqueci a senha");
    	btnEsqueci.setStyleName(Runo.BUTTON_LINK);
    	btnEsqueci.addListener(new Button.ClickListener() {
			
			public void buttonClick(ClickEvent event) {
				janelaPrincipal.addWindow(new EsqueciSenha(janelaPrincipal));
			}
		});
    	
    	hl.addComponent(btnCadastro);
    	hl.addComponent(btnEsqueci);
    	    	
    	setMargin(true);
    	addComponent(new CenterLayout(loginForm));    	
    	addComponent(hl);
    	
	}
}

[quote=ferreira2006@gmail.com]É por aí … a forma de trabalho é muito parecida com swing … a questão de servlet e implantações, mudam bastante com relação ao jsp … vc acaba trabalhando mais no lado servidor … o gwt “puro” limita o uso para apenas algumas classes do java, porem com o vaadin é possivel usar quase tudo do java… estou olhando com mais atenção o vaadin, e ainda não encontrei maiores problemas no seu uso… no Brasil ele nao é muito conhecido, mas a comunidade “lá de fora” é grande.
O vaadin abstrai toda a conversaiada do cliente e servidor (servlet), fornecendo conponentes que acabam fazendo o trabalho pesado, por exemplo esta é uma tela de login que andei testando:

[code]
@SuppressWarnings(“serial”)
public class LoginPanel extends VerticalLayout {

private LoginForm loginForm; // componente fornecido pelo VAADIN
private JanelaPrincipal janelaPrincipal;

public LoginPanel( JanelaPrincipal janelaPrincipal) {
    this.janelaPrincipal = janelaPrincipal;                
    initUI();
}

private void initUI() {
	
this.janelaPrincipal.getTitulo().setValue("Acesso ao Sistema");
loginForm = new LoginForm();
	loginForm.setLoginButtonCaption("Login");
	loginForm.setUsernameCaption("E-mail");
	loginForm.setPasswordCaption("Senha");
	
	
	setStyleName("login");
	
	loginForm.addListener(new LoginListener() {		
		 public void onLogin(LoginForm.LoginEvent event) {  
			 
             String email = event.getLoginParameter("username");
             String pass = new CriptografaString().criptografaString(event.getLoginParameter("password"));
			try {
				PessoaVo usuario = new PessoaDao().buscaUsuarioLogin(email, pass);
				if (usuario != null) {
					janelaPrincipal.getTitulo().setValue("");
					janelaPrincipal.getApplication().setUser(usuario.getNomeCompleto());
				//	janelaPrincipal.removeComponent(janelaPrincipal.getRodape());
					janelaPrincipal.getRodape().setVisible(false);
				}else {
					getWindow().showNotification("Email e/ou senha incorreto(s)", Notification.TYPE_ERROR_MESSAGE);
				}

			} catch (Exception e) {
				getWindow().showNotification("Email e/ou senha incorreto(s)", Notification.TYPE_ERROR_MESSAGE);
				e.printStackTrace();					
			}
              
         }

	});
	
	HorizontalLayout hl = new HorizontalLayout();
	hl.setSpacing(true);
	Button btnCadastro = new Button("Não sou Cadastrado");
	btnCadastro.setStyleName(Runo.BUTTON_LINK);
	btnCadastro.addListener(new Button.ClickListener() {
		
		public void buttonClick(ClickEvent event) {
			janelaPrincipal.addWindow(new NovoUsuario(janelaPrincipal));
		}
	});
	Button btnEsqueci = new Button("Esqueci a senha");
	btnEsqueci.setStyleName(Runo.BUTTON_LINK);
	btnEsqueci.addListener(new Button.ClickListener() {
		
		public void buttonClick(ClickEvent event) {
			janelaPrincipal.addWindow(new EsqueciSenha(janelaPrincipal));
		}
	});
	
	hl.addComponent(btnCadastro);
	hl.addComponent(btnEsqueci);
	    	
	setMargin(true);
	addComponent(new CenterLayout(loginForm));    	
	addComponent(hl);
	
}

}
[/code][/quote]

O GWT limita bibliotecas apenas em código que será traduzido em Javascript, no lado servidor você pode usar o que quiser do Java, além do mais, você só é obrigado a usar Java se o seu protocolo de comunicação for o RCP, usando Json você pode usar qualquer back-end. Quanto ao Vaadin, o framework me parece ser muito bom, só estou desconfiado dessa história de “abstrair completamente a comunicação com o servidor”.

É cara, andei analisando um pouco, e achei interessante o vaadin. Como é o primeiro projeto que estou metendo a cara pra fazer, acho bom ter um estudo aprofundado do tema, pois gostaria de evitar ao máximo o alto acoplamento. Pago o preço com o tempo, vai demorar mas um dia saí.

obg

[quote=Shoknes]É cara, andei analisando um pouco, e achei interessante o vaadin. Como é o primeiro projeto que estou metendo a cara pra fazer, acho bom ter um estudo aprofundado do tema, pois gostaria de evitar ao máximo o alto acoplamento. Pago o preço com o tempo, vai demorar mas um dia saí.

obg[/quote]

Já que é o seu 1o projeto, porque não usar JSP & Servlets mesmo ? No caso, Servlets são a base de praticamente todos os frameworks Web para Java. Já as JSP’s são usadads geralmente em frameworks action based.

é cara, acho que já to pra ficar louco(sabe aquela coisa, quanto aprendo mais tenho a aprender?)… mas basicamente a combinação Hibernate, JSF e Spring me deixou encantado. Por isso busco uma alternativa para ganhar tempo com o JSF, ou seja, o vaadim vai de encontro, assim como rich e outros. Mas tá legal já, melhor terminar logo o projeto e depois avaliar a estrutura utilizada e buscar alternativas…
obg pelo feedback. vlws

[quote=rmendes08][quote=Shoknes]É cara, andei analisando um pouco, e achei interessante o vaadin. Como é o primeiro projeto que estou metendo a cara pra fazer, acho bom ter um estudo aprofundado do tema, pois gostaria de evitar ao máximo o alto acoplamento. Pago o preço com o tempo, vai demorar mas um dia saí.

obg[/quote]

Já que é o seu 1o projeto, porque não usar JSP & Servlets mesmo ? No caso, Servlets são a base de praticamente todos os frameworks Web para Java. Já as JSP’s são usadads geralmente em frameworks action based.[/quote]+1
Realmente o melhor que tem é começar a aprender JSP e Servlet

[quote=jakefrog][quote=rmendes08][quote=Shoknes]É cara, andei analisando um pouco, e achei interessante o vaadin. Como é o primeiro projeto que estou metendo a cara pra fazer, acho bom ter um estudo aprofundado do tema, pois gostaria de evitar ao máximo o alto acoplamento. Pago o preço com o tempo, vai demorar mas um dia saí.

obg[/quote]

Já que é o seu 1o projeto, porque não usar JSP & Servlets mesmo ? No caso, Servlets são a base de praticamente todos os frameworks Web para Java. Já as JSP’s são usadads geralmente em frameworks action based.[/quote]+1
Realmente o melhor que tem é começar a aprender JSP e Servlet[/quote]Para aprender recomendo também Servlet+JSP, mas não recomendo scriplets (ninguém falou nisso aqui, só para comentar mesmo)

Bom, foi falado que action based é sempre mais performático que component based (não sei se eu entendi direito), não é bem assim. Depende muito da implementação, não vou dizer “ah, JSF é muito melhor que qualquer outro framework” (até porque só conheço struts e spring mvc, e ambos eu achei mais lento que JSF), mas a implementação do component based pode ser mais performática que uma outra implementação de action-based.

Especificamente, o JSF não faz o parse do XHTML em cada requisição, ele já tem “pré-carregado” na memória a maioria das páginas mais acessadas antes de ser requisitadas, dessa forma bastando apenas mudar os valores dinâmicos, isso torna mais rápido tanto para requisições semelhantes quanto para ajax que a implementação “padrão” de action based. Claro, outras libs action based podem implementar soluções mais rápidas (que eu desconheço). Outra coisa, segundo testes (que eu não confio normalmente, a maioria é tendencioso), o facelets é até 70% mais rápido que a mesma página em JSP (eu não confirmei isso, em testes com jmeter comparando com spring tive cerca de 40% mais requisições por segundo no facelets). Mas considerem também que eu fiz esses testes antes de “aprender a fundo” qualquer uma das duas tecnologias, portanto, talvez um código otimizado spring seja mais performático que o código otimizado JSF… Bem situações específicas que o JSF e o Spring revezam o melhor desempenho.

Mas no fim, o que vai fazer mais diferença no desempenho é a otimizaçao da regra de negócios…

Sobre os componentes para o faces facilitarem, já ouvi dizer que dá para usar primefaces com spring mvc, mas nunca usei.

Eu particularmente prefiro a combinação JSF + JPA2 (uso o eclipselink) + EJB3 (no lugar de Spring, mas qualquer um dos dois serviria nesse caso, só não quero adicionar libs extras no projeto e os app containers já tem EJB)

Outra coisa, se é um sistema mais como um “portal” ou algo assim, cogite usar o Liferay como base e criar plugins para ele. O Liferay é bem performático.

Amigo, minha opnião:

Para fazer Web, penso que html+css+javascript, é o que da maior flexibilidade, pois é disso que a Web é feita.

Em relação a produtividade, vejo que o material disponivel é tanto (quando se adota o html para view), pois pode pegar html puro, gerado por programas de design, gerado por sistemas php, etc etc, ou seja, eu discordo quando dizem que fazer html na unha é improdutivo… eu acho até mesmo mais produtivo que muito framework (tipo struts 1 que mais atrapalha do que ajuda).

Mas então falando de html e css… você pode utilizar qualquer editor para criar o layout do site e facilmente consegue adaptar o mesmo para JSP, usando JSTL e para as regras mais complexas criar suas próprias taglibs (eu acho isso simples)! Já trabalhei com designers que faziam o serviço de layout no dreamweaver e depois o estagiário enxugava o HTML, limpava e identava o código e preparava a JSP com JSTL. As taglibs eu costumo deixar pro final.

Escrevendo javascript usando algo como jquery (meu preferido), o trabalho de JS também é bem facilitado! (Neste caso concordo que javascript é meio chato de trabalhar e não tão produtivo quanto java, mas por isso que abstraio muita coisa via AJAX e para fazer a parte de AJAX… eu gosto do DWR!

Ja fiz diversos sistemas usando a combinação: HTML+CSS+JASVACRIPT (JSP) + JSTL + TAGLIBS + DWR e não tive problemas (não posso falar a mesma coisa com alguns outros frameworks baseados em componente, pois no caso de websites, eu vejo eles como limitadores sim, ou no minimo, quando tem algum problema sério e precisa gerar seus próprios componentes… a sua produtividade ganha no começo do projeto vai toda por agua abaixo). Sei la… JSF para web, tem algumas combinações bizarras de SO + Browser que costumam dar problemas em alguns componentes, sem dizer que é tanto AJAX que os sistemas feitos com estas tecnologias costumam não funcionar direito em conexões lentas (tipo discada)! Por isso vejo que é importante analisar o que precisa ser feito para escolher a tecnologia.

Para o Controller, só considero o uso de Servlets se tiver poucas coisas ou se implementar o pattern de Front Controller e abstrair algumas coisas básicas da aplicação!
Caso contrário, acho que tanto faz usar Spring MVC, VRaptor, entre outros… será mais uma questão de gosto mesmo!

Eu penso… se é web (site)… quase sempre adoto JSP+JSTL+DWR e uso Spring ou implemento Fronto Controller.
JSF vejo como uma coisa melhor para intranets e aquilo que roda na rede local, embora para este tipo de solução, muitas vezes é vantagem utilizar Swing e/ou SWT, ou até mesmo um cliente desktop em .NET (quando precisa rodar em maquinas lentas com 256Mb de memória).

Boa sorte no projeto

uma coisa que eu iria até sugerir você “considerar” (fugindo um pouco do framework “MVC” mas sem se esquecer do padrão MVC) seria você usar jax-ws com rest… aproveitando ejbs pra facilitar escalabilidade…

ai no lado cliente neste caso não se esquecer de usar alguma lib js como o jquery por exemplo… os componentes vão fazer uma baita falta (seja qualquer framework action based que você tenha escolhido)…rs

Não sei se o autor ainda está considerando opiniões, mas hoje eu escolheria Spring + Play! Framework.

Spring com Hibernate 4 (para model/controller) e o Play! Framework para View.

Escalável, Rápido e Produtivo!