Проверка defined?(JRUBY_VERSION) представляется наиболее идиоматичным способом определения того, работаете ли вы в jruby (см. Как я могу узнать, работаю ли я с JRuby против Ruby? , различные FOSS jrubyпроекты).Есть ли подобная идиома для определения того, работаете ли вы в Tomcat?
defined?(JRUBY_VERSION)
В отсутствие существующей четко установленной идиомы я собираюсь предложить defined?($servlet_context). Это будет определено в любом контейнере сервлета, не только в Tomcat, но это может быть предпочтительнее в любом случае.
defined?($servlet_context)
работает как в мрт, так и в джруби
IN_TOMCAT = begin require 'org/apache/tomcat/InstanceManager' defined?(Java::org::apache::tomcat::InstanceManager) rescue LoadError;end
Может быть что-то вроде:
public boolean isTomcat() { try { Class.forName("org.apache.tomcat.InstanceManager"); return true; } catch (ClassNotFoundException ex) { return false; } }