2016-12-28 1 views
0

У меня есть тег коннектора, настроенный в server.xml, как показано ниже.Доступ к настроенному тегу Connector server.xml в Java-коде

<Connector port="8080" bindOnInit="false" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 

Я хочу, чтобы прочитать значение bindOnInit параметра во время выполнения с помощью кода Java. Я не хочу разбирать xml. Как я искал, я обнаружил, что могу получить данные от Tomcat tomcat = new Tomcat(); объект tomcat. Как я могу получить существующий объект tomcat вместо создания нового, потому что создание нового объекта tomcat не даст мне сконфигурированного значения.

Помогите с чтением параметр bindOnInit в режиме исполнения с использованием кода Java.

Заранее спасибо.

+0

для чего вы хотите это значение? –

+0

Я хотел бы знать, как читать эти значения. –

+0

Если я могу объяснить, если вы знаете, как работает Connector, когда bindOnInit = "false". –

ответ

0

Вы должны восстановить org.apache.catalina.server.StandardServer с помощью MBeanServer. Это элемент корневого для всех элементов системы Tomcat:

import java.lang.management.ManagementFactory; 
import java.util.Collection; 
import java.util.HashSet; 

import javax.management.MBeanServer; 
import javax.management.ObjectName; 
import org.apache.catalina.Service; 
import org.apache.catalina.connector.Connector; 
import org.apache.catalina.core.StandardServer; 
import org.apache.log4j.Logger; 

public class TomcatConnectors { 

    public static final String CATALINA_SERVICE_NAME = "Catalina"; 

    public static final String CONNECTOR_HTTP_PROTOCOL_NAME = "HTTP/1.1"; 

    private Logger logger = Logger.getLogger(this.getClass()); 

    private Collection<Connector> connectors; 

    /** 
    * 
    */ 
    public TomcatConnectors() { 
     super(); 
     this.connectors = new HashSet<Connector>(); 
     this.loadConnectors(); 
    } 

    /** 
    * 
    * @return 
    */ 
    protected StandardServer getServerInstance(){ 
     org.apache.catalina.core.StandardServer server = null; 
     try{ 
      MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer(); 
      server = (StandardServer)mbeanServer.getAttribute(
         new ObjectName("Catalina:type=Server"), 
         "managedResource" 
        ); 
      if(logger.isDebugEnabled()){ 
       logger.debug("Server found. Info: "); 
       logger.debug(" - address   : " + server.getAddress()); 
       logger.debug(" - domain   : " + server.getDomain()); 
       logger.debug(" - info    : " + server.getInfo()); 
       logger.debug(" - shutdown port : " + server.getPort()); 
       logger.debug(" - shutdown command : " + server.getShutdown()); 
       logger.debug(" - serverInfo  : " + server.getServerInfo()); 
       logger.debug(" - status   : " + server.getStateName()); 

      }    

     }catch(Throwable t){ 
      logger.fatal("Fatal Error Recovering StandardServer from MBeanServer : " + t.getClass().getName() + ": " + t.getMessage(), t); 
     } 
     return server; 
    } 

    /* 
    * 
    */ 
    protected Service getCatalinaService(){ 
     org.apache.catalina.core.StandardServer server = this.getServerInstance(); 
     Service[] services = server.findServices(); 
     for(Service aService : services){ 
      if(logger.isDebugEnabled()){ 
       logger.debug("Service: " + aService.getName() + 
         ", info: " + aService.getInfo() + 
         ", state: " + aService.getStateName()); 
      } 

      if(aService.getName().equalsIgnoreCase(CATALINA_SERVICE_NAME)){ 
       return aService;     
      } 
     } 
     return null; 
    } 

    protected void loadConnectors() { 
     Service catalinaService = this.getCatalinaService(); 
     if(catalinaService == null){ 
      throw new IllegalStateException("Service Catalina cannot be null"); 
     } 
     if(catalinaService.findConnectors() != null && catalinaService.findConnectors().length > 0){ 
      logger.debug("List of connectors: "); 
      for(Connector aConnector : catalinaService.findConnectors()){ 
       if(logger.isDebugEnabled()){ 
        logger.debug("Connector.getProtocol: " + aConnector.getProtocol()); 
        logger.debug("Connector.getPort: " + aConnector.getPort()); 
        logger.debug("Connector.getInfo: " + aConnector.getInfo()); 
        logger.debug("Connector.getStateName: " + aConnector.getStateName()); 
        logger.debug("Connector.property.bindOnInit: " + aConnector.getProperty("bindOnInit")); 
        logger.debug("Connector.attribute.bindOnInit: " + aConnector.getAttribute("bindOnInit")); 
        logger.debug("Connector.getState: " + aConnector.getState()); 
       } 
       this.connectors.add(aConnector); 
      } 
     } 
    } 

    /** 
    * @return the connectors 
    */ 
    public Collection<Connector> getConnectors() { 
     if(this.connectors.isEmpty()){ 
      this.loadConnectors(); 
     } 
     return connectors; 
    } 
} 

Я проверил с этой конфигурацией разъема:

<Service name="Catalina"> 

    <Connector connectionTimeout="20000" port="8787" protocol="HTTP/1.1" redirectPort="8443"/> 

    <Connector bindOnInit="false" port="8009" protocol="AJP/1.3" redirectPort="8443"/> 

    ... 

И это выход журнала:

HH:mm:ss,046 DEBUG TomcatConnectors:46 - Server found. Info: 
HH:mm:ss,046 DEBUG TomcatConnectors:47 - - address   : localhost 
HH:mm:ss,046 DEBUG TomcatConnectors:48 - - domain   : Catalina 
HH:mm:ss,046 DEBUG TomcatConnectors:49 - - info    : org.apache.catalina.core.StandardServer/1.0 
HH:mm:ss,046 DEBUG TomcatConnectors:50 - - shutdown port : 8005 
HH:mm:ss,046 DEBUG TomcatConnectors:51 - - shutdown command : SHUTDOWN 
HH:mm:ss,046 DEBUG TomcatConnectors:52 - - serverInfo  : Apache Tomcat/7.0.29 
HH:mm:ss,046 DEBUG TomcatConnectors:53 - - status   : STARTING 
HH:mm:ss,047 DEBUG TomcatConnectors:71 - Service: Catalina, info: org.apache.catalina.core.StandardService/1.0, state: STARTING 
HH:mm:ss,047 DEBUG TomcatConnectors:89 - List of connectors: 
HH:mm:ss,047 DEBUG TomcatConnectors:92 - Connector.getProtocol: HTTP/1.1 
HH:mm:ss,047 DEBUG TomcatConnectors:93 - Connector.getPort: 8787 
HH:mm:ss,047 DEBUG TomcatConnectors:94 - Connector.getInfo: org.apache.catalina.connector.Connector/2.1 
HH:mm:ss,047 DEBUG TomcatConnectors:95 - Connector.getStateName: INITIALIZED 
HH:mm:ss,047 DEBUG TomcatConnectors:96 - Connector.property.bindOnInit: null 
HH:mm:ss,047 DEBUG TomcatConnectors:97 - Connector.attribute.bindOnInit: null 
HH:mm:ss,047 DEBUG TomcatConnectors:98 - Connector.getState: INITIALIZED 
HH:mm:ss,048 DEBUG TomcatConnectors:92 - Connector.getProtocol: AJP/1.3 
HH:mm:ss,048 DEBUG TomcatConnectors:93 - Connector.getPort: 8009 
HH:mm:ss,048 DEBUG TomcatConnectors:94 - Connector.getInfo: org.apache.catalina.connector.Connector/2.1 
HH:mm:ss,048 DEBUG TomcatConnectors:95 - Connector.getStateName: INITIALIZED 
HH:mm:ss,048 DEBUG TomcatConnectors:96 - Connector.property.bindOnInit: false 
HH:mm:ss,048 DEBUG TomcatConnectors:97 - Connector.attribute.bindOnInit: false 
HH:mm:ss,048 DEBUG TomcatConnectors:98 - Connector.getState: INITIALIZED 

Вы можете см., что свойство binOnInit можно получить через методы getProperty() или getAttribute() соединителя и что он фактически возвращает false значение для разъема AJP:

HH:mm:ss,048 DEBUG TomcatConnectors:92 - Connector.getProtocol: AJP/1.3 
HH:mm:ss,048 DEBUG TomcatConnectors:96 - Connector.property.bindOnInit: false 
HH:mm:ss,048 DEBUG TomcatConnectors:97 - Connector.attribute.bindOnInit: false 
Смежные вопросы