相关疑难解决方法(0)

Weld CDI自定义范围中的种子值

来自Guice背景,我知道可以使用范围从范围中播种对象值.

  scope.seed(Key.get(SomeObject.class), someObject);
Run Code Online (Sandbox Code Playgroud)

我想通过注册一个从a获取值的Bean可以做到这一点AbstractBoundContext,但是从自定义范围中播种一个值的示例似乎很难找到.如何创建一个自定义范围,该范围可以为可以注入其他位置的值提供种子?

编辑: 我目前正在使用以下解决方法,可以在拦截器中注入以设置Configuration何时进入范围,然后可以通过其线程本地提供程序注入.我仍然在寻找那些感觉不那么hacky /与Weld中的范围/范围上下文系统更加集成的选项.

@Singleton
public class ConfigurationProducer {

    private final InheritableThreadLocal<Configuration>  threadLocalConfiguration =
    new InheritableThreadLocal<>();

    @Produces
    @ActiveDataSet
    public ConfigurationConfiguration() {
       return threadLocalConfiguration.get()
    }

    public void setConfiguration(Configuration configuration) {
         threadLocalConfiguration.set(configuration);
    }    

}
Run Code Online (Sandbox Code Playgroud)

cdi weld weld2

7
推荐指数
1
解决办法
285
查看次数

Java批处理:如何将数据从一个步骤传递到另一步骤?

在我的JBeret Java批处理作业中,我需要将参数从一个步骤传递到下一步。到目前为止,我只是想通过JobContext.setTransientUserData()做到这一点。

我的问题是:transientUserData方法是最佳实践方法还是有更好的替代方法?在批处理步骤之间传递参数是普遍的,还是在这方面应该自给自足的步骤?

java java-ee java-batch jberet

3
推荐指数
1
解决办法
1034
查看次数

我可以创建一个请求范围的对象并从任何地方访问它,并避免将其作为参数传递给JAX-RS吗?

假设我有一个Web服务/一个使用某些HTTP标头参数调用的REST资源。resource方法构建一个复杂的数据对象(当前为POJO),并最终将其返回给客户端(通过Gson作为JSON,但这无关紧要)。

所以我有这个调用层次结构:

@Path(foo) ProjectResource @GET getProject()
-> new Project()
-> new List<Participant> which contains lots of new Participant()s
-> new Affiliation()
Run Code Online (Sandbox Code Playgroud)

如果我想Affiliation根据标题参数以英语或德语填充对象,则必须将其作为参数传递给链下。我想避免这样做。也许这从根本上讲是不可能的,但是感觉太不对了。所有这些对象仅存在于请求中,因此能够从任何地方访问与请求相关的信息是否方便?

我希望我可以例如定义一个CDI @RequestScoped对象,该对象会初始化自身(或由某些WebFilter填充),然后可以在可能需要的位置注入。

但是显然,这在POJO内部是行不通的,而且我也很难从请求范围的对象内部获取标头。

我已经阅读了许多关于EJB,JAX-RS上下文和CDI的SO问题/答案,但是我无法解决。

我期望太多了吗?传递参数确实是首选选项吗?

jax-rs cdi

0
推荐指数
1
解决办法
968
查看次数

标签 统计

cdi ×2

java ×1

java-batch ×1

java-ee ×1

jax-rs ×1

jberet ×1

weld ×1

weld2 ×1