当前位置: 首页 > 知识库问答 >
问题:

在泽西岛动态(联合国)部署资源

何华灿
2023-03-14

我需要在Jersey ServletContainer中热部署和取消部署资源。

Set<Class<?>> classes = ...
ResourceConfig config = new ResourceConfig(classes);
container.reload(config);

如果我看一下源代码:

public void reload(final ResourceConfig configuration) {
    try {
        containerListener.onShutdown(this);

        webComponent = new WebComponent(webComponent.webConfig, configuration);
        containerListener = webComponent.appHandler;
        containerListener.onReload(this);
        containerListener.onStartup(this);
    } catch (final ServletException ex) {
        LOGGER.log(Level.SEVERE, "Reload failed", ex);
    }
}

从WebComponent构造函数引发ModelValidationException。之后,任何重新加载的调用都会导致onShutdown方法发生异常,这是由ServiceLocatorImpl的preDestroy方法中的checkState引起的。

我可以通过忽略验证错误来避免异常

ResourceConfig config = new ResourceConfig(classes);
config.property(ServerProperties.RESOURCE_VALIDATION_IGNORE_ERRORS,
    Boolean.TRUE);
container.reload(config);
@Override
public void reload(ResourceConfig configuration) {
    try {
        new WebComponent(new WebServletConfig(this), configuration);
    } catch (ServletException e) {
        LOGGER.log(Level.SEVERE, "Reload failed", e);
        List<ResourceModelIssue> resources = Collections.emptyList();
        throw new ModelValidationException(e.getMessage(), resources);
    }
    super.reload(configuration);
}

共有1个答案

史弘致
2023-03-14

我认为如果不使用支持热部署的servlet容器,这是无法实现的。根据我的经验,这样做的一个好方法是使用支持OSGi的容器。你可以看看月食处女座或阿帕奇卡拉夫。

例如,在OSGi环境中,您可以创建模块(称为bundle),这些模块可以放在扫描文件夹中以在运行时启用功能,或者从文件夹中删除以禁用某些功能。这类似于插件在Eclipse IDE中的工作方式,在Eclipse IDE中,新插件的安装/卸载不一定需要重新启动。

 类似资料:
  • 我目前使用的是球衣 我现在要做的是设置泽西,这样当查询参数进来时(比如缩进),我可以告诉Jackson以“更漂亮的格式,也就是缩进”序列化JSON。您可以通过使用SerializationConfig.Feature.INDENT_OUTPUT配置JSON映射器来轻松地告诉Jackson这样做。 问题是,我如何在每个请求的基础上获取一个queryparam并使用它来修改Jackson的输出?

  • 我决定在这部分替换Web.XML: 我指向servlet容器Jersey,它将接受对REST-Controllers的请求,表明在启动时有必要扫描路径com . skillsimprover . REST examples . REST上的包REST,并表明资源的所有方法和类的基URI都填充了/api/* 从 JAX-RS 2.x 版本开始,可以使用应用程序类或资源配置类来注册包和资源。 我执行了

  • 我有一个简单的项目Spring boot项目。它包含一个基于Jersey的控制器:@Path(“persons”)@products(MediaType.APPLICATION_JSON)公共类PersonsController{ 它返回预期的json响应(网址:http://localhost:PORT/人员): 我的目标是为这个控制器添加Spring云契约测试。我已经添加了所有必需的mvn配置

  • 问题内容: 分析了整个互联网,但无法弄清楚为什么会发生这种情况。我有一个最简单的项目(使用jersey-quickstart- grizzly2原型),并且只有一个Jersey资源。我将Guice用作DI,因为CDI也不想与Jersey合作。问题在于,Guice在注入Jersey的资源时无法解析要使用的类。它在外面很好用,但不适用于泽西岛。这是泽西岛的资源: 传输接口: 它的实现: 遵循Googl

  • 我正在Google应用引擎中部署一个使用Jersey的示例应用程序。然而,当我尝试对REST资源执行GET或POST时,我得到一个-404 NOT FOUND错误。看来我漏掉了什么。 REST资源代码: 我包括了以下几个罐子: Jar Jersey-Client-1.12.Jar Jersey-Core-1.12.Jar Jersey-JSON-1.12.Jar Jersey-Server-1.1