标签: cdi

集合操作的非法语法

我在将My xhtml页面连接到托管bean时遇到问题,commandButton上的操作有效,但是当传递值时它不起作用.这是我的jsf代码:

 <h:form id="form" class="form-signin">
            <p:panel id="panel" header=" Authentification" style="" >
                <h:panelGrid columns="2" rowClasses="3">  
                    <h:outputLabel  for="login" value="Nom d'utilisateur :"  styleClass=""/>  
                    <p:inputText id="login" value=" #{authenticationBean.profil.login }" required="true" label="login" >  
                        <f:validateLength minimum="4" />  
                    </p:inputText>  
                    <h:outputLabel for="password" value="Mot de passe :" /> 
                    <p:password id="password" value=" #{authenticationBean.profil.password }" required="true" label="password" styleClass=""/> 

                    <p:row>
                        <p:commandButton id="loginButton" value="Login" ajax="false" action="#{authenticationBean.validate}" />
                        <h:messages id="messages" globalOnly="false"/>
                    </p:row> 
                </h:panelGrid>
            </p:panel> 
        </h:form>
Run Code Online (Sandbox Code Playgroud)

我正在使用morphia将数据映射到mongo db,我还有一个名为profil和一个bean的权限来管理身份验证.这是我的认证bean代码:

public class AuthenticationBean implements Serializable {
private static final long serialVersionUID = 1L;
private Profil profil;
private …
Run Code Online (Sandbox Code Playgroud)

jsf el cdi managed-bean

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

如何在CDI(焊接)中注入EntityManager?

在我的项目中,我在持久层中使用JSF + JPA + CDI + WildFly 8.2.我有一个BasicDao,像这样:

 public  class BasicDao<M, K> {
    private org.jboss.logging.Logger logger = org.jboss.logging.Logger
           .getLogger("BasicDao");

    @Inject
    @Primary
    protected EntityManager em;
    Class<M> mclass;

    public EntityManager getEm() {
        return em;
    }

    public void setEm(EntityManager em) {
        this.em = em;
    }

    @Transactional(value=TxType.NOT_SUPPORTED)
    public M find(K id){ 
        return em.find(mclass, id);
    }

    @Transactional(value=TxType.REQUIRED)
    public void insert(M inst){
        this.em.persist(inst);
    }

    @SuppressWarnings("unchecked")
    @Transactional(value=TxType.REQUIRED)
    public K insertWithAutoId(M inst){
        this.em.persist(inst);
        return (K) this.em.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier(inst);
    }

    @Transactional(value=TxType.REQUIRED)
    public M update(M updated){
        return this.em.merge(updated);
    }


    @Transactional(value=TxType.REQUIRED)
    public void …
Run Code Online (Sandbox Code Playgroud)

jpa entitymanager cdi weld wildfly

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

10
推荐指数
2
解决办法
4551
查看次数

在会话作用域的JSF支持bean中观察CDI事件

我想知道是否有可能观察到多个JSF 2.0会话作用域支持bean的CDI事件.我以为我可以通过观察事件将事件/数据推送到多个会话.

我已经设置了一个小测试,允许用户使用页面上的按钮触发事件(它与会话范围的支持bean中实际触发事件的方法相关联).我认为,如果我打开两个不同的浏览器,将创建两个会话,并且事件将通知每个会话范围的支持bean.

但是,当运行我的小测试并单击按钮以在其中一个浏览器上触发事件时,我看到该事件仅通知其中一个会话范围的bean.它只通知触发事件的bean(即 - 如果我单击浏览器1中的按钮,则会通知浏览器1中支持会话的会话范围bean,如果我单击浏览器2中的按钮,则支持会话的bean浏览器2被通知).

我的印象是事件会通知所有bean实例.但是,情况似乎并非如此.我能做到吗?我只是设置错误吗?

更新以显示我的代码:

用于触发事件并显示会话范围数据的jsfpage.xhtml片段:

<h:form>
  <h:outputText value="#{BackingBean.property}" />
  <p:commandButton value="Fire Event" action="#{EventFirer.fireEvent}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)

接收事件的Session-scoped bean:

@Named
@SessionScoped
public class BackingBean implements Serializable {

    private String property;

    public String getProperty() {
        return property
    }

    public void listenForChange(@Observes EventObj event) {
        logger.log(Level.INFO, "Event received");
        property = event.toString();
    }
}
Run Code Online (Sandbox Code Playgroud)

用于触发事件的应用程序作用域bean:

@Named
@ApplicationScoped
public class EventFirer implements Serializable {

    @Inject
    private Event<EventObj> events;

    public String fireEvent() {
        logger.log(Level.INFO, "Event fired");
        events.fire(new EventObj());
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

jsf cdi jsf-2

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

在Servlet中使用CDI注入

我试图@Inject@SessionScoped豆成过滤器

@WebFilter("/*")
public class IdentityFilter implements Filter, Serializable {

    @Inject
    private LoginUser loginUser;
...
Run Code Online (Sandbox Code Playgroud)

这里LoginUser@SessionScoped

目的是loginUser表示会话的登录用户.

问题是看起来我并不总是loginUser从当前会话中获取,因为一个会话的LoginUser对象正在与另一个会话共享,所以会话之间会出现"泄漏".显然这不好.

我想知道这是因为Filter对象是单例,还是至少在容器(glassfish)的请求和会话之间重用.(对?)

是否有更好的方法来获取LoginUser当前会话的对象而不使用Filter上的属性?

servlets code-injection cdi servlet-filters

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

在Wildfly中,OSGI可以替代模块间服务注入?

我们正在解开经典的传统单片EAR打包Java EE应用程序.我们(最复杂的)组件布线模式如下:组件A'需要'接口X,而组件B和C(... N)每个'提供'接口X.我们的要求是打包和部署A,B,C和X分开独立,以最大限度地减少停机时间并最大限度地减少业务影响.

因此,我们需要必要的健壮性,以允许在运行时删除和添加(重新部署)接口的提供者(B,C),而无需重新部署接口的消费者(A),也不需要重新启动服务器.该解决方案将在Wildfly 8上运行,但只要它们可以在Wildfly 8上运行,就可以使用它们或其他技术.

我们使用JBoss-OSGI和Weld-OSGI实现了POC,它满足了我们的所有要求,并为我们提供了出色的迁移路径.但是,在Wildfly 8 Alpha 3中,JBoss-OSGI已从默认发行版中删除.这让我们认为我们应该探索更符合Wildfly背后人们思想的替代方案.

因此,问题是,在Wildfly 8上,OSGI可以替代满足我们要求的模块间服务注入的替代方案是什么?

为了预算,简单性,性能开销和公司策略,我们必须消除以下内容:
1.远程EJB
2. Web服务
3. JSon/Rest
4. SCA

请注意,这不是要求就OSGI的可行性进行辩论,也不是对不同解决方案的评估或比较.我只是在寻找符合我们标准的任何解决方案,而不是基于OSGI.

osgi dependency-injection cdi weld wildfly

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

CDI Inject在maven-embedded-glassfish-plugin上失败 - org.jboss.weld.exceptions.DeploymentException:WELD-001408类型不满意的依赖项

我们有一个webapp,目前正在使用Java EE 7,JSF 2.2和Glassfish 4.0开发.有两个特定的托管bean,它们具有循环依赖性.

UsuarioController

@Named
@SessionScoped
public class UsuarioController implements Serializable {

    /** snipet **/

    @Inject
    private EnderecoController enderecoController;

    /** snipet **/
}
Run Code Online (Sandbox Code Playgroud)

EnderecoController

@Named
@ViewScoped
public class EnderecoController {

    /** snipet **/

    @Inject
    private UsuarioController esuarioController;

    /** snipet **/
}
Run Code Online (Sandbox Code Playgroud)

当webapp打包并部署到普通的glassfish 4.0安装时,它可以正常工作.

但是,在开发过程中,我们使用maven-embedded-glassfish在IDE内部进行本地测试.应用程序部署失败,出现以下异常.

SEVERE: Exception while loading the app : CDI deployment failure:WELD-001408 Unsatisfied dependencies for type [EnderecoController] with qualifiers [@Default] at injection point [[BackedAnnotatedField] @Inject private net.jhm.exemplo.view.UsuarioController.enderecoController]
org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [EnderecoController] …
Run Code Online (Sandbox Code Playgroud)

java-ee cdi

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

如何在WildFly上禁用WELD

如何在WildFly上完全禁用WELD.我不需要它,因为我使用另一个DI框架.

异常0:javax.enterprise.inject.UnsatisfiedResolutionException:无法使用限定符[@javax.enterprise.inject.Any(),@ javax.enterprise.inject解析'org.springframework.data.mongodb.core.MongoOperations'的bean .默认()].at org.springframework.data.mongodb.repository.cdi.MongoRepositoryExtension.createRepositoryBean(MongoRepositoryExtension.java:104)at the sun.reflect org.springframework.data.mongodb.repository.cdi.MongoRepositoryExtension.afterBeanDiscovery(MongoRepositoryExtension.java:79)at sun.reflect at.MativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method .java:606)在org.jboss.weld上的org.jboss.weld.inject.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266). event.ExtensionObserverMethodImpl.sendEvent(ExtensionObserverMethodImpl.java:125)org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232)在org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)

我试过了

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:weld="http://jboss.org/schema/weld/beans"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee    http://java.sun.com/xml/ns/javaee/beans_1_0.xsd
                       http://jboss.org/schema/weld/beans http://jboss.org/schema/weld/beans_1_1.xsd
http://jboss.org/schema/weld/beans ">

<weld:scan>
    <weld:exclude name="com.google.**"/>
    <weld:exclude name="org.springframework.data.mongodb.**"/>
</weld:scan>
Run Code Online (Sandbox Code Playgroud)

但它没有解决我的问题.

java jboss cdi weld wildfly

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

什么时候@Dependent范围的CDI bean被销毁,如果你通过Provider.get()获得那个bean?

我很难理解@DependentCDI 1.0和CDI 1.1中作用域的有效生命周期.到目前为止,我的实验得出了以下结论:

  • 一个@Dependent作用域的bean没有代理.
  • @PreDestroy@Dependentbean被销毁时,不会调用任何方法.
  • Provider.get()总是创建一个@Dependentbean 的新实例.
  • 使用JBoss 6/CDI 1.0,@Dependent@ApplicationScopedbean的Provider<>字段创建的bean 被"泄露",因为它仍然"属于" Provider.
  • 在使用WELD 2.1.2.Final/CDI 1.1时,我没有看到@Dependent类似Providers 泄漏豆类的证据(还有!).(虽然这可能是因为这些特定的 @Dependent bean是由@Produces方法创建的......!)

我看到CDI 1.1已添加了一种destroy()方法Instance<>,可能是为了解决CDI 1.0中的内存泄漏问题.但那怎么样Provider<>- CDI 1.1中是否还会泄漏?(如果确实如此,那么你应该怎么用Provider.get()?)

基本上,我有几个@ApplicationScopedbean/@SingletonEJB,我@Inject Provider试图Provider.get()用作两者的工厂@Dependent@RequestScoped"帮助"bean.我绝对希望这些bean"属于"他们的Provider字段,因为我需要将bean随后进行垃圾收集:

public void updateStuff() {
    Helper helper = …
Run Code Online (Sandbox Code Playgroud)

java-ee cdi jboss-weld weld

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

为什么 HTTPServletRequest 可以通过 CDI 注入,而 HTTPServletResponse 却不能?

这个问题之所以出现是因为我阅读了Arjan Tijms 关于 JSF 2.3 的博客文章。在那里,他列出了可以通过 CDI 注入的所有 JSF 工件。虽然HttpServletRequest提到了,HttpServletResponse但并没有出现在我一开始并不相信的上述清单上。

为了进行尝试,我设置了一个简单的服务器(JavaEE8、Wildfy22):

  • @Inject private HttpServletRequest req;工作得很好
  • @Inject private HttpServletResponse res;投掷DeploymentException: WELD-001408: Unsatisfied dependencies for type HttpServletResponse

我不明白为什么HttpServletResponse不应该注射。毕竟,我们的目标是通过简洁的注入来取代复杂的方法链。如果是HttpServletRequestFacesContext.getCurrentInstance().getExternalContext().getRequest();现在可以缩短为上述注入。

好吧,在 的情况下HttpServletResponse,没有可替换的候选注入FacesContext.getCurrentInstance().getExternalContext().getResponse();,如上所示。

总结:为什么可以HttpServletRequest通过 CDI 注射但HttpServletResponse不能?

java servlets cdi jsf-2.3 java-ee-8

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