在jetty中定义webapp加载顺序

在jetty中定义webapp加载顺序,jetty,Jetty,我有两个webapp,可以单独部署,也可以部署在同一个jetty服务器上。在我的情况下,一个webapp必须在另一个webapp完成部署之前进行部署,因此我正在寻找双重部署的解决方案,在这种情况下,我可以定义部署顺序 我使用以下内容定义了一个上下文xml文件: /保安 /安全应用程序/战争/ / /主应用程序/战争/ 但是,使用此解决方案,我得到以下错误: java.lang.ClassCastException: org.eclipse.jetty.server.handler.Handl

我有两个webapp,可以单独部署,也可以部署在同一个jetty服务器上。在我的情况下,一个webapp必须在另一个webapp完成部署之前进行部署,因此我正在寻找双重部署的解决方案,在这种情况下,我可以定义部署顺序

我使用以下内容定义了一个上下文xml文件:


/保安
/安全应用程序/战争/
/
/主应用程序/战争/
但是,使用此解决方案,我得到以下错误:

java.lang.ClassCastException: org.eclipse.jetty.server.handler.HandlerList cannot be cast to org.eclipse.jetty.server.handler.ContextHandler
at org.eclipse.jetty.deploy.providers.WebAppProvider.createContextHandler(WebAppProvider.java:292)
at org.eclipse.jetty.deploy.App.getContextHandler(App.java:101)
at org.eclipse.jetty.deploy.bindings.StandardDeployer.processBinding(StandardDeployer.java:36)
at org.eclipse.jetty.deploy.AppLifeCycle.runBindings(AppLifeCycle.java:186)
at org.eclipse.jetty.deploy.DeploymentManager.requestAppGoal(DeploymentManager.java:498)
at org.eclipse.jetty.deploy.DeploymentManager.addApp(DeploymentManager.java:146)
at org.eclipse.jetty.deploy.providers.ScanningAppProvider.fileAdded(ScanningAppProvider.java:180)
at org.eclipse.jetty.deploy.providers.ScanningAppProvider$1.fileAdded(ScanningAppProvider.java:64)
at org.eclipse.jetty.util.Scanner.reportAddition(Scanner.java:605)
at org.eclipse.jetty.util.Scanner.reportDifferences(Scanner.java:528)
at org.eclipse.jetty.util.Scanner.scan(Scanner.java:391)
at org.eclipse.jetty.util.Scanner.doStart(Scanner.java:313)
当然,这是真的,尽管他们最终都是抽象处理程序。我可能做错了什么,或者有没有其他方法来解决这个问题

使用码头9.2.1


谢谢

您有硬编码部署,不要使用
部署
模块

$ cd my-jetty-base
$ mkdir etc
$ gvim etc/special-deploy.xml
$ echo "etc/special-deploy.xml" >> start.ini
$ ls -F
etc/  special/  start.ini  webapps
$ ls -F special/ 
main.war  security.war
$ cat start.ini
--module=http
jetty.port=8080
--module=deploy
etc/special-deploy.xml
您遇到的异常是
deploy
模块试图查找和部署webapps本身,但未能找到它所期望的
org.eclipse.jetty.server.handler.ContextHandler
条目

解决这一问题的最佳方法是,在部署/初始化期间,不要有相互依赖的单独webapp(这超出了servlet规范的范围)。使
/main\u app/war/
webapp按需初始化,而不是在启动时初始化

现在回到你的具体问题

重要提示:不要直接工作/编辑/运行/配置
${jetty.home}
目录。

${jetty.base}
目录的存在是有原因的,使用它,你会更快乐

对于那些对加载顺序敏感的东西,不要对这些工件使用
deploy
模块。(对于没有加载顺序依赖项的其他Web应用程序,可以安全地使用
deploy
模块)

为了实现这一点,我们将配置一个
${jetty.base}
目录,以便在启动时使用自定义xml文件,并为这些依赖于加载顺序的
WebAppContexts
配置一个
/special/
目录,确保这些上下文未加载,并由
deploy
模块管理

$ cd my-jetty-base
$ mkdir etc
$ gvim etc/special-deploy.xml
$ echo "etc/special-deploy.xml" >> start.ini
$ ls -F
etc/  special/  start.ini  webapps
$ ls -F special/ 
main.war  security.war
$ cat start.ini
--module=http
jetty.port=8080
--module=deploy
etc/special-deploy.xml
special deploy.xml
如下所示


/保安
/特别/安全.战争
/
/特别/主要战争
当您运行时,您将看到以下内容

$ java -jar /path/to/jetty-distribution-9.2.10.v20150310/start.jar 
2015-04-29 12:18:55.929:INFO::main: Logging initialized @275ms
2015-04-29 12:18:56.093:WARN:oejsh.ContextHandler:main: ApprovePathPrefixAliases is not safe for production
2015-04-29 12:18:56.094:WARN:oejsh.ContextHandler:main: ApprovePathPrefixAliases is not safe for production
2015-04-29 12:18:56.097:INFO:oejs.Server:main: jetty-9.2.10.v20150310
2015-04-29 12:18:56.150:INFO:oejw.StandardDescriptorProcessor:main: NO JSP Support for /security, did not find org.eclipse.jetty.jsp.JettyJspServlet
2015-04-29 12:18:56.166:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@751d30f6{/security,file:/tmp/jetty-0.0.0.0-8080-security.war-_security-any-3863723758166154575.dir/webapp/,AVAILABLE}{/home/joakim/examples/load-order-example/special/security.war}
2015-04-29 12:18:56.181:INFO:oejw.StandardDescriptorProcessor:main: NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet
2015-04-29 12:18:56.183:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@4f79a28b{/,file:/tmp/jetty-0.0.0.0-8080-main.war-_-any-2704851460101920295.dir/webapp/,AVAILABLE}{/home/joakim/examples/load-order-example/special/main.war}
2015-04-29 12:18:56.184:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/home/joakim/examples/load-order-example/webapps/] at interval 1
2015-04-29 12:18:56.195:INFO:oejs.ServerConnector:main: Started ServerConnector@4ef6d773{HTTP/1.1}{0.0.0.0:8080}
2015-04-29 12:18:56.196:INFO:oejs.Server:main: Started @542ms
^C2015-04-29 12:19:09.594:INFO:oejs.ServerConnector:Thread-0: Stopped ServerConnector@4ef6d773{HTTP/1.1}{0.0.0.0:8080}
2015-04-29 12:19:09.599:INFO:oejsh.ContextHandler:Thread-0: Stopped o.e.j.w.WebAppContext@4f79a28b{/,file:/tmp/jetty-0.0.0.0-8080-main.war-_-any-2704851460101920295.dir/webapp/,UNAVAILABLE}{/home/joakim/examples/load-order-example/special/main.war}
2015-04-29 12:19:09.602:INFO:oejsh.ContextHandler:Thread-0: Stopped o.e.j.w.WebAppContext@751d30f6{/security,file:/tmp/jetty-0.0.0.0-8080-security.war-_security-any-3863723758166154575.dir/webapp/,UNAVAILABLE}{/home/joakim/examples/load-order-example/special/security.war}

如果不使用部署模块,那么如何让jetty加载上下文xml文件?有命令行选项吗?