Skip to content

Commit a89d8a5

Browse files
authored
Merge pull request #19 from negative-games/feat/spring-reload
Make Spring Reloadable
2 parents 5ac21b5 + f29e4d5 commit a89d8a5

7 files changed

Lines changed: 132 additions & 94 deletions

File tree

moss-bungeecord/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66

77
def id = 'moss-bungeecord'
88
def domain = 'games.negative.moss'
9-
def apiVersion = '1.1.0'
9+
def apiVersion = '1.2.0-SNAPSHOT'
1010

1111
repositories {
1212
mavenCentral()

moss-bungeecord/src/main/java/games/negative/moss/bungee/MossBungee.java

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@
33
import games.negative.moss.spring.Disableable;
44
import games.negative.moss.spring.Enableable;
55
import games.negative.moss.spring.Loadable;
6-
import games.negative.moss.spring.Reloadable;
6+
import net.md_5.bungee.api.ProxyServer;
77
import net.md_5.bungee.api.plugin.Plugin;
8-
import org.apache.commons.logging.Log;
9-
import org.apache.commons.logging.LogFactory;
8+
import net.md_5.bungee.api.scheduler.TaskScheduler;
109
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
1110

1211
import java.util.Collection;
@@ -16,24 +15,26 @@
1615

1716
public abstract class MossBungee extends Plugin {
1817

18+
public static AnnotationConfigApplicationContext CONTEXT;
19+
1920
private Logger logger;
20-
protected AnnotationConfigApplicationContext context;
2121

2222
@Override
2323
public void onLoad() {
2424
logger = getLogger();
2525

26-
context = new AnnotationConfigApplicationContext();
26+
CONTEXT = new AnnotationConfigApplicationContext();
2727

28-
context.setClassLoader(getClass().getClassLoader());
28+
CONTEXT.setClassLoader(getClass().getClassLoader());
2929

30-
loadInitialComponents(context);
30+
loadInitialComponents(CONTEXT);
3131

32-
context.scan(basePackage());
32+
CONTEXT.scan(basePackage());
3333

34-
context.refresh();
34+
CONTEXT.refresh();
35+
CONTEXT.start();
3536

36-
invokeBeans(Loadable.class, loadable -> loadable.onLoad(context), (loadable, e) -> {
37+
invokeBeans(Loadable.class, loadable -> loadable.onLoad(CONTEXT), (loadable, e) -> {
3738
logger.severe("Failed to load " + loadable.getClass().getSimpleName());
3839
logger.severe(e.getMessage());
3940
});
@@ -46,12 +47,9 @@ public void loadInitialComponents(AnnotationConfigApplicationContext context) {
4647
@Override
4748
public void onEnable() {
4849
enableComponents();
49-
50-
// Initial reload
51-
reload();
5250
}
5351

54-
private void enableComponents() {
52+
public void enableComponents() {
5553
// Register enableables
5654
invokeBeans(Enableable.class, Enableable::onEnable, (enableable, e) -> {
5755
logger.severe("Failed to enable " + enableable.getClass().getSimpleName());
@@ -63,9 +61,9 @@ private void enableComponents() {
6361
public void onDisable() {
6462
disableComponents();
6563

66-
if (context != null) {
67-
context.close();
68-
context = null;
64+
if (CONTEXT != null) {
65+
CONTEXT.close();
66+
CONTEXT = null;
6967
}
7068
}
7169

@@ -74,14 +72,22 @@ public void disableComponents() {
7472
logger.severe("Failed to disable " + disableable.getClass().getSimpleName());
7573
logger.severe(e.getMessage());
7674
});
75+
76+
ProxyServer server = ProxyServer.getInstance();
77+
78+
// Cancel all scheduled tasks
79+
TaskScheduler scheduler = server.getScheduler();
80+
scheduler.cancel(this);
81+
82+
// Unregister all listeners
83+
server.getPluginManager().unregisterListeners(this);
7784
}
7885

7986

8087
public void reload() {
81-
invokeBeans(Reloadable.class, Reloadable::onReload, (reloadable, e) -> {
82-
logger.severe("Failed to reload " + reloadable.getClass().getSimpleName());
83-
logger.severe(e.getMessage());
84-
});
88+
onDisable();
89+
onLoad();
90+
onEnable();
8591
}
8692

8793
/**
@@ -92,7 +98,7 @@ public void reload() {
9298
* @param <T> the type of the beans
9399
*/
94100
public <T> void invokeBeans(Class<T> clazz, Consumer<T> consumer, BiConsumer<T, Exception> onFailure) {
95-
Collection<T> beans = context.getBeansOfType(clazz).values();
101+
Collection<T> beans = CONTEXT.getBeansOfType(clazz).values();
96102
for (T bean : beans) {
97103
try {
98104
consumer.accept(bean);

moss-paper/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66

77
def id = 'moss-paper'
88
def domain = 'games.negative.moss'
9-
def apiVersion = '1.1.0'
9+
def apiVersion = '1.2.0'
1010

1111
repositories {
1212
mavenCentral()

moss-paper/src/main/java/games/negative/moss/paper/MossPaper.java

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@
33
import games.negative.moss.spring.Disableable;
44
import games.negative.moss.spring.Enableable;
55
import games.negative.moss.spring.Loadable;
6-
import games.negative.moss.spring.Reloadable;
7-
import lombok.extern.slf4j.Slf4j;
8-
import org.apache.commons.logging.Log;
9-
import org.apache.commons.logging.LogFactory;
6+
import org.bukkit.Bukkit;
7+
import org.bukkit.event.HandlerList;
108
import org.bukkit.plugin.java.JavaPlugin;
119
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
1210

@@ -17,24 +15,26 @@
1715

1816
public abstract class MossPaper extends JavaPlugin {
1917

18+
public static AnnotationConfigApplicationContext CONTEXT;
19+
2020
private Logger logger;
21-
protected AnnotationConfigApplicationContext context;
2221

2322
@Override
2423
public void onLoad() {
2524
logger = getLogger();
2625

27-
context = new AnnotationConfigApplicationContext();
26+
CONTEXT = new AnnotationConfigApplicationContext();
2827

29-
context.setClassLoader(getClass().getClassLoader());
28+
CONTEXT.setClassLoader(getClass().getClassLoader());
3029

31-
loadInitialComponents(context);
30+
loadInitialComponents(CONTEXT);
3231

33-
context.scan(basePackage());
32+
CONTEXT.scan(basePackage());
3433

35-
context.refresh();
34+
CONTEXT.refresh();
35+
CONTEXT.start();
3636

37-
invokeBeans(Loadable.class, loadable -> loadable.onLoad(context), (loadable, e) -> {
37+
invokeBeans(Loadable.class, loadable -> loadable.onLoad(CONTEXT), (loadable, e) -> {
3838
logger.severe("Failed to load " + loadable.getClass().getSimpleName());
3939
logger.severe(e.getMessage());
4040
});
@@ -47,9 +47,6 @@ public void loadInitialComponents(AnnotationConfigApplicationContext context) {
4747
@Override
4848
public void onEnable() {
4949
enableComponents();
50-
51-
// Initial reload
52-
reload();
5350
}
5451

5552
private void enableComponents() {
@@ -64,25 +61,33 @@ private void enableComponents() {
6461
public void onDisable() {
6562
disableComponents();
6663

67-
if (context != null) {
68-
context.close();
69-
context = null;
64+
if (CONTEXT != null) {
65+
CONTEXT.close();
66+
CONTEXT = null;
7067
}
7168
}
7269

7370
public void disableComponents() {
71+
// Invoke disableables
7472
invokeBeans(Disableable.class, Disableable::onDisable, (disableable, e) -> {
7573
logger.severe("Failed to disable " + disableable.getClass().getSimpleName());
7674
logger.severe(e.getMessage());
7775
});
78-
}
7976

77+
// Unregister listeners
78+
HandlerList.unregisterAll(this);
79+
80+
// Cancel scheduled tasks
81+
Bukkit.getScheduler().cancelTasks(this);
82+
}
8083

84+
/**
85+
* Reload the plugin by disabling, loading, and enabling it again.
86+
*/
8187
public void reload() {
82-
invokeBeans(Reloadable.class, Reloadable::onReload, (reloadable, e) -> {
83-
logger.severe("Failed to reload " + reloadable.getClass().getSimpleName());
84-
logger.severe(e.getMessage());
85-
});
88+
onDisable();
89+
onLoad();
90+
onEnable();
8691
}
8792

8893
/**
@@ -93,7 +98,7 @@ public void reload() {
9398
* @param <T> the type of the beans
9499
*/
95100
public <T> void invokeBeans(Class<T> clazz, Consumer<T> consumer, BiConsumer<T, Exception> onFailure) {
96-
Collection<T> beans = context.getBeansOfType(clazz).values();
101+
Collection<T> beans = CONTEXT.getBeansOfType(clazz).values();
97102
for (T bean : beans) {
98103
try {
99104
consumer.accept(bean);

moss-velocity/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66

77
def id = 'moss-velocity'
88
def domain = 'games.negative.moss'
9-
def apiVersion = '1.1.0'
9+
def apiVersion = '1.2.0'
1010

1111
repositories {
1212
mavenCentral()

0 commit comments

Comments
 (0)