Olá a todos!
Estou tendo alguns problemas para fazer essa integração. Eu tenho um ManagedBean e dentro dele eu tenho um serviço, que deveria ser populado pelo Spring. Só que sempre que chega no meu ManagedBean, o serviço está nulo. Assim como o EntityManager do serviço também. Vou postar alguns fontes.
O meu MangedBean :
@RequestScoped //javax.faces.bean.RequestScoped
@ManagedBean( name = "productBean" ) //javax.faces.bean.ManagedBean
public class ProductManagedBean {
@Autowired //org.springframework.beans.factory.annotation.Autowired
private ProductService productService; // não está fazendo a injeção
private Product product;
// operações
}
Eu não tenho declarado esse serviço no applicationContext, mas tem essa linha lá: <context:component-scan base-package=“com.monteirosti” />
O applicationContext.xml :
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:ws="http://jax-ws.dev.java.net/spring/core" xmlns:wss="http://jax-ws.dev.java.net/spring/servlet"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://jax-ws.dev.java.net/spring/core
http://jax-ws.dev.java.net/spring/core.xsd
http://jax-ws.dev.java.net/spring/servlet
http://jax-ws.dev.java.net/spring/servlet.xsd
">
<context:property-placeholder location="classpath:/jdbc.properties" />
<!--
<aop:aspectj-autoproxy />
-->
<!-- Indica ao spring que os beans estao representados por anotacoes -->
<context:annotation-config />
<!-- Configuracao do DataSource -->
<bean id="pgDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:url="${url}"
p:driverClassName="${driverClassName}"
p:username="${username}"
p:password="${password}" />
<!--
Gerencia as PersistenceUnits do JPA. Neste local deve ser indicado
onde estao os arquivos que configuram as PersistenceUnits
-->
<bean id="persistenceUnitManager"
class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
<property name="defaultDataSource" ref="pgDataSource" />
</bean>
<!-- Gerenciador da criacao e manutencao dos EntityManager -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitManager" ref="persistenceUnitManager" />
<property name="persistenceUnitName" value="devlp"/>
<property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml" />
<property name="jpaVendorAdapter">
<bean
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="database" value="POSTGRESQL" />
<property name="showSql" value="true" />
</bean>
</property>
</bean>
<!-- Gerenciador das transacoes dos servicos -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<!--
Indica ao spring que as transacoes serao demarcadas com anotacoes e
aponta qual eh o gerenciador das transacoes
-->
<tx:annotation-driven transaction-manager="transactionManager" />
<context:component-scan base-package="com.monteirosti" />
</beans>
O serviço:
@Transactional //org.springframework.transaction.annotation.Transactional
@Service( "productService" ) //org.springframework.stereotype.Service
public class ProductServiceBean implements ProductService {
@PersistenceContext // já tentei assim também e nada @PersistenceContext( unitName = "devlp" )
private EntityManager em;
}
Bem, de antemão, obrigado pela ajuda, mas o que eu posso estar fazendo de errado para que o preenchimento dos objetos não esteja sendo feito?
Um abraço.