Как мне обновить этот встроенный кот?

Я хочу в основном обновить свою версию tomcat (на RHEL).

Всегда работал в среде, где мой файл war сбрасывался в */webapps, при перезапуске tomcat файл war расширялся, а остальное уже история.

Теперь система, над которой я работаю, имеет совершенно другую структуру папок.

Что-то вроде этого:

[root@bliss ~]# ls /usr/local/blah/blu-app/WEB-INF/
accounts      faces-reports.xml  logging.properties             web-app_2_3.dtd
bin           faces-syscfg.xml   logging.properties-production  web-app_2_4.xsd
buildnum.txt  framework2007      perl                           web.xml
classes       host.xsd           settings                       work
deploy-root   java.policy        tags
events.xsd    lib                tld
[root@bliss ~]#

Здесь я вижу несколько банок, связанных с tomcat:

/usr/local/blah/blu-app/WEB-INF/lib/tomcat-http.jar
/usr/local/blah/blu-app/WEB-INF/lib/tomcat-util.jar
/usr/local/blah/blu-app/WEB-INF/lib/tomcat-coyote.jar

ОБНОВЛЕНИЕ

Итак, я узнал, что tomcat встроен, потому что я нашел следующий код, запускающий его:

tomcat = new Embedded();
tomcat.setCatalinaHome(targetPath);

Host host = tomcat.createHost("localhost", targetPath);
Context rootCtx = tomcat.createContext("", targetPath);
((StandardContext)rootCtx).setWorkDir("WEB-INF/work"); 
ServletContext servletContext = rootCtx.getServletContext();
servletContext.setAttribute("version", version);
ApplRealm realm = new ApplRealm(servletContext);
tomcat.setRealm(realm);

rootCtx.setPrivileged(true);

Engine engine = tomcat.createEngine();
engine.setName("tomcat");
engine.setDefaultHost("localhost");
host.addChild(rootCtx);
engine.addChild(host);
tomcat.addEngine(engine);

LOG.debug("starting tomcat");
tomcat.start();
LOG.debug("tomcat started");
// clear out any old sessions: see bug 17882
Session[] sessions = rootCtx.getManager().findSessions();
for (int i = 0; i < sessions.length; i++)
{
    sessions[i].expire();
}

ServerSocket socket = null;
socket = new ServerSocket(CmcUtils.getControlPort(), 2, InetAddress.getByName("127.0.0.1"));
socket.accept();

LOG.info("Received shutdown command. Exiting !");

tomcat.stop();

Тогда возникает вопрос, как мне обновить этот кот, чтобы сказать Tomcat6?

Заменить последними jar-файлами в WEB-INF/lib? Какие все баночки?


person pavanlimo    schedule 28.12.2010    source источник


Ответы (2)


Это зависит. Это может быть встроенный кот, но также может быть сильно настроенная конфигурация кота.

Проверьте сценарий запуска, чтобы определить, какой класс вызывается. Если это обычная каталина, она не встроена, просто они изменили конфигурацию, чтобы указать на другую папку вместо веб-приложений.

Если он действительно встроен, то для обновления вам потребуется заменить банки tomcat новыми.

person jbx    schedule 28.12.2010
comment
Спасибо jbx, это действительно было встроено. Обновил вопрос. Не могли бы вы взглянуть? - person pavanlimo; 28.12.2010
comment
Итак, вам нужно будет заменить все связанные банки. Взгляните на эту ссылку здесь. Это для Tomcat 7.0, но дает вам хорошее представление. nileshk.com/2010/08/25/emdedding- apache-tomcat-7-0.html - person jbx; 28.12.2010
comment
Я был бы очень осторожен, пытаясь это сделать. У вас нет гарантии, что ребята из Tomcat не рефакторировали классы и не изменили имена классов, имена пакетов или имена методов, что могло бы нарушить код приложения. У вас есть конкретная причина, по которой вам нужно обновиться? - person jbx; 28.12.2010
comment
В первую очередь потому, что нас попросил клиент ;). А если серьезно, то все исправления безопасности, которые поставляются с более высокой версией. - person pavanlimo; 28.12.2010
comment
Хорошо, попробуйте заменить банки и молитесь, чтобы ничего не сломалось. Спецификация сервлета не определяет встроенные механизмы сервлетов, поэтому, если какой-либо класс/пакет/метод, используемый приложением из jar-файлов tomcat, был изменен в последней версии, код приложения также необходимо будет изменить. Надеюсь, ничего не изменилось, но тщательно тестируйте и следите за этими непонятными исключениями при запуске двигателя. - person jbx; 28.12.2010

В tomcat мы можем создавать виртуальные хосты, то есть заставлять tomcat распознавать приложения, развернутые во внешних папках.

Здесь можно найти гораздо больше информации. http://tomcat.apache.org/tomcat-5.5-doc/config/host.html

В данном сценарии попробуйте выполнить поиск в файле server.xml, который обычно находится в папке conf домашней страницы tomcat.

person Ratna Dinakar    schedule 28.12.2010
comment
Я не смог найти server.xml! Итак, дома кота нет, и поэтому это встроено? - person pavanlimo; 28.12.2010
comment
Вы делали общесистемный поиск? - person Ratna Dinakar; 28.12.2010
comment
Вы идете долгий путь этим путем. Начните с вещей, которые вы знаете. Проверьте сценарий, который вы используете для запуска приложения. Если он выглядит как обычный start.sh или catalina.sh tomcat, он не встроен. Встроенный означает, что ваше приложение запускает tomcat программно. - person jbx; 28.12.2010
comment
Да, я сделал общесистемный поиск, обновил вопрос. Спасибо за интерес, Ратна. - person pavanlimo; 28.12.2010