我尝试在IBM Liberty Profile 8.5上使用dropwizard( wiab )部署wizard-in-a-box( dw )应用程序。 5.5,但我遇到了io.dropwizard.util.JarLocation
类的som问题。 wiab将尝试获取包含dw应用程序的Listener类的位置,但由于类中的CodeSource
对象未能执行此操作。 ProtectionDomain
为null
。
klass.getProtectionDomain().getCodeSource().getLocation()
但是,我尝试在Tomcat 8和最新的Liberty Profile v9 beta上进行部署,但它们都运行良好。
Liberty服务器上的两个server.xml文件在功能方面看起来都非常相似。
<?xml version="1.0" encoding="UTF-8"?>
<server description="new server">
<!-- Enable features -->
<featureManager>
<feature>servlet-3.1</feature>
<feature>jsp-2.3</feature>
<feature>el-3.0</feature>
<feature>websocket-1.1</feature>
<feature>localConnector-1.0</feature>
</featureManager>
<!-- To access this server from a remote client add a host attribute to the following element, e.g. host="*" -->
<httpEndpoint id="defaultHttpEndpoint" httpPort="9080" httpsPort="9443" />
<applicationMonitor updateTrigger="mbean" />
<application id="moshpit_war_war_exploded" location="D:\code\moshpit\moshpit-war\target\moshpit" name="moshpit_war_war_exploded" type="war" context-root="/" />
</server>
我尝试从IntelliJ内部部署普通战争和爆炸战争,以及使用带有预制战争的dropin文件夹。 v9 beta版本会很好用,但不是8.5.5.5。
这是包装dw app的Listener类:
@WebListener
public class MoshpitWebApplication extends WebApplication<MoshpitConfiguration> {
private static final Logger LOGGER = LoggerFactory.getLogger(MoshpitWebApplication.class);
public MoshpitWebApplication() {
super(new MoshpitApplication(), "/configuration/moshpit.yml");
}
}
这是我的dw Application类
public class MoshpitApplication extends Application<MoshpitConfiguration> {
public MoshpitApplication() {
}
public static void main(String[] args) throws Exception {
new MoshpitApplication().run(args);
}
@Override
public String getName() {
return "moshpit";
}
@Override
public void initialize(Bootstrap<MoshpitConfiguration> bootstrap) {
bootstrap.setConfigurationSourceProvider(new FileConfigurationSourceProvider());
// nothing to do yet
}
@Override
public void run(MoshpitConfiguration configuration, Environment environment) throws Exception {
final Template template = configuration.buildTemplate();
environment.healthChecks().register("template", new TemplateHealthCheck(template));
environment.jersey().register(new HelloWorldResource(template));
}
}
更新
这似乎是Liberty 8.5.5.5的一般问题。尝试部署完全不同的应用程序,我观察到相同的行为。应用程序类CodeSource
为null
。
答案 0 :(得分:2)
Liberty概要文件当前未为应用程序类设置CodeSource。正如您所指出的那样,这在当前测试版中得到了解决,并将在6月26日发布8.5.5.6时解决。