Spring + Interface + Abstract (Eudis)

View: New views
4 Messages — Rating Filter:   Alert me  

Spring + Interface + Abstract (Eudis)

by AOCOM - Eudis :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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)

by Marcelo Fukushima :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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)

by AOCOM - Eudis :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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@...


Parent Message unknown Re: Spring + Interface + Abstract (Eudis)

by Ricardo Ferreira da Silva :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Return Receipt
    Your document:
Re: [enterprise-list] Spring + Interface + Abstract (Eudis)
    was received by:
Ricardo Ferreira da Silva/TDB
    at:
10/23/2009 07:53:48 AM


As informações contidas nesta mensagem são confidenciais e protegidas pelo sigilo legal. A divulgação, distribuição ou reprodução deste documento depende da autorização do emissor. Caso V. Sa. não seja o destinatário ou preposto, fica, desde já, notificado que qualquer divulgação, distribuição ou reprodução é estritamente proibida, sujeitando-se o infrator às sanções legais. Caso esta comunicação tenha sido recebida por engano, favor avisar o emissor imediatamente. Grato pela cooperação.

The information contained in this message is strictly confidential. If you are not the intended recipient of this message or an agent responsible for delivering it to the intended recipient, you are hereby notified that you have received this communication in error, and that any dissemination, distribution, retention or copying of this communication is strictly prohibited. If that be the case, please reply and notify the sender.