问题标签 [postconstruct]

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 投票
1 回答
2019 浏览

jsf-2 - JSF 2 @PostConstruct 方法调用了两次

我有一个奇怪的行为:我注释的方法@PostConstruct被调用了两次。

调试它,我看到我的搜索页面在调用命令链接的操作方法之前调用了它mbean.edit。我的 beanMBeanSearch是请求范围的,我MBean的是视图范围的。

我的观点 search.xhtml:

我还有一个目标视图 var.xhtml。

MBean我的豆子的相关提取物:

使用此代码,@PostConstruct在我的编辑方法之后调用 my ,然后再次调用它。

我认为我@PostConstruct以错误的方式使用了(我认为MBean需要在任何方法之前启动)。但是在与搜索页面不同的页面中编辑对象的替代方法是什么?

0 投票
2 回答
6143 浏览

java - Can I use @PostConstruct on an interface method?

I have a number of beans implementing an interface and I'd like them all to have the same @PostConstruct. I've added the @PostConstruct annotation to my interface method, then added to my bean definitions:

But this doesn't seem to be working. Where am I going wrong if this is even possible?

edit: I've added the annotation to the interface like this:

0 投票
1 回答
1817 浏览

spring - 从由 @PostConstruct 注释的 JSF 托管 bean 中的方法调用安全方法

在 JSF 托管 bean中,一旦加载 JSF 托管 bean,即在托管 bean 的构造函数完成其执行之后,就会调用带有@PostConstruct- ( ) 注释的方法。javax.annotation.PostConstruct

当我尝试java.util.List通过调用 Spring DAO 中的受保护方法来初始化 a 时,如下所示。

我得到以下异常。

对不起。这有点类似于我之前的问题。我问这个问题的原因是我不明白我的 Spring 安全配置是否有问题,或者不允许从由@PostConstruct. 如果我没记错的话,这个异常确实不会在 EJB 的情况下导致。


spring-security.xml文件。


编辑:

web.xml文件。

0 投票
1 回答
574 浏览

eclipselink - 创建了多个会话 Bean 实例并调用了 @PostConstruct 方法

项目由EJB 2.0EJB 3.0 Beans 组成。我将会话 bean 从 EJB 2.0 转换EJB 3.0,当我启动项目时,它多次初始化会话 bean。会话 bean 调用其他会话 bean,后者又调用此会话 bean 的不同方法。只要是 EJB 2.0 会话 bean,就只初始化了一个实例,但现在初始化了多个实例。

UtilitiesController Session Bean 启动一个线程,该线程调用Miscellaneous Class(Helper Class POJO),后者调用ProductScheme Session Bean,后者调用ServerGlobalValues(Helper Class POJO)并调用UtilitiesController Session Bean

以下是日志:

setSessionContext 调用了!
setSessionContext 调用了!
@PostConstruct 方法已调用!
开始初始化
<2013-06-07 15:03:53.535--ServerSession(316201757)--EclipseLink,版本:Eclipse Persistence Services - 2.1.3.v20110304-r9073>
<2013-06-07 15:03:53.535-- ServerSession(316201757)--Server: 10.3.5.0>
setSessionContext Called!
setSessionContext 调用了!
@PostConstruct 方法已调用!
开始初始化
<2013-06-07 15:03:53.691--ServerSession(316201757)--DatabaseSession 有一个由 ServerPlatform 以外的东西定义的外部事务控制器。EclipseLink 将允许覆盖外部事务控制器,但我们建议您考虑子类化 org.eclipse.persistence.platform.server.ServerPlatformBase 并覆盖 getExternalTransactionControllerClass()。>
<2013-06-07 15:03:53.691- -ServerSession(316201757)--EclipseLink,版本:Eclipse Persistence Services - 2.1.3.v20110304-r9073>
<2013-06-07 15:03:53.691--ServerSession(316201757)--Server: 10.3.5.0>
setSessionContext Called !
setSessionContext 调用了!
@PostConstruct 方法已调用!
开始初始化
<2013-06-07 15:03:53.722--ServerSession(316201757)--DatabaseSession 有一个由 ServerPlatform 以外的东西定义的外部事务控制器。EclipseLink 将允许覆盖外部事务控制器,但我们建议您考虑子类化 org.eclipse.persistence.platform.server.ServerPlatformBase 并覆盖 getExternalTransactionControllerClass()。>
<2013-06-07 15:03:53.722- -ServerSession(316201757)--EclipseLink,版本:Eclipse Persistence Services - 2.1.3.v20110304-r9073>
<2013-06-07 15:03:53.722--ServerSession(316201757)--Server: 10.3.5.0>
setSessionContext Called !
setSessionContext 调用了!
@PostConstruct 方法已调用!
开始初始化
<2013-06-07 15:03:53.847--ServerSession(316201757)--DatabaseSession 有一个由 ServerPlatform 以外的东西定义的外部事务控制器。EclipseLink 将允许覆盖外部事务控制器,但我们建议您考虑替代子类化 org.eclipse.persistence.platform.server.ServerPlatformBase 并覆盖 getExternalTransactionControllerClass()。>
<2013-06-07 15:03:53.847- -ServerSession(316201757)--EclipseLink,版本:Eclipse Persistence Services - 2.1.3.v20110304-r9073>
<2013-06-07 15:03:53.847--ServerSession(316201757)--Server: 10.3.5.0>
setSessionContext Called !
setSessionContext 调用了!
@PostConstruct 方法已调用!
开始初始化
<2013-06-07 15:03:53.879--ServerSession(316201757)--DatabaseSession 有一个由 ServerPlatform 以外的东西定义的外部事务控制器。EclipseLink 将允许覆盖外部事务控制器,但我们建议您考虑子类化 org.eclipse.persistence.platform.server.ServerPlatformBase 并覆盖 getExternalTransactionControllerClass()。>
<2013-06-07 15:03:53.879- -ServerSession(316201757)--EclipseLink,版本:Eclipse Persistence Services - 2.1.3.v20110304-r9073>
<2013-06-07 15:03:53.879--ServerSession(316201757)--Server: 10.3.5.0>
javax.ejb.EJBTransactionRolledbackException:EJB 异常:;嵌套异常是:异常 [EclipseLink-8030] (Eclipse Persistence Services - 2.1.3.v20110304-r9073): org.eclipse.persistence.exceptions.JPQLException

从日志中可以看出,每次创建实例都会调用两次setSessionContext,并且在初始化之前也会调用@PostConstruct方法。

谁能指出这种行为背后的原因。是否缺少任何配置?

0 投票
1 回答
1198 浏览

dependency-injection - 为什么我不能在托管 Bean 构造函数中初始化属性?

我有一个托管 Bean:

在我的构造函数中,我尝试:

但是我得到一个错误“无法创建类的实例”,为什么我不能在构造函数中初始化属性?

我解决了这个问题:

但我想知道原因以及我是否在 @PostConstruct 上做得很好

问候。

0 投票
1 回答
8837 浏览

jakarta-ee - @Singleton bean 在标记为 TransactionAttribute=NOT_SUPPORTED 时无法初始化,因为不是预期的事务状态 4

我的 EJB3.1 bean 初始化遇到了困难,更具体地说,由于感知到的事务回滚而导致它失败,即使我已经用@TransactionAttribute(NOT_SUPPORTED). 这应该意味着任何客户端事务都会在 bean 方法进入时暂停,直到退出(何时恢复。这绝对是我想要的事务方法。

代码和错误的“要点”如下(注意其中一些是手动操作以隐藏细节,但都是相关且具有代表性的):

这会引发以下错误:

其中,当我调试时实际上包装了以下异常:

同样,调试提出了一些有趣的细节:

  1. 首先,我MyClass#init的执行完全成功,没有任何问题/异常。
  2. 在第 一次从客户端代码#init调用我的#doSomething方法时调用(作为构建后的一部分)。
  3. MyClass#doSomething因此,在客户端调用down to#init和在这些层之一内部引发异常之间存在大量堆栈间接级别。它是在 WLS Singleton 会话 bean 管理代码中提出的。见下文...

堆栈类似于下面的(MyClass 名称已更改):

并且事务回滚异常实际上是在堆栈帧中引发的:

这个级别确实与事务管理器打交道,但我不知道为什么它应该尝试将事务标记为回滚,尤其是在从主应用程序代码成功初始化之后。

我正在使用此 EJB 组件来编译此 bean,但我们在服务器(或课程)上使用 WLS EJB 代码:

我把它放在那里的原因是它被证明很棘手,网上很少有宝贵的东西(尤其是交易状态 4),我在上面花了太长时间,需要继续前进。我正在继续寻找,但我想我周一回来时可能会获得更多线索。

我已经重新阅读了很多关于 EJB 事务处理的内容,但没有发现任何明显的问题。我相信我正在使用正确的机制来处理我的 bean 中的事务(即它是非事务性的)。我还没有尝试将它放在描述符中(我只是想到并会试一试)。我还没有深入研究它是如何SingletonSessionManager$SingletonLifecycleManager.doActualInit工作的,但是关于它的在线信息并不多。

问题

换句话说,问题是...... - 我错过了什么,所以我的 bean 方法不参与任何提供的事务,或者更具体地说,不试图将事务标记为回滚?- 如果我明确告诉它不要“支持”(关心)任何交易,为什么它会因为这个错误而无法初始化?

注意我已经检查了这个@Singleton bean 未能初始化,因为不是预期的事务状态 1问题,但我的场景与 Java EE 安全角色权限无关(我不认为!)

谢谢。

更新 1

好吧,最新的是删除我的@TransactionAttribute注释似乎让我摆脱了失败。这很奇怪,因为默认值应该是TransactionAttributeType#Required,实际上,我们在堆栈跟踪中有一个附加层,如果我调试时间过长,那么我的 bean init 中就会出现事务超时。

查看堆栈跟踪中的以下级别(慢慢接下来),我看到有一个事务(实际上是两个):

我将检查这些是否存在于预删除@TransactionAttribute场景中,并尝试观看ServerTransactionImpl

更新 2

上次更新了一段时间......但是,我想我已经在上面的原始堆栈跟踪中追踪到SingletonSessionManager#postCallback了这个问题。SingletonSessionManager#constructAndInitBean(我需要确认这一点,因为我的线索是通过交易案例来确定的)。如果/何时会报告,但似乎我们在此处尝试回滚不存在的事务时可能会失败。

0 投票
0 回答
79 浏览

spring-mvc - 在 Spring 中,@Controller 是否仅在完成任何其他 bean 的 @PostConstruct 方法后才接受请求?

我必须使用 @PostConstruct 用 DAO 初始化一些东西。

在完成之前,@Controller 不应该接受任何请求。

这是默认行为吗?还是需要其他配置?

0 投票
1 回答
436 浏览

forms - 如何保存表单数据在 JSF 1.2 中

当用户单击保存按钮 h:commandButton 时,我正在尝试保存在 at:dataTable 对象中编辑的数据。但是,在调用该操作之前,会调用 bean 中的 postConstruct() 方法,该方法尝试加载表的数据,但没有最初传入的 docId。我尝试在 h 中使用 f:param :commandButton 传递 docId,但这不起作用。有没有人有正确的策略来加载带有 docId 的页面,然后在单击保存按钮后保存更改?以下是我当前的 bean 代码和 xhtml。不幸的是,我还没有升级到 JSF 2.0 的选项。

0 投票
1 回答
981 浏览

jsf - 范围和@PostConstruct

我正在使用 JSF 2、PrimeFacces 3.4 和 CDI。我有 2 页:page1.xhtmlpage2.xhtml. 每个页面都有自己的托管 bean:Page1BeanPage2Bean.

page1.xhtml有一个<p:remoteCommand>谁的actionListener显示器page2.xhtml

page2.xhtml下包含 3 个组件<ui:include>和一个提交按钮。这 3 个组件中的每一个都绑定到不同的托管 bean Component1BeanComponent2Bean并且Component3Bean. 提交按钮显示page1.xhtml

这三个ComponentXBeans 有一个@PostConstruct带有一些初始化代码的方法。我在这些 bean 上尝试了以下范围:

  • @SessionScoped:单次提交操作一切正常。当我重复它时,这些 bean 不会被重新初始化,@PostConstruct因为它们是会话范围的。
  • @ViewScoped:@PostConstruct被多次调用。
  • @ConversationScoped: 与 . 相同的行为@ViewScoped

为什么@PostConstruct在视图和会话范围内多次调用?我怎样才能让他们每次提交操作只被调用一次?

0 投票
0 回答
456 浏览

jsf - 在每一行中调用 PostConstruct

我有一个dataTableajax event="rowSelect"。每次我点击另一行时,PostConstruct都会再次调用它,我不知道为什么。

所以,我的dataTable代码是:

看,该selection属性将值保存在一个对象中,而我的 ajax 事件只是更新了commandButton,我不知道为什么postConstruct每次选择另一行时都会调用 。

下面的代码是我的 ManagedBean: