Pessoal, boa tarde.
É possivel usar spring annotations com vraptor, mentawai ou struts 1?
Com o struts 2 eu consegui, usando o struts2-spring-plugin.jar
Se possivel, me falem como.
Obrigado.
Pessoal, boa tarde.
É possivel usar spring annotations com vraptor, mentawai ou struts 1?
Com o struts 2 eu consegui, usando o struts2-spring-plugin.jar
Se possivel, me falem como.
Obrigado.
Hoje em dia o Spring 2.5 já trabalha com anotações pra declarar recursos, servicos, repostitórios, não precisa usar o Spring Annotations.
É só dar uma olhada na documentação porque demorei um pouco pra aprender hehe.
cara, seguinte.
o spring annotations que falo não e o do urubatan.
e sim as annotations do proprio spring 2.5
agora eu nao sei como integra ele com o struts 1, com vraptor e mentawai.
entendes?
Hm ok.
Sorte tua que tenho um projetinho com spring e mentawai hehe.
Vou te passar os arquivos que importam:
applicationContext.xml<?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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
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.0.xsd">
<!--
Uses Apache Commons DBCP for connection pooling. See Commons DBCP documentation
for the required JAR files. Alternatively you can use another connection pool
such as C3P0, similarly configured using Spring.
-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
p:driverClassName="org.gjt.mm.mysql.Driver" p:url="jdbc:mysql://localhost/testUser?autoReconnect=true&useUnicode=true&characterEncoding=utf8" p:username="root"
p:password="bancodedados"/>
<!-- Hibernate SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
p:dataSource-ref="dataSource">
<property name="hibernateProperties">
<props>
<prop key="hibernate.mapping.precedence">class, hbm</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.generate_statistics">true</prop>
</props>
</property>
<property name="annotatedClasses">
<list>
<value>testUser.model.User</value>
</list>
</property>
<property name="eventListeners">
<map>
<entry key="merge">
<bean class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener"/>
</entry>
</map>
</property>
</bean>
<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory"/>
<context:component-scan base-package="testUser" />
<tx:annotation-driven/>
<context:mbean-export/>
</beans>
/**
* @author Andrei Gonçalves Ribas
*
*/
public class ApplicationManager extends org.mentawai.core.ApplicationManager {
private BeanFactory beanFactory;
public void init(Context application) {
beanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
}
public void loadActions() {
SpringActionConfig.setBeanFactory(beanFactory);
filter(new InjectionFilter());
spring("/User", "userAction");
}
}
A Action com nome "userAction" será automaticamente injetada pelo Spring cada vez que chamar /User.
Exemplo de Action:
O detalhe está no qualifier "userAction", que o spring vai saber que á o que tá no applicationManager, sem precisar escrever um
@Component
@Qualifier("userAction")
public class UserAction extends BaseAction {
@Autowired
private UserService userService;
public String save() throws Exception {
//qualquer coisa
}
}
@Service
public class DefaultUserService implements UserService {
@Autowired
private UsuarioDAO userDAO;
@Transactional //se precisar escrever valores em uma transacao
public boolean save(User u) {
//metodo
}
}
@Repository("usuarioDAO")
public class UsuarioDAO extends HibernateDaoSupport {
@Autowired
public UsuarioDAO(SessionFactory sf) {
super.setSessionFactory(sf);
}
//outros metodos
}
Se não entender é só perguntar.
Te poupei uns dias de trabalho entendendo a documentação do spring.
andreiribas,
kara muito obrigado mesmo, pensei que não tivesse a possibilidade de integrar os dois.
tem como voce me enviar o projeto?
Obrigado.
Hm ok. Sorte tua que tenho um projetinho com spring e mentawai hehe.Vou te passar os arquivos que importam:
applicationContext.xmlApplicationManager.java<?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:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" 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.0.xsd"> <!-- Uses Apache Commons DBCP for connection pooling. See Commons DBCP documentation for the required JAR files. Alternatively you can use another connection pool such as C3P0, similarly configured using Spring. --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" p:driverClassName="org.gjt.mm.mysql.Driver" p:url="jdbc:mysql://localhost/testUser?autoReconnect=true&useUnicode=true&characterEncoding=utf8" p:username="root" p:password="bancodedados"/> <!-- Hibernate SessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" p:dataSource-ref="dataSource"> <property name="hibernateProperties"> <props> <prop key="hibernate.mapping.precedence">class, hbm</prop> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.generate_statistics">true</prop> </props> </property> <property name="annotatedClasses"> <list> <value>testUser.model.User</value> </list> </property> <property name="eventListeners"> <map> <entry key="merge"> <bean class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener"/> </entry> </map> </property> </bean> <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" p:sessionFactory-ref="sessionFactory"/> <context:component-scan base-package="testUser" /> <tx:annotation-driven/> <context:mbean-export/> </beans>/** * @author Andrei Gonçalves Ribas * */ public class ApplicationManager extends org.mentawai.core.ApplicationManager { private BeanFactory beanFactory; public void init(Context application) { beanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml")); } public void loadActions() { SpringActionConfig.setBeanFactory(beanFactory); filter(new InjectionFilter()); spring("/User", "userAction"); } }A Action com nome "userAction" será automaticamente injetada pelo Spring cada vez que chamar /User.
Exemplo de Action:
@Autowired é pra injetar o userService direto na action.
O detalhe está no qualifier "userAction", que o spring vai saber que á o que tá no applicationManager, sem precisar escrever umpra ele no applicationContext. Classe DefualtUserService: @Service voce diz que é um servico, claro@Component @Qualifier("userAction") public class UserAction extends BaseAction { @Autowired private UserService userService; public String save() throws Exception { //qualquer coisa } }E por fim, usuarioDAO:@Service public class DefaultUserService implements UserService { @Autowired private UsuarioDAO userDAO; @Transactional //se precisar escrever valores em uma transacao public boolean save(User u) { //metodo } }@Repository("usuarioDAO") public class UsuarioDAO extends HibernateDaoSupport { @Autowired public UsuarioDAO(SessionFactory sf) { super.setSessionFactory(sf); } //outros metodos }Se não entender é só perguntar.
Te poupei uns dias de trabalho entendendo a documentação do spring.
kara nao consegui fazer funcionar.
deu certo não :(
me envia o projeto
obrigado.
andreiribas,kara muito obrigado mesmo, pensei que não tivesse a possibilidade de integrar os dois.
tem como voce me enviar o projeto?
Obrigado.
Hm ok. Sorte tua que tenho um projetinho com spring e mentawai hehe.Vou te passar os arquivos que importam:
applicationContext.xmlApplicationManager.java<?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:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" 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.0.xsd"> <!-- Uses Apache Commons DBCP for connection pooling. See Commons DBCP documentation for the required JAR files. Alternatively you can use another connection pool such as C3P0, similarly configured using Spring. --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" p:driverClassName="org.gjt.mm.mysql.Driver" p:url="jdbc:mysql://localhost/testUser?autoReconnect=true&useUnicode=true&characterEncoding=utf8" p:username="root" p:password="bancodedados"/> <!-- Hibernate SessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" p:dataSource-ref="dataSource"> <property name="hibernateProperties"> <props> <prop key="hibernate.mapping.precedence">class, hbm</prop> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.generate_statistics">true</prop> </props> </property> <property name="annotatedClasses"> <list> <value>testUser.model.User</value> </list> </property> <property name="eventListeners"> <map> <entry key="merge"> <bean class="org.springframework.orm.hibernate3.support.IdTransferringMergeEventListener"/> </entry> </map> </property> </bean> <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" p:sessionFactory-ref="sessionFactory"/> <context:component-scan base-package="testUser" /> <tx:annotation-driven/> <context:mbean-export/> </beans>/** * @author Andrei Gonçalves Ribas * */ public class ApplicationManager extends org.mentawai.core.ApplicationManager { private BeanFactory beanFactory; public void init(Context application) { beanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml")); } public void loadActions() { SpringActionConfig.setBeanFactory(beanFactory); filter(new InjectionFilter()); spring("/User", "userAction"); } }A Action com nome "userAction" será automaticamente injetada pelo Spring cada vez que chamar /User.
Exemplo de Action:
@Autowired é pra injetar o userService direto na action.
O detalhe está no qualifier "userAction", que o spring vai saber que á o que tá no applicationManager, sem precisar escrever umpra ele no applicationContext. Classe DefualtUserService: @Service voce diz que é um servico, claro@Component @Qualifier("userAction") public class UserAction extends BaseAction { @Autowired private UserService userService; public String save() throws Exception { //qualquer coisa } }E por fim, usuarioDAO:@Service public class DefaultUserService implements UserService { @Autowired private UsuarioDAO userDAO; @Transactional //se precisar escrever valores em uma transacao public boolean save(User u) { //metodo } }@Repository("usuarioDAO") public class UsuarioDAO extends HibernateDaoSupport { @Autowired public UsuarioDAO(SessionFactory sf) { super.setSessionFactory(sf); } //outros metodos }Se não entender é só perguntar.
Te poupei uns dias de trabalho entendendo a documentação do spring.
qual foi o erro?
Você tem que adicionar as bibliotecas do hibernate, do spring e do mentawai.
todas as bibliotecas foram adicionadas.
eu tenho que colocar o contextloader no web.xml?
carrega o contexto sem problemas.
o problema e que o objeto *Service não e injetado quando eu chamo a action
entendeu?
valeu…
qual foi o erro?Você tem que adicionar as bibliotecas do hibernate, do spring e do mentawai.