Ajuda com injeÇÃo por spring

3 respostas
J

Galera,

to iniciando no SPRING e to tentando criar uma aplicação usando JSF e Hibernate. Depois de muito apanhar consegui corrigir alhuns erros, mas ao rodar a página esta gerando o seguinte erro:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name personController: Injection of resource fields failed; nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named personDao must be of type [br.com.poc.dao.PersonDao], but was actually of type [$Proxy79]

at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessAfterInstantiation(CommonAnnotationBeanPostProcessor.java:291)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:876)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:437)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:383)

at java.security.AccessController.doPrivileged(Native Method)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:353)

at org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:283)

at org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)

at org.springframework.web.context.request.SessionScope.get(SessionScope.java:90)

at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:279)

at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)

at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:888)

at org.springframework.web.jsf.el.SpringBeanFacesELResolver.getValue(SpringBeanFacesELResolver.java:94)

at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:143)

at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:58)

at com.sun.el.parser.AstIdentifier.getValue(AstIdentifier.java:68)

at com.sun.el.parser.AstValue.getValue(AstValue.java:107)

at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:192)

at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)

at javax.faces.component.UIOutput.getValue(UIOutput.java:176)

at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:100)

at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:282)

at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:208)

at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:847)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:893)

at javax.faces.render.Renderer.encodeChildren(Renderer.java:137)

at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:827)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:883)

at javax.faces.component.UIComponent.encodeAll(UIComponent.java:889)

at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)

at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)

at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)

at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:108)

at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:266)

at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:159)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)

at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)

at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)

at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)

at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)

at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)

at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)

at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)

at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3496)

at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)

at weblogic.security.service.SecurityManager.runAs(Unknown Source)

at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2180)

at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2086)

at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1406)

at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)

at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)

Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named personDao must be of type [br.com.poc.dao.PersonDao], but was actually of type [$Proxy79]

at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:303)

at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:168)

at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:422)

at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:497)

at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:145)

at org.springframework.beans.factory.annotation.InjectionMetadata.injectFields(InjectionMetadata.java:79)

at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessAfterInstantiation(CommonAnnotationBeanPostProcessor.java:288)

 50 more

Segue os códigos:

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<context:property-placeholder location="classpath:config.properties" />
	<context:component-scan base-package="br.com.poc" />
	<context:annotation-config />
	
	<bean id="appDataSource"
			class="org.springframework.jdbc.datasource.DriverManagerDataSource">
			<property name="driverClassName" value="oracle.jdbc.OracleDriver" />
			<property name="url" value="jdbc:oracle:thin:@localhost:1521:XE" />
			<property name="username" value="${db.user}" />
			<property name="password" value="${db.pass}" />		
	</bean>		
	
	<bean id="sessionFactory"
			class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
			<property name="dataSource" ref="appDataSource" />
			<property name="annotatedClasses">
				<list>
					<value>br.com.poc.entity.Person</value>
				</list>
			</property>
			<property name="hibernateProperties">
				<props>
					<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
					<prop key="hibernate.show_sql">true</prop>
					<prop key="hibernate.current_session_context_class">thread</prop>
					<prop key="hibernate.hbm2ddl.auto">update</prop>
					<prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>
				</props>
			</property>		
	</bean>
	
	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
	
	<bean id="personDao" class="br.com.poc.dao.PersonDao">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
	
	<tx:annotation-driven transaction-manager="transactionManager"/>

faces-config.xml

<?xml version="1.0" encoding="UTF-8"?>



personController
br.com.poc.controller.PersonController
session


/pages/inputname.xhtml

greeting
/pages/greeting.xhtml



com.sun.facelets.FaceletViewHandler

org.springframework.web.jsf.el.SpringBeanFacesELResolver


web.xml

<?xml version="1.0"?>


Facelets StarterKit
POC

Faces Servlet
javax.faces.webapp.FacesServlet
1


Faces Servlet
.jsf


BASIC


javax.faces.DEFAULT_SUFFIX
.xhtml


contextConfigLocation
/WEB-INF/config/
.xml


javax.faces.CONFIG_FILES
/WEB-INF/faces-config.xml


facelets.REFRESH_PERIOD
2


facelets.DEVELOPMENT
true


javax.faces.STATE_SAVING_METHOD
client


com.sun.faces.validateXml
true


com.sun.faces.verifyObjects
true


org.springframework.web.context.ContextLoaderListener


com.sun.faces.config.ConfigureListener


org.springframework.web.context.request.RequestContextListener

PersonDao.java

package br.com.poc.dao;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import org.springframework.stereotype.Repository;

import org.springframework.transaction.annotation.Transactional;

import br.com.poc.entity.Person;

@Repository
public class PersonDao extends HibernateDaoSupport{

@Transactional(readOnly=false)	
public void salvar(Person person){
	getHibernateTemplate().persist(person);
}

}

PersonController.java

package br.com.poc.controller;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.context.annotation.Scope;

import org.springframework.stereotype.Controller;

import br.com.poc.dao.PersonDao;
import br.com.poc.entity.Person;

@Controller(personController)

@Scope(session)

@Qualifier(personController)

public class PersonController {
private Person person;

@Resource
private PersonDao personDao;

public PersonController() {
	person = new Person();
}

public String salvar(){
	String pagina = "";
	personDao.salvar(person);
	return pagina;
}

public Person getPerson() {
	return person;
}

public void setPerson(Person person) {
	this.person = person;
}

}

Quem puder ajudar…

Vlw

3 Respostas

Javabuntu

Primeiro dê olhada nesse tópico de como fazer um post: http://www.guj.com.br/posts/list/50115.java

Quanto ao seu problema dê olhada aqui.

Mais do que resolver, procure entender o porquê ele ocorre.

J

Pelo que busquei isso acontece pois os beans devem implementar uma interface…

Javabuntu

É porque o spring espera que o destino da injeção seja uma interface, por isso quando vai de objeto para objeto tem que fazer a configuação do proxy.

Criado 28 de novembro de 2010
Ultima resposta 29 de nov. de 2010
Respostas 3
Participantes 2