001: /**
002: * Licensed to the Apache Software Foundation (ASF) under one
003: * or more contributor license agreements. See the NOTICE file
004: * distributed with this work for additional information
005: * regarding copyright ownership. The ASF licenses this file
006: * to you under the Apache License, Version 2.0 (the
007: * "License"); you may not use this file except in compliance
008: * with the License. You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing,
013: * software distributed under the License is distributed on an
014: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015: * KIND, either express or implied. See the License for the
016: * specific language governing permissions and limitations
017: * under the License.
018: */package org.apache.cxf.endpoint;
019:
020: import javax.management.JMException;
021: import javax.management.ObjectName;
022:
023: import org.apache.cxf.Bus;
024: import org.apache.cxf.management.ManagedComponent;
025: import org.apache.cxf.management.ManagementConstants;
026: import org.apache.cxf.management.annotation.ManagedAttribute;
027: import org.apache.cxf.management.annotation.ManagedOperation;
028: import org.apache.cxf.management.annotation.ManagedResource;
029:
030: @ManagedResource(componentName="Endpoint",description="Responsible for managing server instances.")
031: public class ManagedEndpoint implements ManagedComponent,
032: ServerLifeCycleListener {
033:
034: private Bus bus;
035: private Endpoint endpoint;
036: private Server server;
037:
038: private enum State {
039: CREATED, STARTED, STOPPED
040: };
041:
042: private State state = State.CREATED;
043:
044: public ManagedEndpoint(Bus b, Endpoint ep, Server s) {
045: bus = b;
046: endpoint = ep;
047: server = s;
048: }
049:
050: @ManagedOperation
051: public void start() {
052: if (state == State.STARTED) {
053: return;
054: }
055: ServerLifeCycleManager mgr = bus
056: .getExtension(ServerLifeCycleManager.class);
057: if (mgr != null) {
058: mgr.registerListener(this );
059: }
060: server.start();
061: }
062:
063: @ManagedOperation
064: public void stop() {
065: server.stop();
066: }
067:
068: @ManagedAttribute(description="Address Attribute",currencyTimeLimit=60)
069: public String getAddress() {
070: return endpoint.getEndpointInfo().getAddress();
071: }
072:
073: @ManagedAttribute(description="TransportId Attribute",currencyTimeLimit=60)
074: public String getTransportId() {
075: return endpoint.getEndpointInfo().getAddress();
076: }
077:
078: @ManagedAttribute(description="Server State")
079: public String getState() {
080: return state.toString();
081: }
082:
083: public ObjectName getObjectName() throws JMException {
084: String busId = bus.getId();
085: StringBuffer buffer = new StringBuffer();
086: buffer.append(ManagementConstants.DEFAULT_DOMAIN_NAME + ":");
087: buffer.append(ManagementConstants.BUS_ID_PROP + "=" + busId
088: + ",");
089: buffer.append(ManagementConstants.TYPE_PROP + "="
090: + "Bus.Service.Endpoint,");
091:
092: String serviceName = ObjectName.quote(endpoint
093: .getEndpointInfo().getService().getName().toString());
094: buffer.append(ManagementConstants.SERVICE_NAME_PROP + "="
095: + serviceName + ",");
096: String endpointName = ObjectName.quote(endpoint
097: .getEndpointInfo().getName().toString());
098: buffer.append(ManagementConstants.PORT_NAME_PROP + "="
099: + endpointName);
100:
101: //Use default domain name of server
102: return new ObjectName(buffer.toString());
103: }
104:
105: public void startServer(Server s) {
106: if (server.equals(s)) {
107: state = State.STARTED;
108: }
109: }
110:
111: public void stopServer(Server s) {
112: if (server.equals(s)) {
113: state = State.STOPPED;
114: // unregister server to avoid the memory leak
115: ServerLifeCycleManager mgr = bus
116: .getExtension(ServerLifeCycleManager.class);
117: if (mgr != null) {
118: mgr.unRegisterListener(this);
119: }
120: }
121: }
122:
123: }
|