Я создал рабочее приложение джерси RESTful, строить как JAR, который имеет локальный модуль классов с основным классом Converter
, который содержит такие функции, как public static Pipe fromDNAtoRNA(String chr, int start, int end, Strand str)
, и имеет public static void main(String[] args)
, который работает Converter.register()
, который инициализирует локальные объекты с использованием удаленных хранилищ, и Converter.runJettyServer()
, что создает сервер Причала на порт 8080.Отдельные логические приложения потоки и потоки сервлетов в WAR проекта
интерфейс REST находится в классе RestfulConverter
, который только что-то заворачивает функцию Converter
. Вот пример:
@GET
@Path("/from/dna/chr/{chr-num}/strand/{str-type}/{start}..{end}/to/rna")
@Produces("application/javascript")
public String doDNA2RNA(@PathParam("chr-num") String chr,
@PathParam("str-type") int str, @PathParam("start") int start,
@PathParam("end") int end, @QueryParam("callback") String callback) {
Pipe ans = null;
try {
switch (str) {
case 1:
ans = Converter
.fromDNAtoRNA(chr, start, end, Converter.FORWARD); ... }
Теперь мне нужно приложение, чтобы быть WAR файл, который в моем опыте обычно не позволить программисту определить метод main
.
Я использую org.glassfish.jersey.servlet.ServletContainer
как единственный сервлет. Как я должен использовать Converter.register()
для инициализации моих объектов, прежде чем кто-либо сможет использовать интерфейс REST?
Я пытался продлить org.glassfish.jersey.servlet.ServletContainer
с RESTServlet
класса, и переопределить init()
метод, как это (сниппет-1):
public void init() throws ServletException {
super.init();
try {
Converter.main(null);
} catch (DAOException e) {
e.printStackTrace();
}
}
Но это бросает java.lang.NoClassDefFoundError: org/eclipse/jetty/server/Handler
Как я должен подходить к этому?
Что делать, если я хочу обновить свои объекты на некоторый промежуток времени (например, используя Converter.register()
каждые 4 часа без прерывания интерфейсов REST-интерфейса)?
Как отделить логику сервлета/REST от разделов моей прикладной логики с помощью разных потоков?
Должен ли я определить новый загрузчик классов?
У меня нет опыта в определении загрузчиков классов и нескольких потоков, и я попытался найти учебники, но не нашел ничего, что могло бы помочь в моей конкретной ситуации.
EDIT
Вот полный журнал ошибок после того, как в отношении сниппета-1:
May 06, 2015 1:15:36 PM org.apache.catalina.core.ApplicationContext log
SEVERE: StandardWrapper.Throwable
java.lang.NoClassDefFoundError: org/eclipse/jetty/server/Handler
at il.ac.ariel.concord.service.RESTServlet.init(RESTServlet.java:16)
at javax.servlet.GenericServlet.init(GenericServlet.java:158)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1231)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1144)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:817)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1517)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1474)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.server.Handler
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1305)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157)
... 22 more
May 06, 2015 1:15:36 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet Extended Jersey
java.lang.ClassNotFoundException: org.eclipse.jetty.server.Handler
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1305)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157)
at il.ac.ariel.concord.service.RESTServlet.init(RESTServlet.java:16)
at javax.servlet.GenericServlet.init(GenericServlet.java:158)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1231)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1144)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:817)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1517)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1474)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
EDIT 2:
После устранения предыдущих импорта молы сервера на Converter
класса, сниппета -1 работал нормально.
P ost журнал ошибок –
@Deepika: какую информацию вы точно ищете в журнале ошибок? – BalusC
@DeepikaRajani Я добавил журнал – fatsokol