Olá,
Tenho um serviço sendo exposto via HttpInvoker (org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter) e uma classe de teste com alguns métodos.
applicationContext.xml
...
<bean id="logRequisicaoService"
class="log.LoggerRequisicaoImpl"/>
..
logRequisicao-servlet.xml
...
<bean id="httpLogRequisicaoService"
class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter"
p:service-ref="logRequisicaoService">
<property name="serviceInterface">
<value>log.LoggerRequisicao</value>
</property>
</bean>
<bean id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/logRequisicao">httpLogRequisicaoService</prop>
</props>
</property>
</bean>
..
applicationContext-client.xml
...
<bean id="logRequisicaoService"
class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
<property name="serviceUrl">
<value>http://localhost:8080/logremoto/logRequisicao</value>
</property>
<property name="serviceInterface">
<value>log.LoggerRequisicao</value>
</property>
</bean>
...
TestClass
...
@Test
public void test1() {
LoggerRequisicao logger = Utils.getBean("logRequisicaoService");
logger.info(1, "Loading XML Data");
logger.warn(1, "Another message");
logger.closeFile(1);
//assertions
logger.deleteLog(1);
}
@Test
public void test2() {
LoggerRequisicao logger = Utils.getBean("logRequisicaoService");
...
}
O problema é que minha classe (LoggerRequisicao) não é thread-safe, não posso ter apenas uma instância dela compartilhada por todas as chamadas remotas. Ai começaram os problemas. Procurei bastante a respeito e sei que tem como definir outro escopo para o bean diferente de singleton (padrão). Tentei de várias formas:
applicationContext.xml
...
<bean id="logRequisicaoService"
class="log.LoggerRequisicaoImpl" scope="prototype"/>
..
logRequisicao-servlet.xml
...
<bean id="httpLogRequisicaoService"
class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter"
p:service-ref="logRequisicaoService">
<property name="serviceInterface">
<value>log.LoggerRequisicao</value>
</property>
</bean>
..
Resultado: Ele só cria uma instância do mesmo jeito como se não definisse nada.
applicationContext.xml
...
<bean id="logRequisicaoService"
class="log.LoggerRequisicaoImpl" scope="prototype"/>
..
logRequisicao-servlet.xml
...
<bean id="httpLogRequisicaoService"
class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter"
p:service-ref="logRequisicaoService" scope="prototype">
<property name="serviceInterface">
<value>log.LoggerRequisicao</value>
</property>
</bean>
..
Resultado: Ele cria uma instância para cada chamada. Nesse caso por exemplo:
LoggerRequisicao logger = Utils.getBean("logRequisicaoService");
logger.info(1, "Loading XML Data");
logger.warn(1, "Another message");
logger.closeFile(1);
Ele criaria 3 ou 4 instâncias.
O que realmente gostaria era que fosse criada 1 instância por getBean, ou na classe de teste, 1 instância por teste. Eu realmente procurei bastante na net e testei de diversas formas mas não consegui fazer funcionar.
Alguém sabe como posso resolver esse problema?Já tentei de várias formas e realmente não sei como resolver… 
Desde já obrigado
Luciano