[ 
https://issues.apache.org/jira/browse/KAFKA-1101?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15853957#comment-15853957
 ] 

Enrico Olivelli commented on KAFKA-1101:
----------------------------------------

Awesome solution! it works, here is my code:

{code}
public class NoExitSecurityManager extends SecurityManager {

    private final SecurityManager wrapped;

    public NoExitSecurityManager() {
        wrapped = null;
    }

    public NoExitSecurityManager(SecurityManager wrapped) {
        this.wrapped = wrapped;
    }

    @Override
    public void checkExit(int status) {
        super.checkExit(status);
        throw new SecurityException("System.exit is disabled on unit tests");

    }

    @Override
    public void checkPermission(Permission perm) {
        if (wrapped == null) {
            return;
        }
        wrapped.checkPermission(perm);
    }

}
{code}


Using JUnit it is simple to add this fake SecurityManager

{code}
    @BeforeClass
    public static void disableSystemExit() {
        System.setSecurityManager(new NoExitSecurityManager());
    }
{code}

I found a similar security manager in Groovy code

> Need better java api for embedding kafkaserver in a java container app
> ----------------------------------------------------------------------
>
>                 Key: KAFKA-1101
>                 URL: https://issues.apache.org/jira/browse/KAFKA-1101
>             Project: Kafka
>          Issue Type: Bug
>            Reporter: Jason Rosenberg
>
> We embed the KafkaServer inside a java service container framework, which 
> makes it easy to deploy and monitor within our infrastructure.  When 
> upgrading to kafka 0.8 from 0.7.2, I ran into an issue with not being able to 
> pass the needed constructor arg (SystemTime), since there doesn't appear to 
> be an easy way to instantiate that from java.  So, I ended up with this janky 
> solution using SystemTime$.MODULE$.
> Could a default constructor be added which assumes a default SystemTime, 
> rather than requiring that here?
> Note, I need to construct a KafkaServer directly, since I need to manage the 
> lifecycle more directly than can be done with KafkaServerStartable.
> {code}
>       // Need to do janky scala MODULE$ dereferencing, in order to get a 
> default value in ctor
>       server = new kafka.server.KafkaServer(kafkaConfig, SystemTime$.MODULE$);
>       server.startup();
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to