[New] injecting ComponentContainer into Services at execution time

This commit is contained in:
Robert von Burg 2013-12-28 10:29:43 +01:00
parent 66920308d0
commit 19c7a120ca
3 changed files with 27 additions and 9 deletions

View File

@ -17,18 +17,33 @@ package li.strolch.service;
import java.text.MessageFormat;
import li.strolch.runtime.agent.api.ComponentContainer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Robert von Burg <eitch@eitchnet.ch>
*
*/
public abstract class AbstractService<T extends ServiceArgument, U extends ServiceResult> implements Service<T, U> {
protected static final Logger logger = LoggerFactory.getLogger(AbstractService.class);
private static final long serialVersionUID = 1L;
private ComponentContainer container;
/**
* @return the container
*/
protected ComponentContainer getContainer() {
return this.container;
}
@Override
public void setContainer(ComponentContainer container) {
this.container = container;
}
@Override
public final U doService(T argument) {

View File

@ -42,6 +42,13 @@ public class DefaultServiceHandler extends StrolchComponent implements ServiceHa
super(container, componentName);
}
@Override
public void initialize(ComponentConfiguration configuration) {
if (getContainer().hasComponent(StrolchPrivilegeHandler.class))
this.privilegeHandler = getContainer().getComponent(StrolchPrivilegeHandler.class);
super.initialize(configuration);
}
@Override
public <U extends ServiceResult> U doService(Certificate certificate, Service<ServiceArgument, U> service) {
return doService(certificate, service, null);
@ -67,6 +74,7 @@ public class DefaultServiceHandler extends StrolchComponent implements ServiceHa
try {
// then perform the service
service.setContainer(getContainer());
U serviceResult = service.doService(argument);
// log the result
@ -90,11 +98,4 @@ public class DefaultServiceHandler extends StrolchComponent implements ServiceHa
throw new StrolchException(msg, e);
}
}
@Override
public void initialize(ComponentConfiguration configuration) {
if (getContainer().hasComponent(StrolchPrivilegeHandler.class))
this.privilegeHandler = getContainer().getComponent(StrolchPrivilegeHandler.class);
super.initialize(configuration);
}
}

View File

@ -17,13 +17,15 @@ package li.strolch.service;
import java.io.Serializable;
import li.strolch.runtime.agent.api.ComponentContainer;
import ch.eitchnet.privilege.model.Restrictable;
/**
* @author Robert von Burg <eitch@eitchnet.ch>
*
*/
public interface Service<T extends ServiceArgument, U extends ServiceResult> extends Serializable, Restrictable {
public U doService(T argument);
public void setContainer(ComponentContainer container);
}