Liberty Profile 8.5.5.5上的CodeSource

时间:2015-05-20 13:43:37

标签: java websphere dropwizard websphere-liberty

我尝试在IBM Liberty Profile 8.5上使用dropwizard wiab )部署wizard-in-a-box dw )应用程序。 5.5,但我遇到了io.dropwizard.util.JarLocation类的som问题。 wiab将尝试获取包含dw应用程序的Listener类的位置,但由于类中的CodeSource对象未能执行此操作。 ProtectionDomainnull

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的一般问题。尝试部署完全不同的应用程序,我观察到相同的行为。应用程序类CodeSourcenull

1 个答案:

答案 0 :(得分:2)

Liberty概要文件当前未为应用程序类设置CodeSource。正如您所指出的那样,这在当前测试版中得到了解决,并将在6月26日发布8.5.5.6时解决。