I'm developing a site in JSF
but I'm new to Web
and I do not understand very well how things work. The site is a crud
of simple music and I make calls to other applications in jar
that are in the library to sort the song. The problem is that when I call the method in bean
to add a new song this is giving an error that I can not know what it is or where it comes from. Any information would help a lot.
Advertência: #{musicaBean.adicionar(actionEvent)}: java.lang.IllegalStateException: This web container has not yet been started
javax.faces.FacesException: #{musicaBean.adicionar(actionEvent)}: java.lang.IllegalStateException: This web container has not yet been started
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:415)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282)
at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
at java.lang.Thread.run(Thread.java:745)
Caused by: javax.faces.el.EvaluationException: java.lang.IllegalStateException: This web container has not yet been started
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
... 35 more
Caused by: java.lang.IllegalStateException: This web container has not yet been started
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1674)
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1633)
at clare.Clare.<init>(Clare.java:84)
at br.com.lere.controller.MusicaBean.adicionar(MusicaBean.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at javax.el.ELUtil.invokeMethod(ELUtil.java:332)
at javax.el.BeanELResolver.invoke(BeanELResolver.java:537)
at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256)
at com.sun.el.parser.AstValue.invoke(AstValue.java:283)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
... 36 more
Grave: javax.faces.el.EvaluationException: java.lang.IllegalStateException: This web container has not yet been started
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:415)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282)
at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalStateException: This web container has not yet been started
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1674)
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1633)
at clare.Clare.<init>(Clare.java:84)
at br.com.lere.controller.MusicaBean.adicionar(MusicaBean.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at javax.el.ELUtil.invokeMethod(ELUtil.java:332)
at javax.el.BeanELResolver.invoke(BeanELResolver.java:537)
at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:256)
at com.sun.el.parser.AstValue.invoke(AstValue.java:283)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)
at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
... 36 more
Advertência: StandardWrapperValve[Faces Servlet]: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NullPointerException
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:415)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282)
at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
at java.lang.Thread.run(Thread.java:745)
Class bean:
@ManagedBean
@SessionScoped
public class MusicaBean implements Serializable {
private Musica musica;
private transient DataModel<Musica> listaMusica;
public void prepararAdicionarMusica(ActionEvent actionEvent) {
musica = new Musica();
}
public void prepararMusica(ActionEvent actionEvent) {
musica = (Musica) (listaMusica.getRowData());
}
public String adicionar(ActionEvent actionEvent) throws URISyntaxException {
Clare c = new Clare(musica.getCaminhoxml(),musica.getNome());
musica.setNivel(c.getMusicLevel());
musica.setCaminhomidi(c.getMidiFilePath());
musica.setCaminhoxml(c.getMusicXmlFilePath());
InterfaceMusica dao = new MusicaDao();
dao.inserir(musica);
return "resultado";
}
public String alterar(ActionEvent actionEvent) {
InterfaceMusica dao = new MusicaDao();
dao.alterar(musica);
return "musica";
}
public String excluir(ActionEvent actionEvent) {
File f = new File(musica.getCaminhomidi());
f.delete();
f = new File(musica.getCaminhoxml());
f.delete();
InterfaceMusica dao = new MusicaDao();
dao.remover(musica);
return "musica";
}
public Musica getMusica() {
return musica;
}
public void setMusica(Musica musica) {
this.musica = musica;
}
public DataModel<Musica> getListaMusica() {
List<Musica> lista = new MusicaDao().list();
listaMusica = new ListDataModel(lista);
return listaMusica;
}
public void setListaMusica(DataModel<Musica> listaMusica) {
this.listaMusica = listaMusica;
}
}
MusicaDao class:
public class MusicaDao implements InterfaceMusica {
@Override
public Musica getMusica(int id) {
Session ss = HibernateUtil.getSessionFactory().openSession();
Musica mus = (Musica) ss.load(Musica.class, id);
HibernateUtil.close(ss);
return mus;
}
@Override
public void inserir(Musica musica) {
Session ss = HibernateUtil.getSessionFactory().openSession();
Transaction ts = ss.beginTransaction();
try {
ss.save(musica);
ts.commit();
} catch (Exception ex) {
ts.rollback();
throw ex;
} finally {
HibernateUtil.close(ss);
}
}
@Override
public void alterar(Musica musica) {
Session ss = HibernateUtil.getSessionFactory().openSession();
Transaction ts = ss.beginTransaction();
try {
ss.update(musica);
ts.commit();
} catch (Exception ex) {
ts.rollback();
throw ex;
} finally {
HibernateUtil.close(ss);
}
}
@Override
public void remover(Musica musica) {
Session ss = HibernateUtil.getSessionFactory().openSession();
Transaction ts = ss.beginTransaction();
try {
ss.delete(musica);
ts.commit();
} catch (Exception ex) {
ts.rollback();
throw ex;
} finally {
HibernateUtil.close(ss);
}
}
@Override
public List<Musica> list() {
Session ss = HibernateUtil.getSessionFactory().openSession();
Transaction ts = ss.beginTransaction();
try {
List lista = ss.createQuery("From musica ").list();
ts.commit();
return lista;
} catch (Exception ex) {
ts.rollback();
throw ex;
} finally {
HibernateUtil.close(ss);
}
}
@Override
public List<Musica> listNome() {
Session ss = HibernateUtil.getSessionFactory().openSession();
Transaction ts = ss.beginTransaction();
try {
List lista = ss.createQuery("From musica ORDER BY nome").list();
ts.commit();
return lista;
} catch (Exception ex) {
ts.rollback();
throw ex;
} finally {
HibernateUtil.close(ss);
}
}
@Override
public List<Musica> listNivel() {
Session ss = HibernateUtil.getSessionFactory().openSession();
Transaction ts = ss.beginTransaction();
try {
List lista = ss.createQuery("From musica ORDER BY nivel").list();
ts.commit();
return lista;
} catch (Exception ex) {
ts.rollback();
throw ex;
} finally {
HibernateUtil.close(ss);
}
}
}
Clare class builder (jar):
public Clare(String musicXmlFileSourcePath, String musicName) throws URISyntaxException {
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy_hh-mm-ss");
String time = sdf.format(new Date());
if (!handleXml(time)) {
System.out.println(erro);
return;
} else {
this.musicXmlFilePath = arquivoXML.getAbsolutePath().replace("\", "/");
}
if (!handleMidi(time)) {
System.out.println(erro);
return;
} else {
this.midiFilePath = arquivoMIDI.getAbsolutePath().replace("\", "/");
}
Jsymbolic j = new Jsymbolic();
String line[] = {arquivoMIDI.getAbsolutePath(), arquivoFEATURES.getAbsolutePath(), arquivoDESC.getAbsolutePath()};
try {
if (!j.extract(line)) {
erro = "Erro ao Extrair Características";
System.out.println(erro);
return;
}
} catch (Exception ex) {
erro = ex.toString();
return;
}
AceXmlToArff a = new AceXmlToArff();
if (arquivoFEATURES.exists()) {
try {
a.toArff(arquivoFEATURES, ARQUIVO_ARFF_TESTE);
} catch (Exception ex) {
erro = ex.toString();
System.out.println(erro);
return;
}
} else {
erro = "Erro ao Converter para ARFF: Arquivo Features não existe!";
System.out.println(erro);
return;
}
if (ARQUIVO_ARFF_TESTE.exists()) {
Weka w = new Weka();
try {
w.classify(ARQUIVO_ARFF_TREINAMENTO, ARQUIVO_ARFF_TESTE, ARQUIVO_ARFF_FINAL);
Nivel n = new Nivel();
musicLevel = n.find(ARQUIVO_ARFF_FINAL);
} catch (Exception e) {
erro = e.toString();
System.out.println(erro);
}
} else {
erro = "Erro na Classificação: Arquivo ARFF Teste não existe!";
System.out.println(erro);
}
}
jsymbolic class (jar):
public class Jsymbolic {
public Jsymbolic() {
}
public boolean extract(String[] line) throws IOException {
System.out.println("Extraindo Características...");
CommandLine c = new CommandLine(line);
File f = new File(line[1]);
if(f.exists()){
System.out.println("Extraídas com sucesso!");
return true;
}else{
System.out.println("ERRO");
return false;
}
}
}
CommandLine class (jar):
public class CommandLine
{
/**
* Interprets the command line arguments and begins feature extraction.
*/
public CommandLine(String[] args)
{
// If there are a proper number of command line arguments
if (args.length == 3)
{
extractFeatures(args[0], args[1], args[2], true);
}
// If invalid command line arguments are used
else
{
System.err.println("Incorrest usage of jSymbolic. Proper usage requires one of the following:");
System.err.println("\t1) No arguments: Runs the GUI");
System.err.println("\t2) <SourceMIDIPath> <FeatureValuesOutputPath> <FeatureDescriptionsOutputPath>");
}
}
/**
* Extracts all available features from a single MIDI file. Any errors
* encountered are printed to standard error.
*
* @param input_MIDI_path The path of the MIDI file to
* extract features from.
* @param feature_values_save_path The path to save the resulting
* ACE XML Feature Values file to.
* @param feature_descriptions_save_path The path to save the resulting
* ACE XML Feature Description file
* to.
* @param print_log Whether or not to print a log
* of actions to standard out.
*/
public static void extractFeatures(String input_MIDI_path,
String feature_values_save_path,
String feature_descriptions_save_path,
boolean print_log)
{
try
{
// Note progress
if (print_log) System.out.println("jSymbolic is parsing " + input_MIDI_path + "...");
// Prepare and validate the input file
File input_MIDI_file = new File(input_MIDI_path);
FileMethods.validateFile(input_MIDI_file, true, false);
try {javax.sound.midi.MidiSystem.getSequence(input_MIDI_file);}
catch (javax.sound.midi.InvalidMidiDataException e)
{
throw new Exception(input_MIDI_path + " is not a valid MIDI file.");
}
// Get all available features
MIDIFeatureExtractor[] feature_extractors = FeatureSelectorPanel.getAllAvailableFeatureExtractors(null);
// Choose to extract all features
// NOTE: could instead get defaults isntead by using non-null argument above for FeatureSelectorPanel.getAllAvailableFeatureExtractors() call
boolean[] features_to_save = new boolean[feature_extractors.length];
for (int i = 0; i < features_to_save.length; i++)
features_to_save[i] = true;
// Set the default feature extraction parameters
boolean extract_overall_only = true;
boolean save_features_for_each_window = false;
boolean save_overall_recording_features = true;
double window_size = 1.0;
double window_overlap = 0.0;
// Note progress
if (print_log) System.out.println("jSymbolic is extracting features from " + input_MIDI_path + "...");
// Prepare to extract features
MIDIFeatureProcessor processor = new MIDIFeatureProcessor(extract_overall_only,
window_size,
window_overlap,
feature_extractors,
features_to_save,
save_features_for_each_window,
save_overall_recording_features,
feature_values_save_path,
feature_descriptions_save_path );
// Extract features from the MIDI file and save them in an XML file
processor.extractFeatures(input_MIDI_file);
// Finalize saved XML files
processor.finalize();
// Note progress
if (print_log) System.out.println("jSymbolic succesfully extracted features from " + input_MIDI_path + "...");
}
catch (Throwable t)
{
// Print a preparatory error message
System.err.println("JSYMBOLIC ERROR WHILE PROCESSING " + input_MIDI_path + ":");
// React to the Java Runtime running out of memory
if (t.toString().startsWith("java.lang.OutOfMemoryError"))
{
System.err.println("- The Java Runtime ran out of memory.");
System.err.println("- Please rerun this program with more more assigned to the runtime heap.");
}
else if (t instanceof Exception)
{
Exception e = (Exception) t;
System.err.println("- " + e.getMessage());
// e.printStackTrace(System.err);
}else{
System.err.println("- " + t.toString());
}
}
}
}
The error usually happens inside the CommandLine or soon after.