У меня есть 30 WARs в tomcat, и между ними существует зависимость. Поэтому у нас есть сервлет, чтобы развернуть их последовательно. Теперь я хочу развернуть необходимые приложения сначала последовательно, а затем остальные из них параллельно.Tomcat Многопоточное развертывание с использованием ManagerServlet
Мой код - это что-то вроде ниже.
public class MyDeployerServlet extends ManagerServlet {
...
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
...
if(count < serialContexts){
super.deploy(writer, context, contextName, null, false, sm);
count++;
} else {
MyAsyncDeployer deployer = new MyAsyncDeployer(writer, context, contextName, null, false, sm);
Thread deployerThread = new Thread(deployer);
deployerThread.start();
}
}
MyAsyncDeployer работоспособная код:
public class MyAsyncDeployer extends MyDeployerServlet implements Runnable{
private PrintWriter writer;
private String config;
private ContextName context;
private String war;
private boolean update;
private StringManager sm;
public MyAsyncDeployer(PrintWriter writer, String config, ContextName context, String war, boolean update,
StringManager sm) {
this.writer = writer;
this.config = config;
this.context = context;
this.war = war;
this.update = update;
this.sm = sm;
}
public void run() {
super.deploy(writer, config, context, null, false, sm);
}
Когда я называю это, серийное развертывание идет хорошо, но многопоточные развертывания забросить ниже исключения.
Exception in thread "Thread-9" java.lang.NullPointerException
at javax.servlet.GenericServlet.getServletContext(GenericServlet.java:123)
at javax.servlet.GenericServlet.log(GenericServlet.java:188)
at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:834)
at com.example.servlet.MyAsyncDeployer.run(MyAsyncDeployer.java:30)
at java.lang.Thread.run(Thread.java:745)
Exception in thread "Thread-10" java.lang.NullPointerException
at javax.servlet.GenericServlet.getServletContext(GenericServlet.java:123)
at javax.servlet.GenericServlet.log(GenericServlet.java:188)
at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:834)
at com.example.servlet.MyAsyncDeployer.run(MyAsyncDeployer.java:30)
at java.lang.Thread.run(Thread.java:745)
Я не знаю, что здесь отсутствует, я использую те же ссылки на объекты в своей теме. Если это вообще возможно для развертывания многопоточным способом?
Я также открыт для любого другого подхода, идея состоит в том, чтобы развернуть сначала несколько контекстов последовательно, а затем отдохнуть параллельно. – Pankaj
какие типы зависимостей (jar ...) –
@ Pankaj Я обновил свой ответ, не могли бы вы попробовать еще раз? – qwwdfsad