Component state - Code cleanup + method reordering
This commit is contained in:
parent
92ebf8dad2
commit
2fa4227e5a
1 changed files with 54 additions and 54 deletions
|
@ -29,7 +29,7 @@ public final class ComponentState
|
||||||
private final ThrowingConsumer[] lcActions;
|
private final ThrowingConsumer[] lcActions;
|
||||||
|
|
||||||
|
|
||||||
ComponentState( ComponentRegistry registry , final NewComponentInfo< ? > ci )
|
ComponentState( final ComponentRegistry registry , final NewComponentInfo< ? > ci )
|
||||||
throws ComponentCreationException
|
throws ComponentCreationException
|
||||||
{
|
{
|
||||||
this.registry = registry;
|
this.registry = registry;
|
||||||
|
@ -58,7 +58,7 @@ public final class ComponentState
|
||||||
this.autostart = ci.getAutostart( );
|
this.autostart = ci.getAutostart( );
|
||||||
|
|
||||||
this.lcActions = new ThrowingConsumer[ 4 ];
|
this.lcActions = new ThrowingConsumer[ 4 ];
|
||||||
for ( LifecycleStage stage : LifecycleStage.values( ) ) {
|
for ( final LifecycleStage stage : LifecycleStage.values( ) ) {
|
||||||
this.lcActions[ stage.ordinal( ) ] = ci.getLifecycleAction( stage );
|
this.lcActions[ stage.ordinal( ) ] = ci.getLifecycleAction( stage );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -67,7 +67,7 @@ public final class ComponentState
|
||||||
@Override
|
@Override
|
||||||
public String toString( )
|
public String toString( )
|
||||||
{
|
{
|
||||||
StringBuilder sb = new StringBuilder( );
|
final StringBuilder sb = new StringBuilder( );
|
||||||
if ( this.name == null ) {
|
if ( this.name == null ) {
|
||||||
sb.append( "anonymous component" );
|
sb.append( "anonymous component" );
|
||||||
} else {
|
} else {
|
||||||
|
@ -98,25 +98,25 @@ public final class ComponentState
|
||||||
|
|
||||||
public Set< ComponentState > getDependencies( )
|
public Set< ComponentState > getDependencies( )
|
||||||
{
|
{
|
||||||
return Collections.unmodifiableSet( dependencies );
|
return Collections.unmodifiableSet( this.dependencies );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void getDependencies( Collection< ComponentState > output )
|
public void getDependencies( final Collection< ComponentState > output )
|
||||||
{
|
{
|
||||||
output.addAll( dependencies );
|
output.addAll( this.dependencies );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Set< ComponentState > getReverseDependencies( )
|
public Set< ComponentState > getReverseDependencies( )
|
||||||
{
|
{
|
||||||
return Collections.unmodifiableSet( reverseDependencies );
|
return Collections.unmodifiableSet( this.reverseDependencies );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void getReverseDependencies( Collection< ComponentState > output )
|
public void getReverseDependencies( final Collection< ComponentState > output )
|
||||||
{
|
{
|
||||||
output.addAll( reverseDependencies );
|
output.addAll( this.reverseDependencies );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -145,7 +145,7 @@ public final class ComponentState
|
||||||
throw new IllegalStateException( "registry is inactive" );
|
throw new IllegalStateException( "registry is inactive" );
|
||||||
}
|
}
|
||||||
|
|
||||||
startNoChecks( );
|
this.startNoChecks( );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -160,8 +160,8 @@ public final class ComponentState
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( ComponentState rdepState : this.reverseDependencies ) {
|
for ( final ComponentState rdepState : this.reverseDependencies ) {
|
||||||
Throwable t = rdepState.stop( );
|
final Throwable t = rdepState.stop( );
|
||||||
if ( t != null ) {
|
if ( t != null ) {
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
@ -169,7 +169,7 @@ public final class ComponentState
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this.runLifecycleAction( LifecycleStage.START );
|
this.runLifecycleAction( LifecycleStage.START );
|
||||||
} catch ( Throwable t ) {
|
} catch ( final Throwable t ) {
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,7 +185,7 @@ public final class ComponentState
|
||||||
throw new IllegalStateException( "registry has failed" );
|
throw new IllegalStateException( "registry has failed" );
|
||||||
}
|
}
|
||||||
|
|
||||||
Throwable t = this.stop( );
|
final Throwable t = this.stop( );
|
||||||
if ( t != null ) {
|
if ( t != null ) {
|
||||||
throw new ComponentRestartException( "failed to stop" , t );
|
throw new ComponentRestartException( "failed to stop" , t );
|
||||||
}
|
}
|
||||||
|
@ -194,20 +194,55 @@ public final class ComponentState
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void setInitialised( final boolean initialised )
|
||||||
|
{
|
||||||
|
this.initialised = initialised;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void setActive( final boolean active )
|
||||||
|
{
|
||||||
|
this.active = active;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void addDependency( final ComponentState dep )
|
||||||
|
{
|
||||||
|
this.dependencies.add( dep );
|
||||||
|
dep.reverseDependencies.add( this );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void runLifecycleAction( final LifecycleStage stage )
|
||||||
|
throws Throwable
|
||||||
|
{
|
||||||
|
@SuppressWarnings( "unchecked" )
|
||||||
|
final ThrowingConsumer< Object > tc = this.lcActions[ stage.ordinal( ) ];
|
||||||
|
|
||||||
|
if ( tc != null ) {
|
||||||
|
try {
|
||||||
|
tc.accept( this.component );
|
||||||
|
} catch ( final FunctionException e ) {
|
||||||
|
throw e.getCause( );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void startNoChecks( )
|
private void startNoChecks( )
|
||||||
throws ComponentStartupException
|
throws ComponentStartupException
|
||||||
{
|
{
|
||||||
if ( this.active ) {
|
if ( this.active ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for ( ComponentState depState : this.dependencies ) {
|
for ( final ComponentState depState : this.dependencies ) {
|
||||||
depState.startNoChecks( );
|
depState.startNoChecks( );
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
this.runLifecycleAction( LifecycleStage.START );
|
this.runLifecycleAction( LifecycleStage.START );
|
||||||
} catch ( ComponentStartupException e ) {
|
} catch ( final ComponentStartupException e ) {
|
||||||
throw e;
|
throw e;
|
||||||
} catch ( Throwable t ) {
|
} catch ( final Throwable t ) {
|
||||||
throw new ComponentStartupException( t );
|
throw new ComponentStartupException( t );
|
||||||
}
|
}
|
||||||
this.active = true;
|
this.active = true;
|
||||||
|
@ -220,50 +255,15 @@ public final class ComponentState
|
||||||
if ( this.wasActive ) {
|
if ( this.wasActive ) {
|
||||||
try {
|
try {
|
||||||
this.startNoChecks( );
|
this.startNoChecks( );
|
||||||
} catch ( ComponentStartupException e ) {
|
} catch ( final ComponentStartupException e ) {
|
||||||
throw new ComponentRestartException( "failed to restart " + this , e );
|
throw new ComponentRestartException( "failed to restart " + this , e );
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( ComponentState rDepState : this.reverseDependencies ) {
|
for ( final ComponentState rDepState : this.reverseDependencies ) {
|
||||||
rDepState.startIfPreviouslyActive( );
|
rDepState.startIfPreviouslyActive( );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void setInitialised( boolean initialised )
|
|
||||||
{
|
|
||||||
this.initialised = initialised;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void setActive( boolean active )
|
|
||||||
{
|
|
||||||
this.active = active;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void addDependency( ComponentState dep )
|
|
||||||
{
|
|
||||||
this.dependencies.add( dep );
|
|
||||||
dep.reverseDependencies.add( this );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void runLifecycleAction( LifecycleStage stage )
|
|
||||||
throws Throwable
|
|
||||||
{
|
|
||||||
@SuppressWarnings( "unchecked" )
|
|
||||||
ThrowingConsumer< Object > tc = this.lcActions[ stage.ordinal( ) ];
|
|
||||||
|
|
||||||
if ( tc != null ) {
|
|
||||||
try {
|
|
||||||
tc.accept( this.component );
|
|
||||||
} catch ( FunctionException e ) {
|
|
||||||
throw e.getCause( );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue