Может ли Java-код определить, находится ли он на сервере приложений? - PullRequest
4 голосов
/ 23 марта 2009

Могу ли я позвонить из POJO, чтобы узнать, находится ли код в данный момент на сервере приложений или за пределами сервера приложений?

Примерно так (в грубом псевдокоде):

System.getRunningEnvironment().equals(Environment.Glassfish)

или

System.getRunningEnvironment().equals(Environment.ApplicationServer)

или

System.getRunningEnvironment().equals(Environment.JavaSE)

Ответы [ 7 ]

4 голосов
/ 25 марта 2009

Если вы можете изменить сценарии инициализации AppServer (посмотрите на эту ссылку ):

Добавьте -DRunningInAppServer = true в сценарий инициализации AppServer.

Добавьте -DRunningInAppServer = false в сценарий инициализации приложения.

Тогда используйте этот метод:

public boolean isRunningInAppServer() {

        if ("true".equals(System.getProperty("RunningAppServer"))) {
            return true;
        }
        return false;
}
2 голосов
/ 23 марта 2009

Я не верю, что вы можете сделать это тривиально. И хотите ли вы различать сервер приложений, веб-контейнер и т. Д.?

Какова причина для определения этого? Чтобы позволить вашим POJO вести себя по-разному в разных средах? Если так, то я думаю, что это указывает на структуру объекта / компонента, которая не совсем корректна, или, по крайней мере, где обязанности объекта не определены четко.

2 голосов
/ 23 марта 2009

Самый простой способ - проверить существование определенных классов Java EE / App Server.

0 голосов
/ 05 апреля 2010

Некоторые серверы приложений устанавливают системные свойства, например, JBoss: http://community.jboss.org/wiki/JBossProperties

0 голосов
/ 26 марта 2010

Я не думаю, что есть какой-то способ определить это напрямую. Да, как утверждает SourceRebel, вы можете установить системное свойство. Лично я бы избегал этого, так как у вас тогда происходит некоторая скрытая связь: ваша функция зависит от системного свойства, которое должно быть установлено правильно, чтобы оно работало, но в интерфейсе нет ничего четко определенного для отражения этого , Я думаю, что вам было бы гораздо лучше просто передать параметр, который говорит, что это такое, и позволить вызывающей стороне быть ответственным за передачу правильного параметра. Тогда наличие этого параметра будет ясно видно в сигнатуре функции, и любой, кто его использует, будет иметь четкое представление о том, что он должен установить его правильно. Правильно установить вызывающего абонента должно быть тривиально, так как предположительно в какой-то момент в цепочке вызовов вы звоните из настольного приложения или с веб-страницы, и этот вызывающий абонент знает, какой это.

0 голосов
/ 23 марта 2009

Рассмотрите возможность проверки текущего SecurityManager, если ваш сервер приложений использует его.

0 голосов
/ 23 марта 2009

Я никогда не использовал сервер приложений, но, возможно, вы сможете добиться этого с помощью System.getProperties() / System.getProperty(...)

...