Skip to content

Commit 105039c

Browse files
committed
Rename SpringApplicationLifecycle => Admin
Rename SpringApplicationLifecycle JMX beans to SpringApplicationAdmin and relocate to a dedicated package. Fixes gh-3124
1 parent f8f4bd6 commit 105039c

File tree

12 files changed

+92
-70
lines changed

12 files changed

+92
-70
lines changed
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,16 @@
1414
* limitations under the License.
1515
*/
1616

17-
package org.springframework.boot.autoconfigure.context;
17+
package org.springframework.boot.autoconfigure.admin;
1818

1919
import javax.management.MalformedObjectNameException;
2020

2121
import org.springframework.beans.factory.annotation.Autowired;
22+
import org.springframework.boot.admin.SpringApplicationAdminMXBean;
23+
import org.springframework.boot.admin.SpringApplicationAdminMXBeanRegistrar;
2224
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
2325
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
2426
import org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration;
25-
import org.springframework.boot.context.SpringApplicationLifecycleMXBean;
26-
import org.springframework.boot.context.SpringApplicationLifecycleRegistrar;
2727
import org.springframework.context.annotation.Bean;
2828
import org.springframework.context.annotation.Configuration;
2929
import org.springframework.core.env.Environment;
@@ -35,23 +35,23 @@
3535
*
3636
* @author Stephane Nicoll
3737
* @since 1.3.0
38-
* @see SpringApplicationLifecycleMXBean
38+
* @see SpringApplicationAdminMXBean
3939
*/
4040
@Configuration
4141
@AutoConfigureAfter(JmxAutoConfiguration.class)
4242
@ConditionalOnProperty(value = "spring.context.lifecycle.enabled", havingValue = "true", matchIfMissing = false)
43-
class SpringApplicationLifecycleAutoConfiguration {
43+
public class SpringApplicationAdminJmxAutoConfiguration {
4444

4545
/**
4646
* The property to use to customize the {@code ObjectName} of the application
4747
* lifecycle mbean.
4848
*/
49-
static final String JMX_NAME_PROPERTY = "spring.context.lifecycle.jmx-name";
49+
private static final String JMX_NAME_PROPERTY = "spring.application.admin.jmx-name";
5050

5151
/**
5252
* The default {@code ObjectName} of the application lifecycle mbean.
5353
*/
54-
static final String DEFAULT_JMX_NAME = "org.springframework.boot:type=Lifecycle,name=springApplicationLifecycle";
54+
private static final String DEFAULT_JMX_NAME = "org.springframework.boot:type=SpringApplicationAdmin,name=springApplicationAdmin";
5555

5656
@Autowired(required = false)
5757
private MBeanExporter mbeanExporter;
@@ -60,14 +60,14 @@ class SpringApplicationLifecycleAutoConfiguration {
6060
private Environment environment;
6161

6262
@Bean
63-
public SpringApplicationLifecycleRegistrar springApplicationLifecycleRegistrar()
63+
public SpringApplicationAdminMXBeanRegistrar springApplicationLifecycleRegistrar()
6464
throws MalformedObjectNameException {
6565
String jmxName = this.environment
6666
.getProperty(JMX_NAME_PROPERTY, DEFAULT_JMX_NAME);
6767
if (this.mbeanExporter != null) { // Make sure to not register that MBean twice
6868
this.mbeanExporter.addExcludedBean(jmxName);
6969
}
70-
return new SpringApplicationLifecycleRegistrar(jmxName);
70+
return new SpringApplicationAdminMXBeanRegistrar(jmxName);
7171
}
7272

7373
}

spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingIni
44

55
# Auto Configure
66
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
7+
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
78
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
89
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
910
org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration,\
1011
org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration,\
1112
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
1213
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
1314
org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration,\
14-
org.springframework.boot.autoconfigure.context.SpringApplicationLifecycleAutoConfiguration,\
1515
org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,\
1616
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,\
1717
org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\
Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
package org.springframework.boot.autoconfigure.context;
17+
package org.springframework.boot.autoconfigure.admin;
1818

1919
import java.lang.management.ManagementFactory;
2020

@@ -37,13 +37,17 @@
3737
import static org.junit.Assert.fail;
3838

3939
/**
40-
* Tests for {@link SpringApplicationLifecycleAutoConfiguration}.
40+
* Tests for {@link SpringApplicationAdminJmxAutoConfiguration}.
4141
*
4242
* @author Stephane Nicoll
4343
*/
4444
public class SpringApplicationLifecycleAutoConfigurationTests {
4545

46-
public static final String ENABLE_LIFECYCLE_PROP = "spring.context.lifecycle.enabled=true";
46+
private static final String ENABLE_LIFECYCLE_PROP = "spring.context.lifecycle.enabled=true";
47+
48+
private static final String JMX_NAME_PROPERTY = "spring.application.admin.jmx-name";
49+
50+
private static final String DEFAULT_JMX_NAME = "org.springframework.boot:type=SpringApplicationAdmin,name=springApplicationAdmin";
4751

4852
@Rule
4953
public final ExpectedException thrown = ExpectedException.none();
@@ -83,8 +87,7 @@ public void registeredWithProperty() throws Exception {
8387
@Test
8488
public void registerWithCustomJmxName() throws InstanceNotFoundException {
8589
String customJmxName = "org.acme:name=FooBar";
86-
System.setProperty(SpringApplicationLifecycleAutoConfiguration.JMX_NAME_PROPERTY,
87-
customJmxName);
90+
System.setProperty(JMX_NAME_PROPERTY, customJmxName);
8891
try {
8992
load(ENABLE_LIFECYCLE_PROP);
9093
try {
@@ -97,12 +100,12 @@ public void registerWithCustomJmxName() throws InstanceNotFoundException {
97100
this.mBeanServer.getObjectInstance(createDefaultObjectName());
98101
}
99102
finally {
100-
System.clearProperty(SpringApplicationLifecycleAutoConfiguration.JMX_NAME_PROPERTY);
103+
System.clearProperty(JMX_NAME_PROPERTY);
101104
}
102105
}
103106

104107
private ObjectName createDefaultObjectName() {
105-
return createObjectName(SpringApplicationLifecycleAutoConfiguration.DEFAULT_JMX_NAME);
108+
return createObjectName(DEFAULT_JMX_NAME);
106109
}
107110

108111
private ObjectName createObjectName(String jmxName) {
@@ -118,7 +121,7 @@ private void load(String... environment) {
118121
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
119122
EnvironmentTestUtils.addEnvironment(applicationContext, environment);
120123
applicationContext.register(JmxAutoConfiguration.class,
121-
SpringApplicationLifecycleAutoConfiguration.class);
124+
SpringApplicationAdminJmxAutoConfiguration.class);
122125
applicationContext.refresh();
123126
this.context = applicationContext;
124127
}

spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop-fork/src/main/java/org/test/SampleApplication.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ public class SampleApplication {
3131
public static void main(String[] args) throws Exception {
3232
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
3333
ObjectName name = new ObjectName(
34-
"org.springframework.boot:type=Lifecycle,name=springApplicationLifecycle");
35-
SpringApplicationLifecycle mbean = new SpringApplicationLifecycle();
34+
"org.springframework.boot:type=SpringApplicationAdmin,name=springApplicationAdmin");
35+
SpringApplicationAdmin mbean = new SpringApplicationAdmin();
3636
mbs.registerMBean(mbean, name);
3737

3838
// Flag the app as ready
@@ -51,15 +51,15 @@ public static void main(String[] args) throws Exception {
5151
}
5252
}
5353

54-
public interface SpringApplicationLifecycleMXBean {
54+
public interface SpringApplicationAdminMXBean {
5555

5656
boolean isReady();
5757

5858
void shutdown();
5959

6060
}
6161

62-
static class SpringApplicationLifecycle implements SpringApplicationLifecycleMXBean {
62+
static class SpringApplicationAdmin implements SpringApplicationAdminMXBean {
6363

6464
private boolean ready;
6565

spring-boot-tools/spring-boot-maven-plugin/src/it/start-stop/src/main/java/org/test/SampleApplication.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ public class SampleApplication {
3030
public static void main(String[] args) throws Exception {
3131
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
3232
ObjectName name = new ObjectName(
33-
"org.springframework.boot:type=Lifecycle,name=springApplicationLifecycle");
34-
SpringApplicationLifecycle mbean = new SpringApplicationLifecycle();
33+
"org.springframework.boot:type=SpringApplicationAdmin,name=springApplicationAdmin");
34+
SpringApplicationAdmin mbean = new SpringApplicationAdmin();
3535
mbs.registerMBean(mbean, name);
3636

3737
// Flag the app as ready
@@ -50,15 +50,15 @@ public static void main(String[] args) throws Exception {
5050
}
5151
}
5252

53-
public interface SpringApplicationLifecycleMXBean {
53+
public interface SpringApplicationAdminMXBean {
5454

5555
boolean isReady();
5656

5757
void shutdown();
5858

5959
}
6060

61-
static class SpringApplicationLifecycle implements SpringApplicationLifecycleMXBean {
61+
static class SpringApplicationAdmin implements SpringApplicationAdminMXBean {
6262

6363
private boolean ready;
6464

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -32,39 +32,25 @@
3232
import org.apache.maven.plugin.MojoExecutionException;
3333

3434
/**
35-
* A JMX client for the {@code SpringApplicationLifecycle} mbean. Permits to obtain
36-
* information about the lifecycle of a given Spring application.
35+
* A JMX client for the {@code SpringApplicationAdmin} MBean. Permits to obtain
36+
* information about a given Spring application.
3737
*
3838
* @author Stephane Nicoll
3939
*/
40-
class SpringApplicationLifecycleClient {
40+
class SpringApplicationAdminClient {
4141

42-
// Note: see SpringApplicationLifecycleAutoConfiguration
43-
static final String DEFAULT_OBJECT_NAME = "org.springframework.boot:type=Lifecycle,name=springApplicationLifecycle";
42+
// Note: see SpringApplicationAdminJmxAutoConfiguration
43+
static final String DEFAULT_OBJECT_NAME = "org.springframework.boot:type=SpringApplicationAdmin,name=springApplicationAdmin";
4444

4545
private final MBeanServerConnection connection;
4646

4747
private final ObjectName objectName;
4848

49-
public SpringApplicationLifecycleClient(MBeanServerConnection connection,
50-
String jmxName) {
49+
public SpringApplicationAdminClient(MBeanServerConnection connection, String jmxName) {
5150
this.connection = connection;
5251
this.objectName = toObjectName(jmxName);
5352
}
5453

55-
/**
56-
* Create a connector for an {@link javax.management.MBeanServer} exposed on the
57-
* current machine and the current port. Security should be disabled.
58-
* @param port the port on which the mbean server is exposed
59-
* @return a connection
60-
* @throws IOException if the connection to that server failed
61-
*/
62-
public static JMXConnector createLocalJmxConnector(int port) throws IOException {
63-
String url = "service:jmx:rmi:///jndi/rmi://127.0.0.1:" + port + "/jmxrmi";
64-
JMXServiceURL serviceUrl = new JMXServiceURL(url);
65-
return JMXConnectorFactory.connect(serviceUrl, null);
66-
}
67-
6854
/**
6955
* Check if the spring application managed by this instance is ready. Returns
7056
* {@code false} if the mbean is not yet deployed so this method should be repeatedly
@@ -123,4 +109,17 @@ private ObjectName toObjectName(String name) {
123109
}
124110
}
125111

112+
/**
113+
* Create a connector for an {@link javax.management.MBeanServer} exposed on the
114+
* current machine and the current port. Security should be disabled.
115+
* @param port the port on which the mbean server is exposed
116+
* @return a connection
117+
* @throws IOException if the connection to that server failed
118+
*/
119+
public static JMXConnector connect(int port) throws IOException {
120+
String url = "service:jmx:rmi:///jndi/rmi://127.0.0.1:" + port + "/jmxrmi";
121+
JMXServiceURL serviceUrl = new JMXServiceURL(url);
122+
return JMXConnectorFactory.connect(serviceUrl, null);
123+
}
124+
126125
}

spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/StartMojo.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public class StartMojo extends AbstractRunMojo {
5959
* spring application.
6060
*/
6161
@Parameter
62-
private String jmxName = SpringApplicationLifecycleClient.DEFAULT_OBJECT_NAME;
62+
private String jmxName = SpringApplicationAdminClient.DEFAULT_OBJECT_NAME;
6363

6464
/**
6565
* The port to use to expose the platform MBeanServer if the application needs to be
@@ -151,11 +151,11 @@ protected void runWithMavenJvm(String startClassName, String... arguments)
151151

152152
private void waitForSpringApplication(long wait, int maxAttempts)
153153
throws MojoExecutionException {
154-
SpringApplicationLifecycleClient helper = new SpringApplicationLifecycleClient(
154+
SpringApplicationAdminClient client = new SpringApplicationAdminClient(
155155
ManagementFactory.getPlatformMBeanServer(), this.jmxName);
156156
getLog().debug("Waiting for spring application to start...");
157157
for (int i = 0; i < maxAttempts; i++) {
158-
if (helper.isReady()) {
158+
if (client.isReady()) {
159159
return;
160160
}
161161
String message = "Spring application is not ready yet, waiting " + wait
@@ -227,7 +227,7 @@ private void waitForForkedSpringApplication() throws IOException,
227227

228228
private void doWaitForSpringApplication(MBeanServerConnection connection)
229229
throws IOException, MojoExecutionException, MojoFailureException {
230-
final SpringApplicationLifecycleClient client = new SpringApplicationLifecycleClient(
230+
final SpringApplicationAdminClient client = new SpringApplicationAdminClient(
231231
connection, this.jmxName);
232232
try {
233233
execute(this.wait, this.maxAttempts, new Callable<Boolean>() {
@@ -294,8 +294,7 @@ public CreateJmxConnector(int port) {
294294
@Override
295295
public JMXConnector call() throws Exception {
296296
try {
297-
return SpringApplicationLifecycleClient
298-
.createLocalJmxConnector(this.port);
297+
return SpringApplicationAdminClient.connect(this.port);
299298
}
300299
catch (IOException ex) {
301300
if (hasCauseWithType(ex, ConnectException.class)) {

spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/StopMojo.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public class StopMojo extends AbstractMojo {
5353
* application.
5454
*/
5555
@Parameter
56-
private String jmxName = SpringApplicationLifecycleClient.DEFAULT_OBJECT_NAME;
56+
private String jmxName = SpringApplicationAdminClient.DEFAULT_OBJECT_NAME;
5757

5858
/**
5959
* The port to use to lookup the platform MBeanServer if the application has been
@@ -81,8 +81,7 @@ public void execute() throws MojoExecutionException, MojoFailureException {
8181

8282
private void stopForkedProcess() throws IOException, MojoFailureException,
8383
MojoExecutionException {
84-
JMXConnector connector = SpringApplicationLifecycleClient
85-
.createLocalJmxConnector(this.jmxPort);
84+
JMXConnector connector = SpringApplicationAdminClient.connect(this.jmxPort);
8685
try {
8786
MBeanServerConnection connection = connector.getMBeanServerConnection();
8887
doStop(connection);
@@ -99,7 +98,7 @@ private void stop() throws IOException, MojoFailureException, MojoExecutionExcep
9998
private void doStop(MBeanServerConnection connection) throws IOException,
10099
MojoExecutionException {
101100
try {
102-
new SpringApplicationLifecycleClient(connection, this.jmxName).stop();
101+
new SpringApplicationAdminClient(connection, this.jmxName).stop();
103102
}
104103
catch (InstanceNotFoundException ex) {
105104
throw new MojoExecutionException(
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,16 @@
1414
* limitations under the License.
1515
*/
1616

17-
package org.springframework.boot.context;
17+
package org.springframework.boot.admin;
1818

1919
/**
20-
* A simple MBean contract to control the lifecycle of a {@code SpringApplication} via
21-
* JMX. Intended for internal use only.
20+
* A MBean contract to control and monitor a running {@code SpringApplication} via JMX.
21+
* Intended for internal use only.
2222
*
2323
* @author Stephane Nicoll
2424
* @since 1.3.0
2525
*/
26-
public interface SpringApplicationLifecycleMXBean {
26+
public interface SpringApplicationAdminMXBean {
2727

2828
/**
2929
* Specify if the application has fully started and is now ready.

0 commit comments

Comments
 (0)