问题标签 [java-ee-6]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
47849 浏览

java - 使用 Enum 类型作为 @RolesAllowed-Annotation 的值参数

我正在开发一个 Java 企业应用程序,目前正在做 Java EE 安全工作,以限制对特定用户的特定功能的访问。我配置了应用程序服务器和所有内容,现在我使用 RolesAllowed-annotation 来保护方法:

当我使用这样的注释时,它工作正常:

但这不是我想要的,因为我必须在这里使用字符串,重构变得很困难,并且可能会发生拼写错误。因此,我不想使用字符串,而是使用枚举值作为此注释的参数。枚举看起来像这样:

所以我尝试使用 Enum 作为这样的参数:

但是随后我得到以下编译器错误,尽管 Enum.name 只返回一个字符串(它始终是常量,不是吗?)。

注解属性 RolesAllowed.value 的值必须是常量表达式`

我尝试的下一件事是在我的枚举中添加一个额外的最终字符串:

但这也不能作为参数工作,导致相同的编译器错误:

我怎样才能实现我想要的行为?我什至实现了自己的拦截器来使用自己的注释,这很漂亮,但是对于这样的小问题来说代码行太多了。

免责声明

这个问题最初是一个Scala问题。我发现 Scala 不是问题的根源,所以我首先尝试在 Java 中执行此操作。

0 投票
3 回答
2817 浏览

jakarta-ee - 在 WAR 打包的应用程序的 @FacesConverter/Validator 中获取 Entitymanager/EJB

我有一个 JavaEE6 应用程序在 Glassfish v3.0.1 和 EJB 3.1 上运行(应用程序打包为 WAR),我所有的 EJB 都是 @LocalBeans。目前,我正在编写一个用于 JSF2 的 FacesConverter,其中我需要 EntityManager 从一个 id 中获取一个实体。

现在我想知道,既然我们在 JEE6 上,那么在 FacesConverter 中获取 Entitymanager的最佳和最干净的方法是什么?或者我什至可以通过表达式语言访问 EJB?并且 Weld/CDI 在 FacesConverter 中不起作用,是吗?

抱歉,我希望这不是重复的,但我看到的大多数情况略有不同,对我没有多大帮助。

0 投票
2 回答
1351 浏览

java - 模块化应用程序 (JPA) 的单个持久性单元

我想创建一个使用 JPA 作为其持久性抽象的模块化(类似插件)应用程序,并且该应用程序应该可以由第三方扩展。

问题是我希望这个应用程序及其插件能够轻松移植到其他数据库/JPA 提供程序,因此第三方供应商对使用的 JPA 提供程序(或数据库连接)一无所知,他们只能扩展持久层通过定义要存储在主应用程序持久性单元中的新实体(这将允许切换数据库而无需重新配置每个模块以指向新数据库)。

我可以用 JPA 做类似的事情吗?我可以使用 .NET 的 nHibernate(也可能使用 Hibernate)轻松完成,但我更喜欢针对 JPA 进行编程,因为我在 Java EE 环境中。

0 投票
2 回答
13895 浏览

java - EJB 3.1 应用程序仅部署为 WAR:ejb-jar.xml 怎么样?

我有一个 JavaEE6 应用程序,由 Web 内容和 EJB 组成,并且仅部署为 WAR(使用 EJB3.1)。该构建基于 Maven。我刚刚读到了一种在 Java EE 6 中订购模块初始化的新可能性我的应用程序也需要它。另外,我希望有一个选项可以在 XML 中定义一些 EJB 属性。

由于该示例部署为 EAR 项目,因此在 application.xml 中定义了订单。但是在一个 WAR 部署的项目中,没有 application.xml。现在我想知道我在哪里可以定义这些信息?或者是否可以在 WAR 部署的应用程序中以某种方式使用 application.xml?

编辑:

糟糕,我没有正确阅读模块顺序示例,一开始我认为这是关于我的应用程序中的 EJB 的加载顺序。当然,我的 WAR 应用程序中只有一个模块,所以订购没有意义。

好的,但是就我而言,还有一个大问题(也更改了问题标题以反映变化):ejb-jar.xml 怎么样?我可以以某种方式在 XML 中定义关于我的 EJB 的东西(因为它对某些设置很有用,以避免重新编译)?

0 投票
2 回答
1527 浏览

jakarta-ee - JavaEE 安全,访问受限页面:已注销的用户被正确重定向。登录的用户不是

我的应用程序是一个 Java EE 6 应用程序,在 Glassfish 3.0.1 上运行。

我正在使用带有 JDBC 领域的 Java EE Security。所以我对我的一些网页添加了限制。我在 web.xml 中添加了以下登录配置和安全约束:

如果用户注销,这可以正常工作。如果他试图访问 /deanery/ 中的页面,他会被重定向到 index.jsp(重定向到 jsf)。

当用户登录并获得正确的角色时,他可以成功访问受限资源。所以一切都很好,直到这里。

现在的问题:当具有较少权限的用户(在我的示例中为学生)登录应用程序并尝试访问受限页面时,他不会被重定向到我的 web.xml 中配置的错误页面。相反,他看到的是一个丑陋的 Glassfish 403 页面:

HTTP 状态 403 - 访问请求的资源已被拒绝

不幸的是,似乎没有选项可以在我的CustomExceptionHandler中捕获异常。它甚至没有显示在我的 server.log 中(尽管我切换到了最好的级别)。

我该怎么做才能将用户重定向到我的错误页面,而不是显示 403 页面?为什么用户没有被重定向到 index.jsp,就像他退出时一样???

编辑:

刚刚尝试将带有相应代码的错误页面添加到我的 web.xml 中。

没有效果,仍然是 Glassfish 错误页面而不是我自己的。

0 投票
3 回答
2020 浏览

java - 公开 @Asynchronous 函数的当前进度以在 View 中使用

在我的 JEE6-App(在 Glassfish 3.0.1 上运行)中,我有一个必须发送大量邮件的 EmailEJB。邮件是异步发送的,因此它使用新的 EJB3.1 @Asynchronous 进行注释,让它在单独的线程中运行。现在我希望用户了解该方法的当前状态:已经发送了多少封邮件?

异步发送邮件工作正常,但我不知道如何让进度可以从外部访问。似乎我这样做的方法是非常错误的,但不知何故它必须是可能的(也许是另一种方法)。这就是我的 EmailEJB 目前的样子(它是一种伪代码,但解释了我想要什么):

如何在异步函数中返回当前进度,而不用返回取消它?如何向用户显示函数内循环的进度?我需要另一种异步方法吗?有什么提示吗?

0 投票
1 回答
1372 浏览

scala - 如何使用新的 scala 2.8.0 嵌套注释

看起来当 scala 2.8.0 出来时,我们可以在持久层中使用嵌套的@annotations。但是怎么做?任何人都可以将它从java转换为scala吗?谢谢。

p>

0 投票
2 回答
1450 浏览

asynchronous - 使用 EJB3.1 @Asynchronous 时如何避免 ConcurrentModificationExceptions

[我的设置:Java EE 6 应用程序,EJB3.1、CDI/Weld、JSF2 在 Glassfish 3.0.1 上运行]

我阅读了一些关于 EJB3.1 中新的@Asynchronous 方法的文章,但没有一篇文章提到异步方法的危险以及您真正需要关心的内容。

在我的应用程序中,我有一个@Asynchronous E-Mail 服务,发送大量邮件。我从 CDI/Weld Bean 调用此服务。在我的测试过程中,我经常遇到 ConcurrentModificationExceptions,但直到现在我才真正理解它有时在哪里以及为什么会崩溃。

只是为了展示我的 Beans 大致是什么样子,重要的部分:

在我的 CDI-Bean 中,我像这样使用这个 EJB(向 JSF2 公开进度):

我只是想问一下:我在这里做错了什么吗(范围、注入、使用 Future)?使用 @Asynchronous 方法时我需要注意什么以避免 ConcurrentModificationExceptions?

我将电子邮件作为 EJB 注入。把整个EmailEJB做成异步,用@Inject @Asynchronous注入会不会更好?会有什么区别?

欢迎任何提示!

0 投票
1 回答
2395 浏览

java - 动态查找 EJB

我正在 Glassfish 3 上开发一个应用程序。我有一个如下所示的 EJB:

我的客户端代码(在同一个应用程序中运行)如下所示:

根据一些消息来源,这应该是一个有效的查找方法,但它会引发 NameNotFoundException。我究竟做错了什么?

0 投票
6 回答
9188 浏览

dependency-injection - Java EE 6:切换到 CDI - 最佳资源

我手头有一个小而完整的 Java EE 6 应用程序。

正在使用传统的注释: @Resource, @EJB, @Singleton, @PostConstruct, @PreDestroy, @PersistenceContext, @ManagedBean, @ManagedProperty, @RequestScope, @ApplicationScope,...

我想评估引入 CDI 是否有意义,并标准化依赖注入、bean 生命周期管理等的通用策略。

问题:有人知道将传统 Java EE 6 注释转换为 CDI 注释的好文章、示例或手册吗?