Olá gujeiros, estou pedindo a ajuda de vocês…
para recuperar um Bean mapeado por @Anotations através da fabrica de
beans ou alguma coisa nesse sentido …
Meu Bean é esse…@Service("genericService")
public class GenericService<T>
Como podem ver ele tem esse detalhe special… T…
Não sei nem por onde começar isso…
Na verdade isso ai deverá ser seu Serviço, onde deverá conter todo o conteúde de acesso ao DAO, caso vc esteja usando um.
Nessa classe ficará os métodos de save, delete, recuperar, com suas respectivas HQL para usar na Base de Dados.
Sua bean usará o conteúdo do @Service para achar o service. e dentro da sua bean você criará um @Component que dentro terá o valor que você usará na sua página para encontrar a Bean.
Acho que expliquei um pouco confuso. Qualquer coisa só perguntar mais que tentarei ser mais claro.
[quote=Arizoide]Na verdade isso ai deverá ser seu Serviço, onde deverá conter todo o conteúde de acesso ao DAO, caso vc esteja usando um.
Nessa classe ficará os métodos de save, delete, recuperar, com suas respectivas HQL para usar na Base de Dados.
Sua bean usará o conteúdo do @Service para achar o service. e dentro da sua bean você criará um @Component que dentro terá o valor que você usará na sua página para encontrar a Bean.
Acho que expliquei um pouco confuso. Qualquer coisa só perguntar mais que tentarei ser mais claro.[/quote]
Sim, é isso mesmo que faz essa classe… esta implementada dessa forma…
Mas olha só o que acontece… é um ambiente web… rodando no TomCat 7.
agora tenho um lugar, onde preciso pedir para o beanFactory (Enfim para Conteiner Spring - de alguma)…
porque não tenho um @Controler…
no controler esta assim, esta funcionado certinho @Autowired
private SysGenericService<Usuario> genericService; Como seria criar esse componete… @Componente…
com o objetivo pouco diferente do código acima…//por exemplo
private SysGenericService<Cliente> genericService;
private SysGenericService<Papel> genericService;
//estou tentando pedir a fabrica... me retorne objetos assim...
tenho esse code class, do BeanFactory, esta funcionado porque se pedir o bean sessionFactory,
a fabrica o retorna [code]package br.com.rastreamento.service;
public final class SysBeanFactory
{
private static final ClassPathXmlApplicationContext ctx;
private URL url = getClass().getResource("applicationContext.xml");
static
{
SysBeanFactory s = new SysBeanFactory();
ctx = new ClassPathXmlApplicationContext(s.url.toString());
}
private SysBeanFactory()
{
}
@SuppressWarnings("unchecked")
public static <E> SysGenericService<E> seekBeanEntity(Class<?> classeEntity)
{
SysBeanFactory s = new SysBeanFactory();
System.out.println(s.url);
SysGenericService<E> generic = (SysGenericService<E>) ctx.getBeanFactory().getBean("genericService");
generic.setType(classeEntity);
return generic;
}
}
[/code]Mas ele não acha… esse Bean…
Veja se mapeou como Um @Service… ele já esta no Container do Spring, só preciso achar um
jeito de recuperar conforme minha necessidade… segundo bloco de código nessa mensagem exemplifica a necessidade
Não sei se fui clarro…
@Ops, analizando melhor, vi que ele esta achando o Bean sim…
Mas eu não estou conseguindo passar esse parametro T…
ai esta dando esse erro…
acho que é por isso…
12/09/2011 11:12:23 org.apache.catalina.core.StandardContext filterStart
GRAVE: Exception starting filter mod
org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
at org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63)
at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:687)
at br.com.rastreamento.repository.SysRepositoryGeneric.getSessionSys(SysRepositoryGeneric.java:64)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196)
at $Proxy28.getSessionSys(Unknown Source)
at br.com.rastreamento.service.SysGenericService.setType(SysGenericService.java:215)
at br.com.rastreamento.service.SysBeanFactory.seekBeanEntity(SysBeanFactory.java:30)
at br.com.rastreamento.service.FilterTest.init(FilterTest.java:40)
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:273)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:254)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:372)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:98)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4584)
at org.apache.catalina.core.StandardContext$2.call(StandardContext.java:5262)
at org.apache.catalina.core.StandardContext$2.call(StandardContext.java:5257)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
12/09/2011 11:12:23 org.apache.catalina.core.StandardContext startInternal
GRAVE: Error filterStart
12/09/2011 11:12:23 org.apache.catalina.core.StandardContext startInternal
GRAVE: Context [/Teste2] startup failed due to previous errors