Skip to content

Instantly share code, notes, and snippets.

@mfernest
Forked from prateek/OozieClientDemo.java
Created February 3, 2016 23:26
Show Gist options
  • Save mfernest/5ceb4d88e66dc3db794c to your computer and use it in GitHub Desktop.
Save mfernest/5ceb4d88e66dc3db794c to your computer and use it in GitHub Desktop.
/**
* Created by prungta on 7/22/15.
*/
import org.apache.oozie.client.AuthOozieClient;
import org.apache.oozie.client.OozieClient;
import org.apache.oozie.client.OozieClientException;
import org.apache.oozie.client.WorkflowJob;
import javax.security.auth.Subject;
import javax.security.auth.login.AppConfigurationEntry;
import javax.security.auth.login.Configuration;
import javax.security.auth.login.LoginContext;
import javax.security.auth.login.LoginException;
import java.io.File;
import java.security.PrivilegedAction;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class OozieClientDemo {
public static void main(String[] args) throws OozieClientException, LoginException {
String trustStore = "oozie-keystore.jks";
System.setProperty("javax.net.ssl.trustStore", trustStore);
final String oozie_url = "https://prungta-m2-2xl-1.vpc.cloudera.com:11443/oozie";
String principal = "[email protected]";
String keytabFilename = "prungta.keytab";
File keytab = new File(keytabFilename);
String krb5_conf = "krb5.conf";
// System.setProperty("sun.security.krb5.debug", "true");
System.setProperty("java.security.krb5.conf", krb5_conf);
final String filter = "";
LoginContext loginContext = null;
Subject subject = null;
subject = new Subject();
loginContext = new LoginContext("", subject, null,
KerberosConfiguration.createClientConfig(principal, keytab));
loginContext.login();
Subject.doAs(subject, new PrivilegedAction<Void>() {
public Void run() {
OozieClient wc = new OozieClient(oozie_url);
List<WorkflowJob> jobs = null;
String shareLib = "";
try {
shareLib = wc.listShareLib("");
jobs = wc.getJobsInfo(filter);
} catch (OozieClientException e) {
e.printStackTrace();
}
for (WorkflowJob job : jobs) {
System.out.printf("Job ID:%s", job.getId());
}
System.out.printf("ShareLib: %s", shareLib);
return null;
}
});
}
private static class KerberosConfiguration extends Configuration {
private String principal;
private String keytab;
private KerberosConfiguration(String principal, File keytab) {
this.principal = principal;
this.keytab = keytab.getAbsolutePath();
}
public static Configuration createClientConfig(String principal,
File keytab) {
return new KerberosConfiguration(principal, keytab);
}
private static String getKrb5LoginModuleName() {
return System.getProperty("java.vendor").contains("IBM")
? "com.ibm.security.auth.module.Krb5LoginModule"
: "com.sun.security.auth.module.Krb5LoginModule";
}
@Override
public AppConfigurationEntry[] getAppConfigurationEntry(String name) {
Map<String, String> options = new HashMap<String, String>();
options.put("keyTab", keytab);
options.put("principal", principal);
options.put("useKeyTab", "true");
options.put("storeKey", "true");
options.put("doNotPrompt", "true");
options.put("refreshKrb5Config", "true");
options.put("isInitiator", "true");
return new AppConfigurationEntry[]{
new AppConfigurationEntry(getKrb5LoginModuleName(),
AppConfigurationEntry.LoginModuleControlFlag.REQUIRED,
options)};
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment