@@ -171,32 +171,42 @@ public boolean accept(Path entry) throws IOException {
171171 })) {
172172 String interpreterDirString = interpreterDir .toString ();
173173
174- registerInterpreterFromPath (interpreterDirString , interpreterJson );
175-
176- registerInterpreterFromResource (cl , interpreterDirString , interpreterJson );
177-
178- /*
179- * TODO(jongyoul)
180- * - Remove these codes below because of legacy code
181- * - Support ThreadInterpreter
174+ /**
175+ * Register interpreter by the following ordering
176+ * 1. Register it from path {ZEPPELIN_HOME}/interpreter/{interpreter_name}/
177+ * interpreter-setting.json
178+ * 2. Register it from interpreter-setting.json in classpath
179+ * {ZEPPELIN_HOME}/interpreter/{interpreter_name}
180+ * 3. Register it by Interpreter.register
182181 */
183- URLClassLoader ccl = new URLClassLoader (recursiveBuildLibList (interpreterDir .toFile ()), cl );
184- for (String className : interpreterClassList ) {
185- try {
186- // Load classes
187- Class .forName (className , true , ccl );
188- Set <String > interpreterKeys = Interpreter .registeredInterpreters .keySet ();
189- for (String interpreterKey : interpreterKeys ) {
190- if (className
191- .equals (Interpreter .registeredInterpreters .get (interpreterKey ).getClassName ())) {
192- Interpreter .registeredInterpreters .get (interpreterKey )
193- .setPath (interpreterDirString );
194- logger .info ("Interpreter " + interpreterKey + " found. class=" + className );
195- cleanCl .put (interpreterDirString , ccl );
182+ if (!registerInterpreterFromPath (interpreterDirString , interpreterJson )) {
183+ if (!registerInterpreterFromResource (cl , interpreterDirString , interpreterJson )) {
184+ /*
185+ * TODO(jongyoul)
186+ * - Remove these codes below because of legacy code
187+ * - Support ThreadInterpreter
188+ */
189+ URLClassLoader ccl = new URLClassLoader (
190+ recursiveBuildLibList (interpreterDir .toFile ()), cl );
191+ for (String className : interpreterClassList ) {
192+ try {
193+ // Load classes
194+ Class .forName (className , true , ccl );
195+ Set <String > interpreterKeys = Interpreter .registeredInterpreters .keySet ();
196+ for (String interpreterKey : interpreterKeys ) {
197+ if (className
198+ .equals (Interpreter .registeredInterpreters .get (interpreterKey )
199+ .getClassName ())) {
200+ Interpreter .registeredInterpreters .get (interpreterKey )
201+ .setPath (interpreterDirString );
202+ logger .info ("Interpreter " + interpreterKey + " found. class=" + className );
203+ cleanCl .put (interpreterDirString , ccl );
204+ }
205+ }
206+ } catch (Throwable t ) {
207+ // nothing to do
196208 }
197209 }
198- } catch (Throwable t ) {
199- // nothing to do
200210 }
201211 }
202212 }
@@ -277,7 +287,7 @@ private Properties convertInterpreterProperties(Map<String, InterpreterProperty>
277287 return properties ;
278288 }
279289
280- private void registerInterpreterFromResource (ClassLoader cl , String interpreterDir ,
290+ private boolean registerInterpreterFromResource (ClassLoader cl , String interpreterDir ,
281291 String interpreterJson ) throws IOException , RepositoryException {
282292 URL [] urls = recursiveBuildLibList (new File (interpreterDir ));
283293 ClassLoader tempClassLoader = new URLClassLoader (urls , cl );
@@ -289,10 +299,12 @@ private void registerInterpreterFromResource(ClassLoader cl, String interpreterD
289299 List <RegisteredInterpreter > registeredInterpreterList =
290300 getInterpreterListFromJson (inputStream );
291301 registerInterpreters (registeredInterpreterList , interpreterDir );
302+ return true ;
292303 }
304+ return false ;
293305 }
294306
295- private void registerInterpreterFromPath (String interpreterDir , String interpreterJson )
307+ private boolean registerInterpreterFromPath (String interpreterDir , String interpreterJson )
296308 throws IOException , RepositoryException {
297309
298310 Path interpreterJsonPath = Paths .get (interpreterDir , interpreterJson );
@@ -301,7 +313,9 @@ private void registerInterpreterFromPath(String interpreterDir, String interpret
301313 List <RegisteredInterpreter > registeredInterpreterList =
302314 getInterpreterListFromJson (interpreterJsonPath );
303315 registerInterpreters (registeredInterpreterList , interpreterDir );
316+ return true ;
304317 }
318+ return false ;
305319 }
306320
307321 private List <RegisteredInterpreter > getInterpreterListFromJson (Path filename )
0 commit comments