将Anotation从JBoss Seam更改为CDI(JEE6)

将Anotation从JBoss Seam更改为CDI(JEE6),jboss,seam,java-ee-6,cdi,Jboss,Seam,Java Ee 6,Cdi,我们正在将我们的应用程序从JBoss Seam迁移到CDI(JEE6),因此我们正在更改一些选项,如@In和@Out,我们发现有很多有用的信息,但我们在尝试找出如何用特定模式替换选项时遇到了一些困难: 在涂脂抹粉中为@涂脂抹粉 @Name("comprobantes")//context name ... @In(create=false,value="autenticadoPOJO",required=false) private UsuarioPOJO autenticadoPOJO

我们正在将我们的应用程序从JBoss Seam迁移到CDI(JEE6),因此我们正在更改一些选项,如@In和@Out,我们发现有很多有用的信息,但我们在尝试找出如何用特定模式替换选项时遇到了一些困难:

在涂脂抹粉中为@涂脂抹粉

@Name("comprobantes")//context name
...
@In(create=false,value="autenticadoPOJO",required=false)
    private UsuarioPOJO autenticadoPOJO;
@Out(scope = ScopeType.SESSION, value = "autenticadoPOJO", required = false)
我们可以使用来自CDI的@Inject,但是如何为这种情况设置上下文变量的名称呢

为“外膏”

@Name("comprobantes")//context name
...
@In(create=false,value="autenticadoPOJO",required=false)
    private UsuarioPOJO autenticadoPOJO;
@Out(scope = ScopeType.SESSION, value = "autenticadoPOJO", required = false)
我读过一些博客,他们说我可以在CDI中使用@products,我们如何设置范围,在添加此anotation之前或之后

非常感谢您的帮助或任何有用的文档。

8.1。生产者方法的范围

producer方法的作用域默认为@Dependent,因此每次容器注入此字段或解析为同一producer方法的任何其他字段时都会调用它。因此,每个用户会话可能有多个PaymentStrategy对象实例

要更改此行为,我们可以向该方法添加@SessionScoped注释

@Produces @Preferred @SessionScoped
public PaymentStrategy getPaymentStrategy() {
   ...
}

恐怕没有什么比1:1的兼容性更适合
@Out

从技术上讲,Seam 2中的
@Out
是由一个用于所有方法调用的拦截器实现的——这是一个相当大的性能瓶颈

在CDI中,大多数托管bean都是代理的,这使得以Seam 2的方式实现outjection在技术上是不可能的

你能做的(实际上你必须做的)是检查
@Out
的所有用法,并用一些@Producer逻辑单独替换它。看看这里。在Seam 2中,您会将经过身份验证的用户排除在会话范围之外,在CDI中,一个小生产者方法(几乎)也会这样做

希望这会给你一个好的开始,请随意提问:)

你可能会发现,该回购协议的wiki和其中的其他文件会很有帮助。