Как узнать путь войны текущего приложения в tomcat - PullRequest
0 голосов
/ 15 февраля 2011

У меня есть приложение tomcat (с JSF).Я хочу знать путь войны текущего приложения.

Я попробовал следующий код, чтобы узнать, где находится tomcat ((ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext()).getRealPath("")

Однако после того, как я добавлю antiResourceLocking="true" копределение контекста, предыдущая команда возвращает временный каталог.

Я отлаживал, и я вижу, что в

((ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext())

есть переменная context с одним атрибутом с именемdocBase, которая содержит информацию, которая мне нужна.Однако я никак не могу это понять.

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

Ответы [ 2 ]

1 голос
/ 18 февраля 2011

Либо это невозможно, либо никто не знает, как решить эту проблему.

0 голосов
/ 15 февраля 2011

Честно говоря, я должен сказать, что это невозможно, или только с каким-то очень склонным к ошибкам хаком , подобным этому

Я предполагаю, что в этом случае реальный класс FacesContext.getCurrentInstance().getExternalContext().getContext() idorg.apache.catalina.core.StandardContext

Таким образом, вы можете получить доступ docBase вот так

javax.faces.context.ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
if(externalContext instanceof org.apache.catalina.core.StandardContext) {
   String path = ((org.apache.catalina.core.StandardContext)externalContext .getContext()).getDocBase();
}

Но это, на мой взгляд, не решение, так как вы сильно зависите от внутренних компонентов tomcat.Остаются следующие проблемы: * у вас нет гарантии, что это действительно экземпляр StandardContext *, если он работает для данной версии tomcat, он может перестать работать без объявления в будущем * в любом случае, он не будет работать на любом другом сервере приложений

Если вы только что сделали, ответьте так, как вы обнаружили, отладив это поле.В целом, это очень плохая практика - отлаживать некоторый код, к которому вы обращаетесь через API (здесь API-сервлет), а затем находить способ доступа к внутренним компонентам сома, не предоставленным этим API должным образом, даже если это теоретически возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...