栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

jersey

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

jersey

我们有一个自定义的异步ContextLoader,因此临时解决方案需要在Jersey-Spring3源中放置一个完全hack,以在自定义组件提供程序初始化之前等待应用程序初始化。

PS对于任何发现自己必须执行此类操作的可怜人,请确保meta-INF / settings包含SpringComponentProvider配置。

请注意,这是一个可怕的骇客,只有在所有其他尝试都失败的情况下,我才尝试尝试最后的手段,例如我的情况。另外,在尝试此类操作之前,我会咨询泽西岛邮寄小组有关你的问题的信息。

就是说…这就是我为解决我的问题所做的:

  • 从字面上将spring-jersey3的源代码复制到我的应用程序/服务器中,并根据许可证使用适当的标签修改每个文件的标题;

  • 创建了以下类

===>

    public class ContextLoadWaiter {    private static final Logger logger = Logger.getLogger(ContextLoadWaiter.class);    public void doWait() {      try {        while (ContextLoaderHttpInterceptor.isNotStarted()) {          logger.info("Waiting for ContextLoader to start...");          Thread.sleep(1000);        }      } catch (InterruptedException e) {        logger.error("SpringComponentProvider was interrupted!");      }    }  }

请注意,这特定于 our 代码库,就像

ContextLoaderHttpInterceptor
http servlet一样,如果尚未加载我们的自定义(恰好是异步的),则
isNotStarted
返回。
trueContextLoader

ContextLoader
出于某种原因,有人在某个时候将自定义异步程序放置在适当的位置,以使服务器启动时允许UI显示“正在加载”页面。(可能不是添加此UI“功能”的正确方法,但是代码在那里并且UI依赖于它,所以我不得不处理它…)

由于这部分内容并不直接适用于你,因此关键是要调试

SpringComponentProvider
(从此处开始)并查看的值
ClassPathXmlApplicationContext
。如果它是null,就像我们的情况一样,那么你需要找出原因,null并ContextLoader在初始化此组件之前等待用于加载的任何内容。

  • 将这条黑线放在SpringComponentProvider

==>

  ...  private final ContextLoadWaiter waiter = new ContextLoadWaiter();  ...  @Override  public void initialize(ServiceLocator locator) {    waiter.doWait(); // Wait on our asynchronous context loader.    this.locator = locator;    if (LOGGER.isLoggable(Level.FINE)) {      LOGGER.fine("Context lookup started");    }    ...
  • 创建了这个文件:

    meta-INF/services/org.glassfish.jersey.server.spi.ComponentProvider
    其内容是SpringComponentProvider的完全限定的类路径,例如
    com.company.server.nbi.rest.internal.jspring.SpringComponentProvider

  • 添加了定制的Jersey-spring3软件包作为要在应用程序中进行扫描的软件包;见下文…

==>

public class MyJerseyApplication extends ResourceConfig {  private static final class Messages {    static final String INF_STARTING_APPLICATION = "Starting %s!";  }  private static final Logger logger = Logger.getLogger(MyJerseyApplication.class);  public MyJerseyApplication() {    packages(        "com.company.server.nbi.rest.providers",        "com.company.server.nbi.rest.filters",        "com.company.server.nbi.rest.internal.jspring", // HERE!!!        "com.fasterxml.jackson.jaxrs.json",        "com.fasterxml.jackson.jaxrs.base");        register(ResourceA.class);    register(ResourceB.class);    register(ResourceC.class);        register(MultiPartFeature.class);    register(LoggingFilter.class);    logger.info(format(Messages.INF_STARTING_APPLICATION, this.getClass().getName()));  }}

而已”。绝对不是值得骄傲的解决方案,但是如果你像我一样处于绝望状态,试一下可能不会有任何伤害。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/375936.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号