/** * Use this method when the shell is being executed as a top level shell. * * @param args * @throws Exception */ public void run(String args[]) throws Exception { ThreadIOImpl threadio = new ThreadIOImpl(); threadio.start(); ClassLoader cl = Main.class.getClassLoader(); // This is a workaround for windows machines struggling with long class paths. loadJarsFromPath(new File(System.getProperty(KARAF_HOME), "system")); loadJarsFromPath(new File(System.getProperty(KARAF_HOME), "deploy")); CommandProcessorImpl commandProcessor = new CommandProcessorImpl(threadio); discoverCommands(commandProcessor, cl); InputStream in = unwrap(System.in); PrintStream out = wrap(unwrap(System.out)); PrintStream err = wrap(unwrap(System.err)); run(commandProcessor, args, in, out, err); }
@Override public void start(final BundleContext context) throws Exception { threadIO = new ThreadIOImpl(); threadIO.start(); sessionFactory = new SecuredSessionFactoryImpl(context, threadIO); sessionFactory.getCommandProcessor().addConverter(new Converters(context)); sessionFactory .getCommandProcessor() .addConstant(".context", context.getBundle(0).getBundleContext()); final CopyOnWriteArraySet<CommandLoggingFilter> listeners = new CopyOnWriteArraySet<>(); filterTracker = new ServiceTracker<>( context, CommandLoggingFilter.class, new ServiceTrackerCustomizer<CommandLoggingFilter, CommandLoggingFilter>() { @Override public CommandLoggingFilter addingService( ServiceReference<CommandLoggingFilter> reference) { CommandLoggingFilter service = context.getService(reference); listeners.add(service); return service; } @Override public void modifiedService( ServiceReference<CommandLoggingFilter> reference, CommandLoggingFilter service) {} @Override public void removedService( ServiceReference<CommandLoggingFilter> reference, CommandLoggingFilter service) { listeners.remove(service); context.ungetService(reference); } }); filterTracker.open(); LoggingCommandSessionListener loggingCommandSessionListener = new LoggingCommandSessionListener(); loggingCommandSessionListener.setFilters(listeners); sessionFactory.getCommandProcessor().addListener(loggingCommandSessionListener); try { EventAdminListener listener = new EventAdminListener(context); sessionFactory.getCommandProcessor().addListener(listener); eventAdminListener = listener; } catch (NoClassDefFoundError error) { // Ignore the listener if EventAdmin package isn't present } sessionFactory.register(new ManagerImpl(sessionFactory, sessionFactory)); sessionFactoryRegistration = context.registerService(SessionFactory.class, sessionFactory, null); actionExtender = new CommandExtender(sessionFactory); actionExtender.start(context); if (Boolean.parseBoolean(context.getProperty(START_CONSOLE))) { localConsoleManager = new LocalConsoleManager(context, sessionFactory); localConsoleManager.start(); } else { LOGGER.info("Not starting local console. To activate set " + START_CONSOLE + "=true"); } }