2016-12-28 7 views
0

server.xmlにconnectorタグが以下のように設定されています。Javaコードでserver.xmlのコンフィグレーション済みコネクタタグにアクセスする

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

私は、Javaコードを使用して、実行時にbindOnInitパラメータの値を読みたいです。 私はXMLを解析したくありません。 私は私がデータを得ることができることを発見しましたTomcat tomcat =新しいTomcat(); tomcatオブジェクト。新しいTomcatオブジェクトを作成すると設定された値が得られないため、新しいTomcatオブジェクトを作成する代わりに、既存のTomcatオブジェクトを取得するにはどうすればよいですか。

bindOnInitパラメータは、Javaコードを使用してランタイムにパラメータ化してください。

ありがとうございます。

+0

この値はどうしますか? –

+0

私はこれらの値を読む方法を知りたいです。 –

+0

bindOnInit = "false"のときにConnectorがどのように動作するかを知っていれば私に説明できます。 –

答えて

0

MBeanServerを使用してorg.apache.catalina.server.StandardServerを回復する必要があります。これは、すべての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()メソッドを通じてアクセスでき、実際にはが返されることを確認してください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 
関連する問題