问题标签 [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 投票
2 回答
1083 浏览

java - 我是否正确使用 EJB?

我正在使用 JEE6 堆栈,包括 JPA 2.0、JSF 2.0、EJB 3.1 等。

我的架构设置方式如下:

我使用 hibernate 作为我的 JPA 提供程序,使用 JPA 注释 DAO。我有与我的 facelet/xhtml 页面相对应的 JSF 托管 bean。我有处理所有数据库请求的 EJB。

我的 XHTML 页面有 JSF EL,它调用我的托管 bean。我的托管 bean 包含对由 EJB 管理的 DAO 实体的引用。例如,我有一个映射到数据库表的用户实体。我有一个用户 EJB,它处理所有返回用户的 CRUD 操作。我有一个编辑用户的页面。高级工作流是:导航到用户编辑页面 -> EL 调用位于托管 bean 中的加载用户的方法。该方法从 EJB 调用 userEJB.loadUser(user) 以从数据库中获取用户。用户被编辑并提交 -> 在托管 bean 中调用一个函数,该 bean 调用 EJB 中的一个函数来保存用户。等等

我在使用 EJB 访问我的 JSF 页面中的数据时遇到问题。我在延迟初始化错误方面遇到了很多问题,我相信这是由于我的设置方式造成的。

例如,我有一个客户端实体,它有一个延迟加载的用户列表。为了得到一个客户端,我在我的 EJB 中调用一个方法,该方法进入数据库,找到一个客户端并返回它。稍后我希望访问此客户端用户列表,为此我必须通过调用某种方法返回 EJB 以加载这些用户(因为它们是延迟加载的)。这意味着我必须创建一个方法,例如

这种方法的唯一目的是加载用户(我什至不肯定这种方法是好的或有效的)。如果我自己在做会话管理,我只想让会话对整个请求保持打开状态并直接访问属性,这很好,因为会话无论如何都会打开,EJB 中似乎有这一额外的间接层这对我来说很困难。

我确实喜欢 EJB,因为我喜欢它们由容器控制、池化、免费提供事务管理等这一事实。但是,我觉得我使用它们不正确,或者我的 JSF 应用程序设置不正确。

任何反馈将不胜感激。

谢谢,

0 投票
1 回答
743 浏览

java - 如何限制 JPQ 输出?

我需要将查询返回的实体数量限制为 JPA 查询中的某个特定值(通过 JPQL)。特别:

例如在 sql (mysql 语法) 中我会这样做:

出现的唯一解决方案是简单地获取所有实体,然后选择第一个,这是不可能的。有任何想法吗?

0 投票
1 回答
1444 浏览

jsf - Richfaces a4j:包括加载两个页面?

我的 JSF 主页上有这个看似无辜的代码:

以下是侧边栏的变化方式:

  1. jsFunction 调用一个 backing-bean 方法,该方法在 UserSession 中设置页面(如“sidebar2.jsp”)

  2. jsFunction有“rerender='sidebarContainer'”,这样侧边栏就加载了正确的页面

在 JBoss 5 中最初启动 Web 应用程序时,当我调用 jsFunction 更改页面时,会出现 sidebar2,但在其下方出现原始侧边栏(sidebar1.jsp)。

在最初的怪异之后,侧边栏切换工作得很好。有什么想法吗??

0 投票
1 回答
1209 浏览

ejb-3.0 - EJB3.1 远程调用 - 它是自动分发的吗?是不是很贵?

我正在构建一个具有性能和可扩展性的 JEE6 应用程序。

业务逻辑和 JPA2 外观保存在无状态会话 bean (EJB3.1) 中。截至目前,SLSB @Remote实现-interfaces。当一个 bean 需要访问另一个 bean 时,它通过 RMI 来完成。

我对此的推理是假设,一旦应用程序在一堆集群应用程序服务器上运行,RMI 部分允许执行自动分布在整个集群中。

这是一个正确的假设吗?

我可以处理它的缺点(对象丢失 entityManager 会话,按值传递),至少我是这么认为的。但我想知道持续的远程调用是否不会增加必要的负载。

0 投票
4 回答
2146 浏览

java - 如何限制java servlet中的上传速度?

我正在开发一个应用程序(基于 Spring 作为 DI 和 MVC 框架),它具有当前使用 Spring Multipart Upload 实现的文件上传功能(它又利用 commons fileupload 库)。

所以我正在寻找一种降低上传带宽消耗的方法。我怎样才能做到这一点?

0 投票
1 回答
6123 浏览

servlets - 在 servlet 中注入 jms 资源和 MDB 的最佳实践

使用 ejb 3.1、servlet 3.0(glassfish 服务器 v3)

场景:我有侦听 jms 消息并将处理交给其他会话 bean(无状态)的 MDB。Servelet 注入 jms 资源。

问题一:为什么servlet在使用静态声明时不能注入jms资源?

我得到的错误是:

[#|2010-05-03T15:18:17.118+0300|警告|glassfish3.0|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=35;_ThreadName=Thread-1;| StandardWrapperValve [WorkerServlet]:PWC1382:为 servlet WorkerServlet com.sun.enterprise.container.common.spi.util.InjectionException 分配异常:在 com.sun 为类 ua.co.rufous.server.services.WorkerServiceImpl 创建托管对象时出错。 Enterprise.container.common.impl.util.InjectionManagerImpl.createManagedObject(InjectionManagerImpl.java:312) 在 com.sun.enterprise.web.WebContainer.createServletInstance(WebContainer.java:709) 在 com.sun.enterprise.web.WebModule。 createServletInstance(WebModule.java:1937) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1252) 原因:com.sun.enterprise.container.common.spi.util。InjectionException:尝试将 Unresolved Message-Destination-Ref ua.co.rufous.server.services.WorkerServiceImpl/queue@java.lang.String@null 注入 com.sun 的类 ua.co.rufous.server.services.WorkerServiceImpl 的异常.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:614) 在 com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.inject(InjectionManagerImpl.java:384) 在 com.sun .enterprise.container.common.impl.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:141) 在 com.sun.enterprise.container.common.impl.util.InjectionManagerImpl.injectInstance(InjectionManagerImpl.java:127) 在 com.sun .enterprise.container.common.impl.util.InjectionManagerImpl.createManagedObject(InjectionManagerImpl.java:306) ... 27 更多原因:com.sun.enterprise.container.common.spi.util.InjectionException:在仅支持基于实例的注入的类上非法使用静态字段 private static javax.jms.Queue ua.co.rufous.server.services.WorkerServiceImpl.queue在 com.sun.enterprise.container.common.impl.util.InjectionManagerImpl._inject(InjectionManagerImpl.java:532) ... 31 更多 |#]

我的 MDB:

没有静态声明一切正常:

问题 2:使用 MDB 的最佳实践是什么:在 onMessage() 中处理完整请求或在 onMessage() 方法中调用另一个 bean(在我的情况下为无状态 bean)来处理它。处理包括对肥皂服务的少量调用,因此完整处理时间可能为 3 秒。

谢谢你。

0 投票
1 回答
1704 浏览

java - 如何在eclipselink中处理“遇到空主键”异常?

...在工作单元克隆中遇到空主键...

eclipselink(2.0.2 with 2.0 jpa)中的异常字面意思是我实体中的 id <=0(对于原始类型)。虽然这里的调试表明一切都很好,我没有什么可担心的。我的 AS 是 glassfish v3。任何人都可以指出可能导致这种行为的原因吗?

0 投票
1 回答
867 浏览

security - EJB 3.1 中使用 JAX-WS 的基本身份验证的部署说明

有很好的教程 Basic Authentication with JAX-WS

但它描述了基于 Web 的应用程序(战争)的部署描述。在 ejb jar 部署描述中描述是否可以通过?

对于 web.xml

我通过注释找到了安全规则的描述 -

GlassFish 和 Java EE 5 SDK 中的安全注释和授权

但这足够了吗?

比你!

0 投票
1 回答
5374 浏览

java - 新的有状态会话 bean 实例,无需调用查找

设想:

我有@Singleton UserFactory@Stateless可能是),它的方法是通过手动查找createSession()生成bean。@Stateful UserSession

如果我通过 DI 注入@EJB- 我将在调用方法期间获得相同的实例fromFactory()(应该如此)

我想要的 - 是在UserSession不进行查找的情况下获得新实例。

Q1:如何调用@Stateful会话 bean 的新实例?

代码:

据我了解,调用

不是最好的主意

Q2:是真的吗?


#

更新

目标

实际上,目标是创建一些 SessionsFactory 来管理用户的会话(这是 Web 服务用户)

会话@Statefull bean:

在工厂方法中,我只想创建 @Statefull UserSession 的新实例并管理为每个用户创建的会话数,并在一段时间(30 分钟)后调用 destroySession()

我需要跟踪用户会话请求的历史记录,并在以后保留历史记录..

所以我认为@Statefull bean 应该满足我的需求。但看起来通过 JNDI 名称查找是支持创建新 ejb 的唯一机会。我正在寻找在
没有查找的情况下注入新的 ejb 实例的可能性,并且可能有可能获取我的 @Statefull UserSession 当前创建的实例的集合,而不是将 thrm 保存在某个映射/集合中。

Q3:所以.. 只有 JNDI 会帮助我创建新的 ejb 实例?

Q4:是否可以从容器中获取一些 ejb 实例的集合?


我正在使用 glassfish v3,ejb 3.1。

0 投票
1 回答
206 浏览

java - 是否可以从容器中收集一些 ejb 的实例?

场景:我有一些@Statefull用于用户会话的 bean(不是 HTTP 会话,它是 Web 服务会话)。我需要管理每个用户的用户会话。

目标:我需要有可能收集@Statefull UserSession实例并控制每个用户的最大会话数以及会话的生命周期。

问题:是否可以从 EJB 容器中获取 EJB 实例的集合,而不是将它们存储在某些集合、映射等中?

我正在使用 GlassFish v3、EJB 3.1、JAX-WS。