У меня есть подозрение.Разве загрузка классов не является корнем вашей проблемы?
Я полагаю, что прямая причина вашей проблемы заключается в том, что какой-то класс Spring загружается один раз и распределяется между этими двумя WAR.Я не знаю точного имени класса, но Spring должен хранить некоторую общую информацию (по крайней мере, ссылку на контекст приложения) в некотором статическом поле.Затем, когда две WAR видят одну и ту же копию класса, оба приложения видят одно и то же состояние этого статического поля.Я предполагаю, что в вашей настройке Spring создает только один контекст приложения (когда должен быть создан второй, Spring находит существующий контекст приложения и использует его вместо этого).
Я вижу две возможные причины такой проблемы:
- либо это проблема загрузки классов.Я не настолько увлечен tomcat и не знаю, как и если вы можете настроить это, но обычно на серверах приложений JavaEE есть какой-то способ настроить загрузку классов для WAR.
- , или это своего рода утечка памяти.Возможно, класс (и его статическое поле) повторно используется из какого-то предыдущего развертывания (маловероятно, что ваше описание склоняется к тому, что вы сталкиваетесь с проблемой на новом экземпляре tomcat).Вы можете исключить эту возможность, убедившись, что проблема появляется сразу после того, как вы (пере) запустили tomcat.
ОБНОВЛЕНИЕ: Если речь идет о загрузке классов, я бы попытался выяснить, какой класс (иего статическое поле) вызывает проблемы.Вероятно, это не ваш класс, а какой-то сторонний библиотечный класс, который вы используете в своем приложении.После прочтения http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html вы увидите, что Tomcat использует разные не связанные загрузчики классов для каждого приложения.Однако оба они совместно используют загрузчики родительских классов, которым они делегируют, если они не знают класс.Опять же, я не знаю ваших точных настроек и некоторых особенностей Tomcat, но ... Разве в Tomcat невозможно поместить некоторую библиотеку (JAR), такую как c3p0 или Spring, в какую-нибудь общую папку 'lib' (в документации сказано:$ CATALINA_HOME / Lib)?В таком случае классы из этих JAR-файлов загружаются с использованием загрузчика родительского класса (тот, который называется 'Common' в документации tomcat).Это означает, что они загружаются только один раз.
Короче говоря, я предполагаю, что причина в том, что один из JAR-файлов в вашем $ CATALINA_HOME / lib имеет некоторый класс, который сильно зависит от некоторых статических полей.Политика Tomcat для загрузки JAR-файлов, использующих общий загрузчик классов, приводит к тому, что все приложения разделяют состояние этих статических полей.
Я говорил вам, что это только подозрение и предположение?