问题标签 [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.
jsf-2 - JSF 2 @PostConstruct 方法调用了两次
我有一个奇怪的行为:我注释的方法@PostConstruct
被调用了两次。
调试它,我看到我的搜索页面在调用命令链接的操作方法之前调用了它mbean.edit
。我的 beanMBeanSearch
是请求范围的,我MBean
的是视图范围的。
我的观点 search.xhtml:
我还有一个目标视图 var.xhtml。
MBean
我的豆子的相关提取物:
使用此代码,@PostConstruct
在我的编辑方法之后调用 my ,然后再次调用它。
我认为我@PostConstruct
以错误的方式使用了(我认为MBean
需要在任何方法之前启动)。但是在与搜索页面不同的页面中编辑对象的替代方法是什么?
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:
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
文件。
eclipselink - 创建了多个会话 Bean 实例并调用了 @PostConstruct 方法
项目由EJB 2.0和EJB 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方法。
谁能指出这种行为背后的原因。是否缺少任何配置?
dependency-injection - 为什么我不能在托管 Bean 构造函数中初始化属性?
我有一个托管 Bean:
在我的构造函数中,我尝试:
但是我得到一个错误“无法创建类的实例”,为什么我不能在构造函数中初始化属性?
我解决了这个问题:
但我想知道原因以及我是否在 @PostConstruct 上做得很好
问候。
jakarta-ee - @Singleton bean 在标记为 TransactionAttribute=NOT_SUPPORTED 时无法初始化,因为不是预期的事务状态 4
我的 EJB3.1 bean 初始化遇到了困难,更具体地说,由于感知到的事务回滚而导致它失败,即使我已经用@TransactionAttribute(NOT_SUPPORTED)
. 这应该意味着任何客户端事务都会在 bean 方法进入时暂停,直到退出(何时恢复。这绝对是我想要的事务方法。
代码和错误的“要点”如下(注意其中一些是手动操作以隐藏细节,但都是相关且具有代表性的):
这会引发以下错误:
其中,当我调试时实际上包装了以下异常:
同样,调试提出了一些有趣的细节:
- 首先,我
MyClass#init
的执行完全成功,没有任何问题/异常。 - 在第 一次从客户端代码
#init
调用我的#doSomething
方法时调用(作为构建后的一部分)。 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
(我需要确认这一点,因为我的线索是通过交易案例来确定的)。如果/何时会报告,但似乎我们在此处尝试回滚不存在的事务时可能会失败。
spring-mvc - 在 Spring 中,@Controller 是否仅在完成任何其他 bean 的 @PostConstruct 方法后才接受请求?
我必须使用 @PostConstruct 用 DAO 初始化一些东西。
在完成之前,@Controller 不应该接受任何请求。
这是默认行为吗?还是需要其他配置?
forms - 如何保存表单数据在 JSF 1.2 中
当用户单击保存按钮 h:commandButton 时,我正在尝试保存在 at:dataTable 对象中编辑的数据。但是,在调用该操作之前,会调用 bean 中的 postConstruct() 方法,该方法尝试加载表的数据,但没有最初传入的 docId。我尝试在 h 中使用 f:param :commandButton 传递 docId,但这不起作用。有没有人有正确的策略来加载带有 docId 的页面,然后在单击保存按钮后保存更改?以下是我当前的 bean 代码和 xhtml。不幸的是,我还没有升级到 JSF 2.0 的选项。
jsf - 范围和@PostConstruct
我正在使用 JSF 2、PrimeFacces 3.4 和 CDI。我有 2 页:page1.xhtml
和page2.xhtml
. 每个页面都有自己的托管 bean:Page1Bean
和Page2Bean
.
page1.xhtml
有一个<p:remoteCommand>
谁的actionListener
显示器page2.xhtml
。
page2.xhtml
下包含 3 个组件<ui:include>
和一个提交按钮。这 3 个组件中的每一个都绑定到不同的托管 bean Component1Bean
,Component2Bean
并且Component3Bean
. 提交按钮显示page1.xhtml
。
这三个ComponentXBean
s 有一个@PostConstruct
带有一些初始化代码的方法。我在这些 bean 上尝试了以下范围:
@SessionScoped
:单次提交操作一切正常。当我重复它时,这些 bean 不会被重新初始化,@PostConstruct
因为它们是会话范围的。@ViewScoped
:@PostConstruct
被多次调用。@ConversationScoped
: 与 . 相同的行为@ViewScoped
。
为什么@PostConstruct
在视图和会话范围内多次调用?我怎样才能让他们每次提交操作只被调用一次?
jsf - 在每一行中调用 PostConstruct
我有一个dataTable
ajax event="rowSelect"
。每次我点击另一行时,PostConstruct
都会再次调用它,我不知道为什么。
所以,我的dataTable
代码是:
看,该selection
属性将值保存在一个对象中,而我的 ajax 事件只是更新了commandButton
,我不知道为什么postConstruct
每次选择另一行时都会调用 。
下面的代码是我的 ManagedBean: