相关疑难解决方法(0)

支持bean(@ManagedBean)或CDI Beans(@Named)?

我刚开始阅读Core JavaServer Faces,第3版.他们这样说(强调我的):

对于可以在JSF页面中使用的bean,有两种不同的机制,CDI bean和JSF托管bean,这是一个历史事故.我们建议您使用CDI bean,除非您的应用程序必须在像Tomcat这样的普通servlet运行器上运行.

为什么?他们没有提供任何理由.我一直在使用@ManagedBean在GlassFish 3上运行的原型应用程序中的所有bean,我还没有发现任何问题.我不介意迁移@ManagedBean@Named,但我想知道为什么我应该打扰.

jsf java-ee cdi jsf-2

106
推荐指数
3
解决办法
7万
查看次数

CDI和EJB如何比较?相互作用?

我很难理解两者如何相互作用以及它们之间的界限在哪里.它们是否重叠?他们之间有冗余吗?

我知道有两个注释都有关联,但我无法通过简短的描述找到两者的完整列表.不确定这是否有助于弄清楚它们之间的区别或重叠的位置.

真的只是困惑.我(我认为)合理地理解EJB,我想我很难理解CDI带来的确切内容以及它如何取代或增强EJB已经提供的内容.

java ejb cdi java-ee-6

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

为什么有不同的bean管理注释

有什么区别

import javax.annotation.ManagedBean;
import javax.enterprise.context.SessionScoped;
Run Code Online (Sandbox Code Playgroud)

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
Run Code Online (Sandbox Code Playgroud)

jsf cdi managed-bean

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

如何在Tomcat上安装和使用CDI?

我正在创建我的第一个项目Java EE 7,但我遇到了麻烦.感谢任何帮助.

  • Tomcat 7.0.34
  • JSF 2.2
  • Primefaces 3.5
  • JavaEE的-API-7.0.jar

应用程序启动时,Tomcat日志显示以下消息:

"validateJarFile (C:\...\build\web\WEB-INF\lib\javaee-api-7.0.jar)-jar not loaded. See Servlet 2.3 Spec, section 9.7.2. Offending class: javax/servlet/Servlet .class"
Run Code Online (Sandbox Code Playgroud)

当我点击调用托管bean的按钮时,我收到错误:

Advertência: /index.xhtml @18,66 value="#{indexMB.user}": Target Unreachable, identifier 'indexMB' resolved to null
javax.el.PropertyNotFoundException: /index.xhtml @18,66 value="#{indexMB.user}": Target Unreachable, identifier 'indexMB' resolved to null
Run Code Online (Sandbox Code Playgroud)

IndexMB

@Named("indexMB")
@RequestScoped
public class IndexMB {

private String password;
private String user;

public String loginTest(){
    return (this.user.equals("admin") ? "adminPage" : "inOutPage");
}

// getters and setters
}
Run Code Online (Sandbox Code Playgroud)

的index.xhtml

<html ...>

<f:loadBundle …
Run Code Online (Sandbox Code Playgroud)

jsf tomcat cdi jsf-2.2

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

Java EE 6:使用依赖项控制托管bean的启动:CDI,EJB

我刚刚阅读了各种托管bean及其关于Java EE 6 @ javax.annotation.ManagedBean与@ javax.inject.Named与@ javax.faces.ManagedBean的关系的非常好的解释,因为我面临一个烦人的问题.应用程序我想知道是否可以控制或影响bean的启动方式和方式.

在我的Java EE应用程序中,我使用EJB,CDI和JSF2作为视图技术.通过SPI启动来自第三方的服务,它配置一个作业执行程序,它启动作业并处理其他与计时器相关的内容.当作业执行程序完成引导时,会立即执行一项任务.此作业使用CDI注入来访问某些bean,其中一个bean使用EJB.

现在的问题是Java EE 6服务器(JBoss 7.1.1)启动EJB的大部分时间仍然不可用,然后作业尝试访问它.抛出异常并且作业失败并构建服务以停用该失败的作业.好吧,停用一个faild工作似乎并不太糟糕.该作业再次启动和运行的唯一解决方案是取消部署并再次重新部署它.遗憾的是,这是一个手动任务,无法以编程方式完成.

并且,为了使事情变得糟糕:在极少数情况下,这不会发生.

所以,我现在的问题是:我可以以某种方式控制EJB和CDI bean的初始化和部署,以便我可以确保在初始化CDI bean之前初始化所有EJB bean吗?

我已经在EARs application.xml中将initialize-in-order设置为true并设置了EJB的顺序,以便它们以我需要的方式初始化(​​EJB核心,然后是EJB业务,然后是WAR),但是基于CDI的服务作为JAR放在lib文件夹中.

cdi ejb-3.0 java-ee-6

4
推荐指数
1
解决办法
6074
查看次数

JSF,CDI和EJB容器:应该使用它们的组合?

我正在阅读这篇文章,这让我有些困惑:在那篇文章中提到了与每个特定容器一起使用的注释:JSF,CDI或EJB容器.

作为一个初学者,我学习了JSF框架并习惯了它的@ManagedBean注释及其可选的name参数,用于从JSF页面引用bean,并且对CDI知之甚少,而我正在使用EJB作为其强大的功能(甚至阅读这篇文章之后,我仍然认为EJB比CDI更强大,功能更强.

所以...... JSF和CDI容器都有自己的注释和在网页上引用bean的方法,但EJB只有@Stateless(或@Stateful),因此无法在网页上引用,这意味着JSF容器必须总是附加EJB(因为我假设混合EJB和CDI容器是荒谬的,因为它们几乎相似但是为了这一点,我希望有人告诉我,如果我错了).

JSF容器的问题在于它

"仍然没有完整和成熟的容器"

正如在那篇文章中说的那样,我知道的最糟糕的事情是在@ManagedBean旁边的Netbeans中发出警告信息:

"javax.faces.bean包中的注释将在下一个JSF版本中被删除.相反,建议使用CDI."

(好吧,这里有另一个注释的替代包:javax.annotation.ManagedBean,但我不知道我是否可以使用它,也不知道它是否有一个参数用于在网页上引用bean以及它是哪一个)

所以现在我开始怀疑未来还应该使用哪种容器组合.CDI + EJB是未来吗?

为所有人喝彩.

ejb java-ee cdi jsf-2

4
推荐指数
1
解决办法
1525
查看次数

CDI豆注射

这是@ApplicationScoped@SessionScopedbean中注入bean 的正确方法吗?这会导致我的应用程序作用域bean存储在每个用户的会话中吗?

我有一个应用程序范围的bean,它包含我们在所有系统用户之间共享的一些值,现在我需要在会话bean的方法中获取这些值.

jsf cdi managed-bean jsf-2.2

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

标签 统计

cdi ×7

jsf ×4

ejb ×2

java-ee ×2

java-ee-6 ×2

jsf-2 ×2

jsf-2.2 ×2

managed-bean ×2

ejb-3.0 ×1

java ×1

tomcat ×1