Created
July 22, 2015 23:03
-
-
Save prateek/d62ba06f74025f00ca2e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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