Série Spring: Hello World no Spring

 

olá Pessoal,

Estarei dando inicio a mais uma série aqui no blog e dessa vez é com o Spring framework. No post de hoje veremos como dar um Hello World usando o Spring, parece algo simples e fácil né? Mas, na verdade é. Porém, para quem nunca mexeu com Spring ainda pode achar que é complicado.

O Spring

Sem entrar na teoria pq o que não falta é fonte explicando o que é e pra que serve o framework. Eu digo sempre que o Spring é cara que nos ajuda a não fazer as coisas chatas e repetivas do dia-dia, que normalmente para o cliente não tem valor algum.

 Hello World

Vamos criar um java project, mas não esqueça de ir no site do Spring e baixar a versão mais recente. Estarei usando a versão 3.x.

Development

1. Crie um  java project

2. E os seguintes packages
springhelloworldpackage

3. Agora crie uma classe chamada SpringHelloWorld que terá um método o qual irá imprimir no console a mensagem

“Hello World Spring”.

package br.com.camilolopes.classes;

public class SpringHelloWorld {

                public void showHelloWorld(){

                               System.out.println(“Hello World Spring”);

                }}

4. No package conf  crie um arquivo XML , aqui chamei de springconfiguration.xml. E adicione o código a seguir ao arquivo:

<beans xmlns=“http://www.springframework.org/schema/beans”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd”>

 <bean  id=“hello” class=“br.com.camilolopes.classes.SpringHelloWorld”/>

</beans>

 

O cabeçalho temos  a configuração do Spring e a versão que estamos o usando. Mas, o essencial está na tag do bean. Ali estamos dizendo ao Spring para ele instanciar um objeto para a classe SpringHelloWorld, sendo assim  na aplicação podemos obter essa instância pelo id do bean e invocar qualquer método disponível da classe. Isso é o mesmo que fazemos

SpringHelloWorld variavelInstancia = new SpringHelloWorld();

Só que agora quem faz isso é o Spring e não nós mais. Veremos a seguir na prática o uso.

5. crie uma classe com o método main. Chamei a minha de Main.

package br.com.camilolopes.main;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext; 

import br.com.camilolopes.classes.SpringHelloWorld;

public class Main {

      public static void main(String[] args) {

//          essa classe é o container

ApplicationContext applicationContext = new ClassPathXmlApplicationContext(

                        “conf/springconfiguration.xml”);

            SpringHelloWorld bean = (SpringHelloWorld) applicationContext.getBean(“hello”);

            bean.showHelloWorld();      }}

 O ApplicationContext é o coração do Spring é através deles que vamos obter o que precisamos para trabalhar. Observe que informei para o ApplicationContext  onde está o arquivo de configuração do Spring que ele precisa se basear.Em seguida tem um .getBean e passei o id do bean que desejo, que é o id que declaramos no xml:

<bean  id=“hello” class=“br.com.camilolopes.classes.SpringHelloWorld”/>

 Ou seja, nesse momento o Spring já fez o new na classe por baixo dos panos, agora podemos fazer o que quiser com o objeto, nesse caso chamei  o único método existente e o resultado foi:

helloworldspringresult

 Simples assim!!. E isso é o básico do Spring.

GitHub

Acesse o repositório no github com todos os projetos da série Spring:  https://github.com/camilolopes/workspacespring

Vou ficando por aqui e espero que tenham gostado do post.

Abraços,

 

 

Criando projeto JSF com Maven no Eclipse

Olá Pessoal,

No post de hoje vamos ver como criar um projeto JSF no Eclipse já suportando o Maven. Parece algo simples,  concorda? Mas pode dar uma dor de cabeça, e veremos o motivo.

Lets GO…

Starting…

Antes de mais nada instale o Jboss tools, conforme este post. Após a instalação, vamos ver o cenário que temos.

  • Maven 3.x
  • Eclipse Helios

Cenário 1

Você pode adicionar o maven ao seu projeto manualmente, ou seja, basta adicionar o pom.xml ao projeto e fazer as devidas configurações. Ideal é quando você já tem um projeto e no inicio não usava o maven, mas resolveu adotar agora, daí você não vai querer deletar o projeto e criar um novo “maven Project” certo. Mas sabemos que fazer configuração manualmente sempre é chato. Porém essa é uma forma de você adicionar o Maven ao seu projeto.

Cenário 2

Você está querendo começar um projeto do zero, tipo JSF Project. Mas, ao criar, vê que ele não está na estrutura do maven. E o que fazer? Podemos ir pelo cenário 1. Mas e se eu quiser já criar automático?  Há uma opção usando o File  New  Maven Project.



Quando escolhemos Maven Project há varias opções de criar um projeto, desde um simple maven Project, até um Project webapp.  Na imagem a seguir você pode ver as opções de maven Project disponíveis, porém muitos deles estão com bugs críticos que não cria o projeto ou dá umas exceções e trava tudo. Um exemplo é a appfuse para jsf + hibernate + Spring. Se tivesse funcionando seria muito show, mas infelizmente não está.  E o que fazer ir para o cenário 1?

É o que fiquei pensando. Apesar de podermos criar a nossa própria estrutura archetypes http://maven.apache.org/guides/mini/guide-creating-archetypes.html e ser fácil e rápido, mesmo assim ainda fiquei incomodado pelo fato de não conseguir gerar um projeto JSF, já com o Maven consegui com apenas alguns cliques.

Solução?

Sim, depois de muitas horas tentando entender o motivo e quebrando a cara com alguns plugins, achei um workaround. Vamos lá:

Crie um Maven Project (File è new è Project è maven project)

Na próxima tela deixe assim:

Clica em next e na tela seguinte vamos escolher maven-achetype-webapp

Clica em next

E agora vamos preencher. Estou presumindo que você já conhece o maven, então não irei explicar o que significa cada campo. Veja como ficou a minha:

Clique em finish.

Como você percebeu, o workaround foi criar um projeto do tipo webapp, mas ainda o projeto não tem suporte JSF, podemos fazer isso manualmente ou automaticamente. Clique com o botão direito no projeto e escolha configure >> add jsf capabilities:

Escolha o Servlet version 2.5

Clique em finish, no warning que aparecer clique em Yes

O projeto vai ficar “quebrado”, pois a versão do web.xml está diferente. Abra o web.xml e altere o version para 2.5

Agora precisamos adicionar as libs para JSF no pom.xml. Abra o pom.xml e clique na aba dependencies

E adicione:

com.sun.faces jsf-api

com.sun.faces jsf-impl

Não esqueça de adicionar também:

javax.servlet javax.servlet-api

javax.servlet jstl

Feito isso seu projeto deve tá assim:

Workaround para Windows 7

Quem tem Windows 7 pode se deparar com o problema de não conseguir executar “cmd” e para resolver o problema basta adicionar ao path do sistema o seguinte valor:

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem

O Maven não está atualizando no eclipse

Passei por esse problema de alterar o pom.xml e o maven não fazer o download das libs e a modificação não refletir no eclipse, daí basta forçar o download:

mvn eclipse:eclipse -DdownloadSources=true

Vou ficando por aqui, espero que tenham gostado do post.

See ya!

Rodando Jetty a partir do Maven

Olá Pessoal,

No post de hoje vamos ver como rodar o Jetty a partir do maven. Confesso que é a forma mais fácil e rápida. Já tentei de plugins no Eclipse etc, mas tem alguns plugins que dão muito trabalho, fora os bugs existentes.

Jetty no Maven

Para rodar o Jetty no maven é mais simples que tirar doce de criança. Caso não tenha nenhum projeto web com maven criado, siga os passos a seguir, caso contrário pule essa parte e veja só configuração do seu pom.xml e execute o maven.

Criando Projeto Maven Eclipse

File >> New >> Project

Maven  >> Maven Project

Clique em next e next

E na tela de Archetype escolha o projeto web, conforme a imagem a seguir:

A seguir o meu projeto:

Abra o arquivo pom.xml e vá na aba pom.xml.Dentro da tag build vamos adicionar o plugin para o Jetty e o maven vai se encarregar de fazer o restante:

<plugins>

<!– setup JETTY –>

<plugin>

<groupId>org.mortbay.jetty</groupId>

<artifactId>mavenjettyplugin</artifactId>

<version>6.1.26</version>

<configuration>

<!– uncomment this block if you want to change the default port jetty –>

<!– <connectors> <connector implementation=”org.mortbay.jetty.nio.SelectChannelConnector”>

<port>9090</port> </connector>

</connectors> –>

<!– force friendly name instead of artifact name + version –>              <contextPath>${project.build.finalName}</contextPath>

<!– You can save changes in a file or class and refresh your browser

to view the changes. –>

<scanIntervalSeconds>3</scanIntervalSeconds>

</configuration>

</plugin>

</plugins>

</build>

Feito isso, salve o arquivo e vamos rodar o jetty e ver  o resultado. Você pode rodar pelo Eclipse ou por fora via command line (eu gosto de rodar por fora).

Rodando pelo Eclipse

Clique com o botão direito no projeto >> Run As >> RunConfigurations

Escolha maven build e deixe conforme a tela a seguir:

Aqui não tem nada demais, apenas roda o comando mvn jetty:run e em base directory informamos o projeto que queremos.

Feito isso, o console do Eclipse deve estar assim:

Então podemos ver que o Jetty subiu normalmente.

Rodando via command line Windows

É bem simples. Abra o prompt do  Windows e vá até o diretório onde está o seu projeto. Ao chegar lá, execute o seguinte comando : mvn jetty:run  e veja que o Jetty será started. Na primeira vez que você fizer isso, o maven vai baixar os .jars  que são requeridos e deve demorar um pouco.

Testando aplicação

Para testar a aplicação é bem simples, com o Jetty rodando apenas digite no browser http://localhost:8080/   vai dar erro 404, não se preocupe, clique no link que está nessa página e certamente você vai ver a página index da sua aplicação, conforme a imagem a seguir:

Vou ficando por aqui!! Espero que tenham gostado do post.

See ya!! Abraços

Throubleshooting Maven não fazendo checkout eclipse

Olá Pessoal,

E lá vamos nós com mais um troubleshoot. Hoje veremos um do maven com eclipse.

O problema

Se você ainda não passou, talvez vai passar por esse problema algum dia ao rodar o comando mvn eclipse:eclipse e ver que o checkout das dependências que você acabou de atualizar não está sendo feito. Iai o que fazer?

A solução

Basta forçarmos isso com o comando:

mvn eclipse:eclipse -DdownloadSources=true

E pronto. Será baixado e seu problema resolvido.

Bobo, né? Mas dá um trabalho até descobrir que só.

Abracos, see ya!

Throubleshooting:Hibernate Maven Javassist

Olá Pessoal,

Mais um post throubleshoot e novamente entre o hibernate e o maven.

Lets go...

O Problema

Ao adicionar o hibernate no pom.xml, se reparar não vem o javassist. Pelo menos até a versão 3.6 ele não veio no pom.xml. Daí, ao rodar a aplicação veremos algumas exceções do HibernateException.

Solução

Basta adicionarmos no pom.xml o javassist conforme abaixo e pronto.

<groupId>javassist</groupId>

                               <artifactId>javassist</artifactId>

                               <version>3.12.1.GA</version>

Em seguida, rode mvn clean e mvn eclipse:eclipse (caso vc use o eclipse)

Pronto, era isso apenas.

Abracos,  see ya!