Iniciar em Spring Annotations

2 respostas
R

Boa tarde a todos, to estreando no GUJ ^^

tipo, primeiro desculpem se o tópico for repetido, … é q não vi por onde faz busca no fórum :oops:

Bom, vamos ao assunto: já desenvolvo em Java há um tempo, porém, comecei mais seguindo os padrões da empresa onde trabalho, ficava mais programando na linguagem, do que arquitentando o sistema. Vi muita coisa bagunçada, com as quais não me contentei (código repetido, 20 frameworks diferentes numa única aplicação, fora as gambiarras e sistemas que deixam de funcionar com uma simples manutenção na máquina :roll: ).

Estudando o padrão MVC me interessei por ele, usei por um tempo o Struts (era o 1 ainda, não cheguei a usar o 2), depois de um tempo interessei-me pelo Spring. Mas, tenho uma séria aversão ao excesso de configuração via XML (acesso a base, dados de email, coisas assim tudo bem, mas, fora isso, acho um pouco demasiado). Passei então a ler um pouco mais sobre annotations. Pesquisando pelo google deparei com o projeto Spring Annotations, do Rodrigo Urubatan. Amei a idéia, e, claro, o primeiro passo foi pegar um dos exemplos do site (o 2, especificamente) e tentar rodar e modifica-lo, para ver como funciona, e seguir a partir dai.

Bom, meu problema deve ser algo tão idiota que não vi nada a respeito. Não consegui rodar o exemplo, então fui em busca de um tutorial/artigo para começar do zero. Configurei uma nova aplicação seguindo um passo a passo do blog: http://weblogs.java.net/blog/urubatan/archive/2006/07/what_do_you_thi.html, então tenho um applicationContext.xml idêntico ao exemplo do artigo, mesmo para o web.xml, e criei um controller de exemplo, nos moldes do artigo:

package net.java.dev.springannotation.example2;

import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.java.dev.springannotation.annotation.Bean;
import net.java.dev.springannotation.annotation.UrlMapping;

@Bean
@UrlMapping("/test.do")
public class ExampleController implements Controller {
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        return new ModelAndView("exemplo","mensagem","Tá funcionando certinho?");
    }
}

(optei por deixar os imports para ver se não estou importanto classes do pacote errado).

O problema que ocorre é que não consigo acessar =( Ao digitar http://localhost:8080/springapp/test.do (dei o nome springapp ao projeto), não encontra nada, creio q não estou fazendo o mapeamento correto (no console aparece: No mapping for [/springapp/test.do] in DispatcherServlet with name ‘spring’). Quando tentei rodar o exemplo 2 disponível no site, o porblema que tive foi o mesmo. Alguém pode me indicar o que está faltando?

Uso Eclipse 3.2, Spring 2.0, spring annotation 1.0.2, Jboos 4.0.5. A aplicação inicia sem problemas (não vejo erro algum nos logs do jboss).

Obrigada a todos.

2 Respostas

urubatan

como ficou teu applicationContext.xml, tu colocou la a declaração do schema do spring-annotations e a tag
sa:annotation-autoload?
tenta colocar um arquivo vazio de nome to.properties na raiz do classpath (WEB-INF/cllasses)

ou então pode acessar a página do projeto http://sannotations.sourceforge.net/
na página de exemplos tem os exemplos para baixar usando console, springMVC e JSF

e pode dar uma olhada no meu blog, tem mais exemplos la …

PS.: o projeto foi movido ontem para o surceforge

R

Nossa, desculpem pela demora em responder. Semana corrida..

Rodrigo, valeu pela resposta e os links. Estou usando como base o exemplo 2 (sem jsf, por hora ^^ ), já no novo endereço (para fazer a referencia correta aos arquivos, classes, etc).

Meu arquivo applicationContext.xml está assim (por enquanto estou com um só, não separei dados para conexão ainda):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop" 
	xmlns:sa="http://sannotations.sourceforge.net/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
       http://sannotations.sourceforge.net/context http://sannotations.sourceforge.net/context.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"
	default-autowire="byName">
	<import resource="classpath*:applicationContext.xml" />
	<sa:annotation-autoload />
	<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean>
	
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
       /*configuirações de banco + hibernate*/ 
       ...
    </bean>
    
</beans>
E o web.xml:
<?xml version="1.0" encoding="UTF-8"?>

<web-app>
	 <context-param>
		<param-name>contextConfigLocation</param-name>		<param-value>classpath*:applicationContext.xml</param-value>
	</context-param>

	<listener>		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<servlet>
		<servlet-name>spring</servlet-name>		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>spring</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping> 
	
</web-app>
Criei um arquivo spring-servel.xml para evitar problemas na hora de iniciar. Mas, não declaro nenhum bean nele:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop" 
	xmlns:sa="http://sannotations.sourceforge.net/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
       http://sannotations.sourceforge.net/context http://sannotations.sourceforge.net/context.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"
	default-autowire="byName">
	
</beans>

Eu criei o arquivo to.properties, no caminho especificado, mas, não alterou muito o quadro. O erro ainda é o mesmo, não está mapeando corretamente a URL (WARN [PageNotFound] No mapping for [/springapp/test.do] in DispatcherServlet with name 'spring').

Obrigada.

Criado 25 de março de 2007
Ultima resposta 31 de mar. de 2007
Respostas 2
Participantes 2