[color=red][size=18]DEFINIÇÃO DO PROBLEMA 1 :[/size][/color]
Meu alvo principal é que o spring faça o rollback dos dados do banco após o teste unitário.
Já implementei isso com sucesso usando apenas um dataSource. (AbstractTransactionalDataSourceSpringContextTests)
Mas para o spring interpretar dois datasource, preciso de definir um transactionManager e utilizar outra classe da api (AbstractTransactionalSpringContextTests), juntamente com a api do jotm ( separada ou a que vem no spring ).
A api jotm me permite definir para o spring “visualizar dois dataSource’s através de um transactionManager”.
Fiz a implementação das duas maneiras: com a api do jotm separada e com a inclusa no spring.
Ao rodar os testes unitários das 2 formas, está dando o mesmo erro.
Mas estranho que acho que o erro é algo sobre a obtenção do application context pelo spring.
Obs: Nestas classes usadas para o spring fazer o rollback (ex:AbstractTransactionalDataSourceSpringContextTests e AbstractTransactionalSpringContextTests), deve-se implementar o método getConfigLocations() da superclasse, ao inves de usar um “ApplicationContext context = new ClassPathXmlApplicationContext(“applicationContext-test.xml”);” (como seria feito em um teste unitário simples do JUnit ( extends TestCase ). Assim foi feito para meu teste com apenas um dataSource ( extends AbstractTransactionalDataSourceSpringContextTests ) e tambem para este teste que estou com problemas ( extends AbstractTransactionalSpringContextTests) .
O erro:
Meu código:
XML utilizando a api jotm separada (parte):
<bean id="jotm" class="org.objectweb.jotm.Jotm">
<constructor-arg index="0" value="true"/>
<constructor-arg index="1" value="false"/>
</bean>
<bean id="transactionManager" factory-bean="jotm" factory-method="getTransactionManager"/>
XML utilizando a api jotm inclusa no spring (parte):
<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean" />
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="userTransaction" ref="jotm" />
<property name="transactionManager" ref="jotm" />
</bean>
parte .java:
public class UserServiceImplTest extends
AbstractTransactionalSpringContextTests {
protected String[] getConfigLocations() {
String applicationContext1 = "classpath:applicationContext-centralsegapp-test.xml";
String[] configs = new String[] { applicationContext1 };
return configs;
}
//métodos test* ocultos porque nem chega a executá-los.
[color=red]Minha suspeita sobre algo relativo à “obtenção” do applicationContext é porque no erro está dando problema aqui:ConfigurableApplicationContext.registerShutdownHook
E ConfigurableApplicationContext é a superclasse utilizada por classes que adquirem este application context (ex: ClassPathXmlApplicationContext).
PS: Estou usando spring 2.5.4 e já conferí a assinatura do método registerShutdownHook na API do spring 2.0.x e 2.5.x e são IGUAIS.[/color]