|
View:
New views
4 Messages
—
Rating Filter:
Alert me
|
|
|
Spring + Interface + Abstract (Eudis)Caros colegas,
Estou com problema usando Spring + Interface + Abstract, observem: ==> Interface @Transactional(propagation = Propagation.REQUIRED, readOnly = false) public interface IBusiness { } ==> Classe abstrata public abstract class ABusiness { ... metodos, get´s e set´s ... } ==> Classe implementada public class UsuarioBusiness extends ABusiness implements IBusiness { ... metodos, get´s e set´s ... } ==> Definição do contexto <context:annotation-config /> <context:spring-configured /> <context:component-scan base-package="br.com.aocom.projeto" /> <bean id="DAOFactory" class="br.com.aocom.projeto.model.dao.factory.spring.DAOFactorySpring" /> <bean id="ABusiness" class="br.com.aocom.projeto.business.ABusiness" abstract="true" /> <bean id="usuarioBusiness" class="br.com.aocom.projeto.business.impl.UsuarioBusiness" parent="ABusiness" /> ==> O problema é que quando executo: UsuarioBusiness ub = (UsuarioBusiness) SpringUtil.getInstance().createBean("usuarioBusiness"); que é uma classe utilitária que dá um getBean("..."), está dando o seguinte erro: SEVERE: Servlet.service() for servlet AutenticarAjax threw exception java.lang.ClassCastException: $Proxy34 cannot be cast to br.com.aocom.projeto.business.impl.UsuarioBusiness at br.com.aocom.acportal.servlets.AutenticarAjax.doPost(AutenticarAjax.java:44) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) at java.lang.Thread.run(Thread.java:619) ==> Fazendo alguns testes, descobri que se eu tirar a interface da classe implementada funciona, agora não podemos usar classes com interface usando o Spring, ou estou fazendo algo de errado? ==> Devo declarar a interface como um bean no Spring? Se sim como? Não encontrei nada a respeito! Obrigado, Eudis de Oliveira --------------------------------------------------------------------- To unsubscribe, e-mail: enterprise-list-unsubscribe@... For additional commands, e-mail: enterprise-list-help@... |
||||||
|
|
Re: Spring + Interface + Abstract (Eudis)quando a classe nao tem interfaces, o spring deve estar fazendo um
proxy sobre a classe (usando cglib). Quando ela tem interface, ela faz um proxy apenas sobre as interfaces (usando o JDK proxy). Logo, efetivamente, quando vc tem uma interface, voce deve acesssar seu objeto pela interface IBusiness ib = (IBusinesss) beanFactory.get( ... ) Ou seja, crie uma interface com os metodos que vc quer que sejam visiveis. Tambem da p/ forcar o spring a sempre usar a classe. Acho que a propriedade que vc deve setar chama use proxy class: <bean id="aaa" class="....TransactionProxyFactoryBean"> <property name="useProxyClass" value="true" /> .... </bean> mas verifique na classe TransactionProxyFactoryBean para ter certeza da propriedade 2009/10/22 AOCOM - Eudis de Oliveira <eudis@...>: > Caros colegas, > > Estou com problema usando Spring + Interface + Abstract, observem: > > > ==> Interface > @Transactional(propagation = Propagation.REQUIRED, readOnly = false) > public interface IBusiness { > } > > ==> Classe abstrata > public abstract class ABusiness { > ... metodos, get´s e set´s ... > } > > ==> Classe implementada > public class UsuarioBusiness extends ABusiness implements IBusiness { > ... metodos, get´s e set´s ... > } > > ==> Definição do contexto > <context:annotation-config /> > <context:spring-configured /> > <context:component-scan base-package="br.com.aocom.projeto" /> > > <bean id="DAOFactory" > class="br.com.aocom.projeto.model.dao.factory.spring.DAOFactorySpring" /> > <bean id="ABusiness" class="br.com.aocom.projeto.business.ABusiness" > abstract="true" /> > <bean id="usuarioBusiness" > class="br.com.aocom.projeto.business.impl.UsuarioBusiness" > parent="ABusiness" /> > > ==> O problema é que quando executo: > > UsuarioBusiness ub = (UsuarioBusiness) > SpringUtil.getInstance().createBean("usuarioBusiness"); > > que é uma classe utilitária que dá um getBean("..."), está dando o seguinte > erro: > > SEVERE: Servlet.service() for servlet AutenticarAjax threw exception > java.lang.ClassCastException: $Proxy34 cannot be cast to > br.com.aocom.projeto.business.impl.UsuarioBusiness > at > br.com.aocom.acportal.servlets.AutenticarAjax.doPost(AutenticarAjax.java:44) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) > at > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) > at > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) > at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) > at java.lang.Thread.run(Thread.java:619) > > ==> Fazendo alguns testes, descobri que se eu tirar a interface da classe > implementada funciona, agora não > podemos usar classes com interface usando o Spring, ou estou fazendo algo de > errado? > > ==> Devo declarar a interface como um bean no Spring? Se sim como? Não > encontrei nada a respeito! > > Obrigado, > > Eudis de Oliveira > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: enterprise-list-unsubscribe@... > For additional commands, e-mail: enterprise-list-help@... > > -- http://mapsdev.blogspot.com/ Marcelo Takeshi Fukushima --------------------------------------------------------------------- To unsubscribe, e-mail: enterprise-list-unsubscribe@... For additional commands, e-mail: enterprise-list-help@... |
||||||
|
|
Re: Spring + Interface + Abstract (Eudis)Valeu, vou adaptar.
Eudis Marcelo Fukushima escreveu: > quando a classe nao tem interfaces, o spring deve estar fazendo um > proxy sobre a classe (usando cglib). Quando ela tem interface, ela faz > um proxy apenas sobre as interfaces (usando o JDK proxy). Logo, > efetivamente, quando vc tem uma interface, voce deve acesssar seu > objeto pela interface > > IBusiness ib = (IBusinesss) beanFactory.get( ... ) > > Ou seja, crie uma interface com os metodos que vc quer que sejam visiveis. > > > Tambem da p/ forcar o spring a sempre usar a classe. Acho que a > propriedade que vc deve setar chama use proxy class: > > <bean id="aaa" class="....TransactionProxyFactoryBean"> > <property name="useProxyClass" value="true" /> > > .... > > </bean> > > mas verifique na classe TransactionProxyFactoryBean para ter certeza > da propriedade > > > 2009/10/22 AOCOM - Eudis de Oliveira <eudis@...>: > >> Caros colegas, >> >> Estou com problema usando Spring + Interface + Abstract, observem: >> >> >> ==> Interface >> @Transactional(propagation = Propagation.REQUIRED, readOnly = false) >> public interface IBusiness { >> } >> >> ==> Classe abstrata >> public abstract class ABusiness { >> ... metodos, get´s e set´s ... >> } >> >> ==> Classe implementada >> public class UsuarioBusiness extends ABusiness implements IBusiness { >> ... metodos, get´s e set´s ... >> } >> >> ==> Definição do contexto >> <context:annotation-config /> >> <context:spring-configured /> >> <context:component-scan base-package="br.com.aocom.projeto" /> >> >> <bean id="DAOFactory" >> class="br.com.aocom.projeto.model.dao.factory.spring.DAOFactorySpring" /> >> <bean id="ABusiness" class="br.com.aocom.projeto.business.ABusiness" >> abstract="true" /> >> <bean id="usuarioBusiness" >> class="br.com.aocom.projeto.business.impl.UsuarioBusiness" >> parent="ABusiness" /> >> >> ==> O problema é que quando executo: >> >> UsuarioBusiness ub = (UsuarioBusiness) >> SpringUtil.getInstance().createBean("usuarioBusiness"); >> >> que é uma classe utilitária que dá um getBean("..."), está dando o seguinte >> erro: >> >> SEVERE: Servlet.service() for servlet AutenticarAjax threw exception >> java.lang.ClassCastException: $Proxy34 cannot be cast to >> br.com.aocom.projeto.business.impl.UsuarioBusiness >> at >> br.com.aocom.acportal.servlets.AutenticarAjax.doPost(AutenticarAjax.java:44) >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) >> at >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) >> at >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >> at >> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) >> at >> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) >> at >> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) >> at >> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) >> at >> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) >> at >> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) >> at >> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) >> at >> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) >> at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) >> at java.lang.Thread.run(Thread.java:619) >> >> ==> Fazendo alguns testes, descobri que se eu tirar a interface da classe >> implementada funciona, agora não >> podemos usar classes com interface usando o Spring, ou estou fazendo algo de >> errado? >> >> ==> Devo declarar a interface como um bean no Spring? Se sim como? Não >> encontrei nada a respeito! >> >> Obrigado, >> >> Eudis de Oliveira >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: enterprise-list-unsubscribe@... >> For additional commands, e-mail: enterprise-list-help@... >> >> >> > > > > --------------------------------------------------------------------- To unsubscribe, e-mail: enterprise-list-unsubscribe@... For additional commands, e-mail: enterprise-list-help@... |
||||||
|
|
|
| Re: [enterprise-list] Spring + Interface + Abstract (Eudis) |
| Ricardo Ferreira da Silva/TDB |
| 10/23/2009 07:53:48 AM |
| Free embeddable forum powered by Nabble | Forum Help |