Проблемы с @Transactional и JerseyTest в Linux или Mac, но не в Windows

Мы используем трикотажный тест с grizzly2 для запуска приемочных тестов на фиктивных ресурсах REST. На моем компьютере с Windows все в порядке. Но другой разработчик со своим Mac получает ту же ошибку, что и наш Jenkins (в Linux):

INFO: Creating Grizzly2 Web Container configured at the base URI http://localhost:9998/
02.08.2012 09:46:36 org.glassfish.grizzly.http.server.HttpServer start
SEVERE: Failed to start listener [NetworkListener{name='grizzly', host='localhost', port=9998, secure=false}] : java.net.BindException: Address already in use

Очевидно, мы проверили, что это не так: ни один другой процесс не использует 9998.

Я отслеживал проблему до одного теста, который использует @Transactional в сочетании с расширением JerseyTest:

@ContextConfiguration({ "classpath:context-test.xml" })
@RunWith(SpringJUnit4ClassRunner.class)
@Transactional
@TransactionConfiguration(defaultRollback = true)
public class TestPage extends JerseyTest {

    public TestPage() throws Exception {
        super("", "", "path.to.package");
    }

    // init database to be rolled back after test
    // ...

    // test that calls a controller requiring database access and then sends a request to a mock REST resource.
    // ...
}

Итак, вопросы здесь: Почему не на окнах? А что плохого в использовании @Transactional.

edit2 Кажется, @Transactional создает прокси, это может быть проблемой..?! см. здесь


person Pete    schedule 02.08.2012    source источник


Ответы (1)


Я столкнулся с похожей проблемой, убедитесь, что вы не переопределяете метод tearDown() в своем тесте TestPage. Если вам нужно что-то снести, сделайте это с помощью другого метода customTearDown() и аннотируйте его с помощью @After.

JerseyTest также использует то же имя метода tearDown(), и контейнер никогда не закроется, если мы переопределим его.

person JVXR    schedule 10.08.2013