Browse Source

Failed plugin state added. When plugin failed to start previous state was kept (#364)

tags/release-3.3.0
radeklos 4 years ago
parent
commit
ed1f7fde6e
No account linked to committer's email address

+ 5
- 2
pf4j/src/main/java/org/pf4j/AbstractPluginManager.java View File

@@ -330,11 +330,14 @@ public abstract class AbstractPluginManager implements PluginManager {
log.info("Start plugin '{}'", getPluginLabel(pluginWrapper.getDescriptor()));
pluginWrapper.getPlugin().start();
pluginWrapper.setPluginState(PluginState.STARTED);
pluginWrapper.setFailedException(null);
startedPlugins.add(pluginWrapper);

firePluginStateEvent(new PluginStateEvent(this, pluginWrapper, pluginState));
} catch (Exception e) {
pluginWrapper.setPluginState(PluginState.FAILED);
pluginWrapper.setFailedException(e);
log.error(e.getMessage(), e);
} finally {
firePluginStateEvent(new PluginStateEvent(this, pluginWrapper, pluginState));
}
}
}

+ 8
- 3
pf4j/src/main/java/org/pf4j/PluginState.java View File

@@ -24,12 +24,12 @@ public enum PluginState {
* The runtime knows the plugin is there. It knows about the plugin path, the plugin descriptor.
*/
CREATED("CREATED"),
/**
* The plugin cannot be used.
*/
DISABLED("DISABLED"),
/**
* The plugin is created. All the dependencies are created and resolved.
* The plugin is ready to be started.
@@ -44,7 +44,12 @@ public enum PluginState {
/**
* The {@link Plugin#stop()} has executed.
*/
STOPPED("STOPPED");
STOPPED("STOPPED"),

/**
* Plugin failed to start.
*/
FAILED("FAILED");

private String status;


+ 14
- 0
pf4j/src/main/java/org/pf4j/PluginWrapper.java View File

@@ -32,6 +32,8 @@ public class PluginWrapper {
private PluginState pluginState;
private RuntimeMode runtimeMode;

private Exception failedException;

Plugin plugin; // cache

public PluginWrapper(PluginManager pluginManager, PluginDescriptor descriptor, Path pluginPath, ClassLoader pluginClassLoader) {
@@ -139,4 +141,16 @@ public class PluginWrapper {
this.pluginFactory = pluginFactory;
}

/**
* Returns the exception with which the plugin fails to start.
* See @{link PluginStatus#FAILED}.
*/
public Exception getFailedException() {
return failedException;
}

public void setFailedException(Exception failedException) {
this.failedException = failedException;
}

}

Loading…
Cancel
Save