Next Framework 3.5 - Desenvolvimento simples de aplicações JEE (Baseado em Spring e Hibernate)

Tem um outro sistema, que eu participei inclusive, para a Citröen…

Era um sistema feito para celular, só que a parte servidor, foi feita no Next…
A parte view, foi modificada, para a geração das tags de acordo que o aplicativo que rodava no celular pedia…
http://www.citroen.com.br/_v2/mobile/modelos.asp

Nessa página tem um flash com telas do sistema…

[quote=rogelgarcia]Se quiserem, podem criar um caso de uso qualquer, que seja relativamente pequeno, eu implemento e posto o código aqui no fórum para vocês verem… (tem que ser relativamente pequeno, apenas para caber aqui no fórum)
[/quote]

Existe tanto projetinho oferencedo mil maravilhas que fica difícil chamar a atenção. Por mais que vc fale que o next é isso, é aquilo, é o primeiro framework a usar tal coisa, etc. Não me convence muito.
Até olhei o site, mas sinceramente, muito texto, vídeo, etc. Que tal algo mais objetivo?
Cria uns projetinho de exemplo no github, libera pra galera baixar, fuçar e assim ver os beneficios.

talvez seja impreção minha mas o pessoal ta todo desconfiado e botando defeito, sendo que se ele for tudo o que se propõe então é um excelente framework…

parabens, achei bem interessante… até gostaria de estuda-lo, mas vo da preferencia no momento por alguns outros que tem mais mercado… gostaria de ve-lo no futuro…

[quote=fabiofalci][quote=rogelgarcia]Se quiserem, podem criar um caso de uso qualquer, que seja relativamente pequeno, eu implemento e posto o código aqui no fórum para vocês verem… (tem que ser relativamente pequeno, apenas para caber aqui no fórum)
[/quote]

Existe tanto projetinho oferencedo mil maravilhas que fica difícil chamar a atenção. Por mais que vc fale que o next é isso, é aquilo, é o primeiro framework a usar tal coisa, etc. Não me convence muito.
Até olhei o site, mas sinceramente, muito texto, vídeo, etc. Que tal algo mais objetivo?
Cria uns projetinho de exemplo no github, libera pra galera baixar, fuçar e assim ver os beneficios.
[/quote]

Fala fabio, tudo bom?

Criei uma aplicação, pequena, para servir de exemplo mesmo, mas já dá pra ver alguma coisa…
Utilizei a idéia do nosso amigo que queria fazer um sistema para padaria…
Criei 2 CRUDs, sendo que um possui UPLOAD
E mais uma tela, fora do padrão…
São 5 entidades:

  • Funcionario: para guardar os registros de funcionario
  • Pao: para guardar os nomes e preços dos pães
  • Arquivo: para guardar a foto do funcionario
  • Venda: para guardar uma venda
  • ItemVenda: para guardar cada item de uma venda

[color=darkblue]A aplicação consiste em um cadastro de pão.
Um cadastro de funcionário, onde deve ser possível fazer um upload para a foto do mesmo. Essa foto será mostrada tanto na tela de listagem de dados, quanto na entrada de dados.
E um formulário para cadastrar uma venda e seus itens. A venda terá uma referência para um funcionário.[/color]

A aplicação pode ser baixada em: http://www.nextframework.org/download/padaria.zip
Ela está pronta para funcionar no Tomcat 6… é só descompactar…
Tem uma pasta src com os fontes…
Para configurar o banco de dados, edite o arquivo connection.properties que está dentro de WEB-INF/classes e lembre-se de colocar o JAR do driver do seu banco de dados. As tabelas serão criadas automaticamente…

Para facilitar o trabalho, vou colocar aqui alguns códigos que tiveram alguma intervenção e imagens da aplicação:

Para funcionar o Upload, deve ser criada uma classe na aplicação que implemente File, exemplo:

@Entity
public class Arquivo implements File {
	
	Long cdfile;
	String name;
	String contenttype;
	byte[] content;
	Long size;
	
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "sq_Arquivo")
	@SequenceGenerator(name = "sq_Arquivo", sequenceName = "sq_Arquivo")
	public Long getCdfile() {
		return cdfile;
	}
	public String getName() {
		return name;
	}
	public String getContenttype() {
		return contenttype;
	}
	public byte[] getContent() {
		return content;
	}
	public Long getSize() {
		return size;
	}
	public void setCdfile(Long cdfile) {
		this.cdfile = cdfile;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void setContenttype(String contenttype) {
		this.contenttype = contenttype;
	}
	public void setContent(byte[] content) {
		this.content = content;
	}
	public void setSize(Long size) {
		this.size = size;
	}

}

É uma entidade normal do hibernate, com getters e setters… Os atributos necessários estão definidos por getters e setters da interface File.
Com essa classe o upload de arquivos fica habilitado.

Para utilizar o arquivo, no Funcionario, é trivial:

...
public class Funcionario {
         .... //outros atributos
         Arquivo foto;

         @ManyToOne(fetch=FetchType.LAZY)
         public Arquivo getFoto() {
                  return foto;
         }

         .... // getters e setters

Quando um funcionário for persistido, o arquivo será detectado e todo o código necessário para a sua persistencia será executado…

Em um JSP, para criar o campo de upload para a foto, basta fazer:

<t:property name="foto"/>

Na listagem de funcionário eu farei testes na foto para verificar se ela existe e então exibir a imagem. Será necessário buscar a foto quando buscar o funcionário, então o DAO de Funcionario ficou assim:

public class FuncionarioDAO extends GenericDAO<Funcionario>{

	@Override
	public void updateListagemQuery(QueryBuilder<Funcionario> query, FiltroListagem filtro) {
		query.leftOuterJoinFetch("funcionario.foto"); // atualizamos a query de listagem de dados para carregar também a foto
	}
}

Também fiz um controller personalizado para a venda… Esse controller ficou assim:

@Controller(path="/site/Venda") //configura a URL
public class VendaController extends MultiActionController {
	
	VendaDAO vendaDAO; // o DAO de Venda será injetado por existir um setter para ele
	
	public void setVendaDAO(VendaDAO vendaDAO) {
		this.vendaDAO = vendaDAO;
	}

	public ModelAndView criar(WebRequestContext request){ // Action para criar uma nova venda
		request.setAttribute("venda", new Venda());
		return new ModelAndView("venda"); //redirecionando para o JSP
	}
	
	public ModelAndView salvar(WebRequestContext request, Venda venda){ //Action para salvar a venda
		vendaDAO.saveOrUpdate(venda); // salvamos a venda no banco de dados
		request.addMessage("Venda criada com sucesso!"); //exibimos uma mensagem de sucesso
 		return sendRedirectToAction("criar"); //enviamos um redirecionamento para a acao 'criar'
	}
}

Para salvar a venda junto com seus itens (mestre/detalhe), o DAO de Venda sofreu a seguinte alteração:

public class VendaDAO extends GenericDAO<Venda>{
	
	@Override
	public void updateSaveOrUpdate(SaveOrUpdateStrategy save) {
		save.saveOrUpdateManaged("itens");//salva os itens da venda junto com a venda em apenas uma transação
	}
}

Basicamente, essas foram as alterações necessárias… Os outros DAOs e Controllers ficaram no padrão, ou seja, não foi necessário codificar nada extra…


Vamos aos JSPs e telas então

Cadastro de Pão, ficou padronizado:

<%@ taglib prefix="t" uri="template"%>
<t:listagem>
	<t:janelaResultados>
		<t:tabelaResultados>
			<t:property name="id"/>
			<t:property name="nome"/>
			<t:property name="preco"/>
		</t:tabelaResultados>
	</t:janelaResultados>
</t:listagem>

<%@ taglib prefix="t" uri="template"%>
<t:entrada>
	<t:janelaEntrada>
		<t:tabelaEntrada>
			<t:property name="id"/>
			<t:property name="nome"/>
			<t:property name="preco"/>
		</t:tabelaEntrada>
	</t:janelaEntrada>
</t:entrada>

Cadastro de funcionário, sofreu algumas alterações para exibir e foto do Funcionario.

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="n" uri="next"%>
<%@ taglib prefix="t" uri="template"%>

<t:listagem>
	<t:janelaResultados>
		<t:tabelaResultados>
			<t:property name="id"/>
			<n:column header="Foto" width="40">
				<c:if test="${!empty funcionario.foto}">
					<img src="${app}/DOWNLOADFILE/${funcionario.foto.cdfile}" width="32"/><!-- <t:property name="foto"/> -->
				</c:if>
			</n:column>
			<t:property name="nome"/>
		</t:tabelaResultados>
	</t:janelaResultados>
</t:listagem>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="n" uri="next"%>
<%@ taglib prefix="t" uri="template"%>

<t:entrada>
	<t:janelaEntrada>
		<t:tabelaEntrada>
			<t:property name="id"/>
			<n:panel>Foto</n:panel>
			<n:panel>
				<c:if test="${!empty funcionario.foto}">
					<img src="${app}/DOWNLOADFILE/${funcionario.foto.cdfile}"/><BR/>				
				</c:if>
				<t:property name="foto"/>
			</n:panel>
			<t:property name="nome"/>
		</t:tabelaEntrada>
	</t:janelaEntrada>
</t:entrada>

O JSP para cadastro da venda, que foi um JSP fora do padrão:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="n" uri="next"%>
<%@ taglib prefix="t" uri="template"%>

<t:tela titulo="Venda">
	<n:bean name="venda">
		<t:propertyConfig mode="input" renderAs="double">
		<n:panelGrid columns="2" class="inputWindow" width="100%">
			<t:property name="funcionario" labelStyle="width: 100px"/>
			<t:property name="data" type="hidden" write="true"/>
			<n:panel colspan="2">
				<t:detalhe name="itens">
					<t:property name="pao"/>
					<t:property name="quantidade"/>
				</t:detalhe>
			</n:panel>
			<n:submit action="salvar">Efetuar venda</n:submit>
		</n:panelGrid>
		</t:propertyConfig>
	</n:bean>
</t:tela>

A tag n:bean serve para podermos utilizar os t:property do bean selecionado
O n:panelGrid cria uma tabela com duas colunas para a tela ter uma organização
A tag t:propertyConfig indica a todos os t:property que eles estão em modo INPUT e deve renderizar utilizando duas colunas (DOUBLE, uma para o label, e uma para o INPUT)
A tag t:detalhe cria um detalhe (dataGrid) para a propriedade itens da venda, colocando um botão para adicionar e remover itens dinamicamente…


Acho que já dá pra ter uma noção… se tiver alguma dúvida ou curiosidade… basta perguntar…

Até mais

Obrigado

Alguem poderia citar outros frameworks no estilo desse next?

O Seam é assim, você coloca umas coisas e pum, faz uns cruds tb. O Grails então, super fácil, tipo o que fazemos com Rails.
Na boa, brasileiro gosta tb de criar framework Java, aqui por exemplo já vi uns 5 desde que comecei com a linguagem sendo que um é aclamado e a maioria vaiado. É um VRaptor que é muito, mas muito parecido com o Spring MVC, é um Next que lembra o Seam, é um X que faz o que Y tem. Convenhamos, o que mais vão inventar?

[quote=djemacao]O Seam é assim, você coloca umas coisas e pum, faz uns cruds tb. O Grails então, super fácil, tipo o que fazemos com Rails.
Na boa, brasileiro gosta tb de criar framework Java, aqui por exemplo já vi uns 5 desde que comecei com a linguagem sendo que um é aclamado e a maioria vaiado. É um VRaptor que é muito, mas muito parecido com o Spring MVC, é um Next que lembra o Seam, é um X que faz o que Y tem. Convenhamos, o que mais vão inventar?[/quote]

Cara, me desculpe, mas voce está enganado… o Seam é diferente do Next…
E o Seam também num é assim, faz e pum nao… porque dá muitos problemas… até voce conseguir fazer alguma coisa funcionar…

Fazer no Seam essa aplicação de exemplo aí… num é tão simples assim não.

[quote=maior_abandonado]talvez seja impreção minha mas o pessoal ta todo desconfiado e botando defeito, sendo que se ele for tudo o que se propõe então é um excelente framework…

parabens, achei bem interessante… até gostaria de estuda-lo, mas vo da preferencia no momento por alguns outros que tem mais mercado… gostaria de ve-lo no futuro…[/quote]

Concordo com voce, pessoal só ta malhando sem sequer experimentar o framework, fazer testes e etc. E a ideia dele parece bacana mesmo.

Ou agora é proibido criar framework???

[quote=rogelgarcia][quote=djemacao]O Seam é assim, você coloca umas coisas e pum, faz uns cruds tb. O Grails então, super fácil, tipo o que fazemos com Rails.
Na boa, brasileiro gosta tb de criar framework Java, aqui por exemplo já vi uns 5 desde que comecei com a linguagem sendo que um é aclamado e a maioria vaiado. É um VRaptor que é muito, mas muito parecido com o Spring MVC, é um Next que lembra o Seam, é um X que faz o que Y tem. Convenhamos, o que mais vão inventar?[/quote]

Cara, me desculpe, mas voce está enganado… o Seam é diferente do Next…
E o Seam também num é assim, faz e pum nao… porque dá muitos problemas… até voce conseguir fazer alguma coisa funcionar…

Fazer no Seam essa aplicação de exemplo aí… num é tão simples assim não.[/quote]
Cara, voce já usou o Seam mesmo? Fala sério, leia e aprenda:
http://docs.jboss.com/seam/2.2.0.GA/reference/en-US/html/gettingstarted.html
Para os desavisados que não conhecem, tem um tutorialzinho feito por brasileiro:
http://www.divshare.com/download/3772432-d51

Agora, o que Next faz que isso não faz? E tem mais, eu nunca tive dificuldade em ver o Seam funcionar, nem tive problemas. E já usei com Jetty, Tomcat e GlassFish. Nem precisei do JBoss.
Não leve como crítica ruim ao seu framework, é que quando conhecemos vários, vemos apenas o famoso “mais do mesmo”. Revolucionar que nem o Rails que faz todo mundo imitar até hoje num apareceu 1, desculpe a sinceridade.

jCompany

Já trabalhei com ele, só dor de cabeça, é pra quem não sabe montar a sua propria arquitetura direiro e prefere pagar por um monte de coisa open source do mercado em um pacotinho.

[quote=djemacao]O Seam é assim, você coloca umas coisas e pum, faz uns cruds tb. O Grails então, super fácil, tipo o que fazemos com Rails.
Na boa, brasileiro gosta tb de criar framework Java, aqui por exemplo já vi uns 5 desde que comecei com a linguagem sendo que um é aclamado e a maioria vaiado. É um VRaptor que é muito, mas muito parecido com o Spring MVC, é um Next que lembra o Seam, é um X que faz o que Y tem. Convenhamos, o que mais vão inventar?[/quote]

Isso tudo pq vender frameworks e consultoria tem dado grana.

Ótima iniciativa, parabens!

Infelizmente tambem estou focado em estudar outros frameworks mas pretendo acompanhar a evolução deste framework!

[quote=fredferrao][quote=maior_abandonado]talvez seja impreção minha mas o pessoal ta todo desconfiado e botando defeito, sendo que se ele for tudo o que se propõe então é um excelente framework…

parabens, achei bem interessante… até gostaria de estuda-lo, mas vo da preferencia no momento por alguns outros que tem mais mercado… gostaria de ve-lo no futuro…[/quote]

Concordo com voce, pessoal só ta malhando sem sequer experimentar o framework, fazer testes e etc. E a ideia dele parece bacana mesmo.

Ou agora é proibido criar framework???[/quote]

Não sei vc mas eu já to meio de saco cheio de ver toda semana surgir um framework novo.

Cara muito boa sua iniciativa rogelgarcia, essa história de que existe tal coisa nao adianta eu criar algo parecido pra mim é bravata,
porque pode ter mais X frameworks que fazem o que o Next faz, mas ele pode se a alternativa para quem nao gosta de nenhum deles…

Se por existir algo “grande” voce nao pode criar algo semelhante entao pq nao vejo a galera criticando os topicos desse nosso amigo aqui.

[quote=Jose111]Cara muito boa sua iniciativa rogelgarcia, essa história de que existe tal coisa nao adianta eu criar algo parecido pra mim é bravata,
porque pode ter mais X frameworks que fazem o que o Next faz, mas ele pode se a alternativa para quem nao gosta de nenhum deles…

Se por existir algo “grande” voce nao pode criar algo semelhante entao pq nao vejo a galera criticando os topicos desse nosso amigo aqui.[/quote]

É porque não lançam uma IDE todos os dias. Sai contando qtos frameworks foram lançado em 1 ano e quantos são brasileiros.

Cara, o JBoss Seam só é produtivo se você criar tags personalizadas ou utilizar algumas que alguém já criou. Isso foi dito pelo profissional da JBoss que veio na minha empresa vender o produto e a criação das tags.

Vai lá no Richfaces, olha o upload de arquivos e conta quantas linhas tem pra ver se são poucas. Sem contar que se usar aquele upload o debug não funciona. (isso pra mim é bizarro.) :shock:

Eu já usei os dois, o JBoss Seam é bom, com as tags personalizadas e tal, mas o Next ainda é bem melhor. :wink:

[]'s

[quote=djemacao][quote=rogelgarcia][quote=djemacao]O Seam é assim, você coloca umas coisas e pum, faz uns cruds tb. O Grails então, super fácil, tipo o que fazemos com Rails.
Na boa, brasileiro gosta tb de criar framework Java, aqui por exemplo já vi uns 5 desde que comecei com a linguagem sendo que um é aclamado e a maioria vaiado. É um VRaptor que é muito, mas muito parecido com o Spring MVC, é um Next que lembra o Seam, é um X que faz o que Y tem. Convenhamos, o que mais vão inventar?[/quote]

Cara, me desculpe, mas voce está enganado… o Seam é diferente do Next…
E o Seam também num é assim, faz e pum nao… porque dá muitos problemas… até voce conseguir fazer alguma coisa funcionar…

Fazer no Seam essa aplicação de exemplo aí… num é tão simples assim não.[/quote]
Cara, voce já usou o Seam mesmo? Fala sério, leia e aprenda:
http://docs.jboss.com/seam/2.2.0.GA/reference/en-US/html/gettingstarted.html
Para os desavisados que não conhecem, tem um tutorialzinho feito por brasileiro:
http://www.divshare.com/download/3772432-d51

Agora, o que Next faz que isso não faz? E tem mais, eu nunca tive dificuldade em ver o Seam funcionar, nem tive problemas. E já usei com Jetty, Tomcat e GlassFish. Nem precisei do JBoss.
Não leve como crítica ruim ao seu framework, é que quando conhecemos vários, vemos apenas o famoso “mais do mesmo”. Revolucionar que nem o Rails que faz todo mundo imitar até hoje num apareceu 1, desculpe a sinceridade.
[/quote]

Tranquilo cara, mas já trabalhei com o Seam já… é diferente mesmo…

Mas como eu disse ali atrás… o framework já existe a bastante tempo, inclusive a mais tempo que o Seam, então não foi tentativa de imitar um ou outro não… Ele surgiu como uma coisa original mesmo… Mas mesmo tendo surgido esses outros frameworks que tem algumas ideias que também estão presentes no Next, o Next ainda tem uma proposta diferente e algumas features não presentes em outros… Em primeiro momento, parece que é a mesma coisa, mas depois que voce trabalha, voce ve que tem certas diferenças… principalmente, pelo fato do JBoss Seam, na camada de visão utilizar framework orientado a componentes como o JSF…

Uma diferença grande que já dá pra percerber que o Next tem, é na questão do upload por exemplo… veja que não teve nada de código complicado para fazer o upload, só implementar uma classe com getters e setters…

Valew

mesmo se o framework nao for a bala de prata o importante e’ a intencao de colaborar e dar alternativas

Parabens :smiley:

Valew galera…

Obrigado a todos pela força no framework…

Mas podem continuar opinando… todas as criticas ou sugestões são bem vindas…

:smiley:

Se quiserem postar no fórum do framework, 100% também…

Quem quiser acompanhar as notícias do framework… tem um feed RSS na página principal… você pode adicionar o do google por exemplo, e receber notícias no seu gmail…

É por essas e outras coisas que as pessoas deixam de contribuir para este forum:

[quote=kikostyle][quote=peerless]Sem querer ser chato (daqui a pouco um moderador me da uma bronca), mas já sendo…

mais incrível ainda, é que o pessoal que conhece este framework, tem outro gosto em comum: Avatars de anime.
[/quote]

incrivel, se o cara é capas de juntar os amigos pra promover uma propanda do framework no forum qual seria a credibilidade do mesmo?[/quote]

[quote=djemacao]O Seam é assim, você coloca umas coisas e pum, faz uns cruds tb. O Grails então, super fácil, tipo o que fazemos com Rails.
Na boa, brasileiro gosta tb de criar framework Java, aqui por exemplo já vi uns 5 desde que comecei com a linguagem sendo que um é aclamado e a maioria vaiado. É um VRaptor que é muito, mas muito parecido com o Spring MVC, é um Next que lembra o Seam, é um X que faz o que Y tem. Convenhamos, o que mais vão inventar?[/quote]

Quando o pessoal aqui do forum resolveu criar o VRaptor deve ter sido a mesma coisa(Tentei achar posts antigos pra confirmar mas tava sem tempo), um monte de gente dizendo que é só mais um framework e tal, hoje o VRaptor cresceu e esta maduro!

E o Ruby on Rails que tambem foi criado pelo David Heinemeier Hansson, hoje é um dos frameworks pra web mais utilizados no mundo!

Algumas questões:

O que é um framework?
R: Entre outros termos, acho que nada mais é do que uma aplicação para ajudar (talvez ate para atrapalhar rss) a criar aplicações.

Quem cria/mantém um framework?
R: Empresas, comunidades ativas, pessoas comuns.

Quem mantem Vraptor, Spring, Jsf, Struts2, Wicket, etc…?
R: Empresas, comunidades ativas, pessoas comuns.

Quem mantem o Next?
R: pessoas comuns (Não foi citada nenhuma empresa).

E qual a diferença entre o Next (e qualquer outro novo framework que nao seja apoiado por uma grande empresa, ou lideres de comunidades ativas) e os outros (Vraptor, Spring, Jsf, Struts2, Wicket, etc…)?
R: A vontade (Boa vontade) de testar, contribuir com o projeto por parte dessa comunidade ou qualquer outra, e o fato de que uma grande empresa nao mantem o software.

Acho que o GUJ hoje não é uma comunidade, porque dizer simplesmente:

[quote=fabiocsilva]Até que aquele DAO ficou legal, mas a pergunta que não quer calar é: pra quê?
Por que sempre criar um framework novo ao invés de contribuir com um já existente? Não estou querendo ser chato, apenas gostaria de saber se há um motivo plausível para adotar esse framework.
Talvez devesse se chamar YAWF(Yet Another Web Framerork) ao invés de Neo :D[/quote]

é jogar um balde de agua fria, nas pessoas que estão tentando fazer alguma coisa util.

Se vocês me disserem que não querem usar um framework desse tipo (Que ainda não mantem uma comunidade ativa) em um projeto em produção tudo bem, agora ficar gritando que todo dia se inventa um framework novo é pura ignorância! É tentar freiar a as criações!

Claro, é evidente que o mercado de consultoria de frameworks web esta em alta aqui no Brasil, mas isso já é comum, sempre foi, era no desktop, agora é na web.

Em fim, não conheço o framework em questão, não participo do projeto, só estou defendendo que qualquer criação que traga algo de util é bem vinda, mas so podemos dizer se é util ou não, se testarmos, se não fazemos isso não podemos opinar!