标签: jboss-weld

WELD-000072声明钝化范围的管理bean必须具有钝化功能

我在java Web表单中编写了一个简单的程序但是我收到以下错误:

WELD-000072声明钝化范围的管理bean必须具有钝化功能.Bean:BeanPakage.DemoBeans带有限定符[ @Any @Default @Named]的托管Bean [类]

谁能告诉我这个错误来自哪里?

import javax.enterprise.context.SessionScoped;
import javax.inject.Named;


@Named("DemoBeans")
@SessionScoped
public class DemoBeans {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
Run Code Online (Sandbox Code Playgroud)

java cdi jboss-weld

77
推荐指数
4
解决办法
5万
查看次数

CDI:beans.xml,我在哪里放你?

我使用Weld作为CDI实现.当我有空的beans.xml时,我试图组装实例化Weld容器的对象图的集成测试运行良好src/test/java/META-INF/beans.xml.这是一个简单的测试:

public class WeldIntegrationTest {
    @Test
    public void testInjector() {
        new Weld().initialize();
        // shouldn't throw exception
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我跑步时mvn clean install,我总是得到:Missing beans.xml file in META-INF!

我的根文件夹是"src"和"web",其中包含WEB-INF文件夹,但我也尝试使用默认的maven结构并将"web"重命名为"webapp"并将其移至src/main.我尝试了所有合理的位置:

 - src/main/java/META-INF/beans.xml
 - src/test/java/META-INF/beans.xml
 - web/WEB-INF/beans.xml
 - src/main/webapp/WEB-INF/beans.xml
 - src/main/webapp/META-INF/beans.xml
 - src/main/webapp/META-INF/(empty) and src/main/webapp/WEB-INF/beans.xml
Run Code Online (Sandbox Code Playgroud)

到目前为止没有任何作用:/

java java-ee maven cdi jboss-weld

58
推荐指数
2
解决办法
4万
查看次数

Google Guice vs. JSR-299 CDI/Weld

Weld,JSR-299上下文和依赖注入参考实现,认为自己是Spring和Guice的一种继承者.

CDI受到许多现有Java框架的影响,包括Seam,Guice和Spring.但是,CDI有其独特的特性:比Seam更安全,比Spring更有状态,更少以XML为中心,比Guice更具Web和企业应用程序能力.但是,如果没有JSR-299专家组(EG)提到的框架和许多合作和辛勤工作的灵感,它就不可能是其中任何一个.

http://docs.jboss.org/weld/reference/latest/en-US/html/1.html

与Guice相比,是什么让Weld更有能力进行企业应用?与Guice相比有什么优点或缺点吗?与Weld拦截器相比,你对Guice AOP有什么看法?性能怎么样?

我的选择

最后我决定使用Guice,因为我喜欢干净的编程模型,除了@Inject之外,它几乎没有注释.使用Guice的外部库比使用CDI容易得多.Guice也很简单.

java aop dependency-injection cdi jboss-weld

57
推荐指数
5
解决办法
2万
查看次数

由于CDI/Weld中的@Named,@ ManagedBeans在JavaEE6中是否已过时?

由于CDI(及其实现Weld),JEE6中的每个POJO都可以注释@Named,这使得POJO可以被视图访问.

这是否意味着ManagedBeans现在已经完全过时了?还是我错过了@ManagedBean仍然有意义的东西?

jsf java-ee jsf-2 jboss-weld

41
推荐指数
4
解决办法
2万
查看次数

在CDI中注入对象列表(焊接)

比方说,我有一个名为接口SocialNetworkService,以及三种实现- TwitterService,FacebookServiceFriendFeedService.

现在我希望,只要我的托管bean(或任何Web组件)收到消息,就可以在所有社交网络中共享它.我试过了:

@Inject private List<SocialNetworkService> socialNetworkServices;
Run Code Online (Sandbox Code Playgroud)

但它不起作用(部署错误).(也尝试了@Any限定符 - 相同的结果)

那么,有没有办法注入接口的所有(或某些)实现的列表?

我知道给定注入点不应该有多个可能的bean的规则.我想我可以通过制作一个生成列表和使用的生产者来实现这一目标Instance<SocialNetworkService>,但这对于这项任务来说似乎太多了.

java cdi jboss-weld

38
推荐指数
1
解决办法
1万
查看次数

33
推荐指数
3
解决办法
2万
查看次数

Maven Eclipse Debug"JDWP Transport dt_socket初始化失败,TRANSPORT_INIT(510)"

我正在尝试在Eclipse中调试Maven测试.当我使用maven选项maven.surefire.debug启动测试时,我收到此错误:

ERROR: transport error 202: bind failed: Address already in use
FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [../../../src/share/back/debugInit.c:690]
/bin/sh: line 1: 27500 Abort trap        
Run Code Online (Sandbox Code Playgroud)

当我尝试在我的shell中启动调试时,它是一样的.

我试图添加maven选项forkMode = never,如果没有maven.surefire.debug选项,我的焊接工件会出现另一个错误:

Error loading Weld bootstrap, check that Weld is on the classpath
Run Code Online (Sandbox Code Playgroud)

但是,Weld在我的课堂上.

有任何想法吗 ?

java eclipse debugging maven jboss-weld

32
推荐指数
4
解决办法
6万
查看次数

什么是Weld,JSR-299?

我发现了许多显示Weld代码示例的教程,但没有介绍性的概述.

您能否请一篇介绍性文章,或回答以下问题:

  • Weld做什么/给你什么?
  • 它与Java EE 6有什么关系?
  • 如何在Java EE 6项目中使用它?
  • 如果在Java EE 6项目中使用它,它取代了什么,如果有的话?

java-ee cdi java-ee-6 jboss-weld

29
推荐指数
1
解决办法
1万
查看次数

JSF 2.0:为selectOneMenu使用Enum值

我正在使用JSF 2.0,并希望用我的Enum的值填充selectOneMenu.一个简单的例子:

// Sample Enum
public enum Gender {
  MALE("Male"),
  FEMALE("Female");

  private final String label;

  private Gender(String label) {
    this.label = label;
  }

  public String getLabel() {
    return this.label;
  }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不能将Seam用于我当前的项目,该项目有一个很好的<s:convertEnum/>标签可以完成大部分工作.在Seam中,要使用Enum的值,我必须编写以下标记(并创建一个提供以下内容的工厂#{genderValues}:

<!-- the Seam way -->
<h:selectOneMenu id="persongender" value="#{person.gender}">
  <s:selectItems var="_gender" value="#{genderValues}"" label="#{_gender.label}"/>
  <s:convertEnum/>
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)

结果是我不必在标记内明确声明枚举值.我知道在JSF <2.0中这不是很容易,但JSF2中是否有任何新的东西来帮助解决这个问题?或者Weld在某种程度上帮助了吗?如果JSF2中没有新内容,那么在JSF 1.2中最简单的方法是什么?

或者我甚至可以集成Seam JSF标记和相应的Seam类来在JavaEE6-App中获得相同的功能(没有Seam容器)?

jsf java-ee jsf-2 jboss-weld

27
推荐指数
3
解决办法
8万
查看次数

如何创建模块化JSF 2.0应用程序?

我有一个具有良好定义的界面的应用程序.它使用CDI来解析模块,(特别是它使用API​​接口上的Instance <>注入点来解析模块)并通过接口传回各种数据而没有问题.我故意将API和实现分开,并且模块仅从API继承以避免紧密耦合,并且应用程序仅通过运行时依赖性知道模块,并且通过API完成数据传递.应用程序在没有模块的情况下运行正常,只需将jar放入WEB-INF/lib文件夹并重新启动应用服务器即可添加.

我遇到的问题是我希望模块创建视图的一部分,因此我想以可移植的方式调用JSF组件,或者从模块中执行包含以获取它渲染它的观点.我已经解决了我想要调用的模块,并准备好了对模块接口的引用.我最初认为这样做的方法是做一个ui:include要求模块提供它的视图模板的位置,但我不知道如何以有意义的方式回答该查询,因为视图解析是从应用程序完成的root,而不是库根.

执行摘要是我不知道如何使用JSF为.xhtml(模板/组件)文件从应用程序跳到库.

使用CC会很好,但是如何在运行时指定我想要一个特定的CC实例,而不是将其硬编码到页面中?

我当然可以直接调用应用程序代码并要求它进行标记,但这似乎是非常强大的,一旦我有了标记,我就不确定如何告诉JSF来评估它.也就是说,我可以想象一个组件可以获取资源路径,获取标记并对其进行评估,返回完成的标记,我只是不知道如何实现它.

如果可能的话,我宁愿避免强制模块开发人员采用重型UIComponent方法,这意味着要么采用动态方式执行ui:include(或某些等效方法),要么采用动态方式调用CC.(我不介意在应用程序中编写UIComponent方法ONCE,如果这是使模块开发人员的生活更轻松的话)

关于我应该在哪里找出这个问题的任何建议?(如果我先找到答案,我会在这里发布答案)

java modular cdi jsf-2 jboss-weld

25
推荐指数
2
解决办法
1万
查看次数