2012-12-18 96 views
0

我目前正在使用CDI pushevent。我計劃通過後端Java代碼而不是通過commandButton來實現前端jsf來觸發pushevent。 這裏是PushCdiBean.javajavax.enterprise.event.Event:如何初始化pushEvent

import java.io.Serializable; 
import java.util.UUID; 

import javax.annotation.PostConstruct; 
import javax.enterprise.event.Event; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 
import javax.inject.Inject; 



import org.richfaces.application.push.MessageException; 
import org.richfaces.application.push.TopicKey; 
import org.richfaces.application.push.TopicsContext; 
import org.richfaces.cdi.push.Push; 

/** 
* @author <a href="http://community.jboss.org/people/lfryc">Lukas Fryc</a> 
*/ 
@javax.inject.Named("pushCdiBean") 
@javax.enterprise.context.RequestScoped 
//@ManagedBean(name="pushCdiBean") 
//@ViewScoped 


public class PushCdiBean implements Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = -5241937306040858158L; 
    private static final String CDI_PUSH_TOPIC = "pushCdi"; 
    private String userIdentifier; 
    private String message; 

    @Inject 
    @Push(topic=CDI_PUSH_TOPIC)//i thought that the topic is initialized with this ?! 
    private Event<String> pushEvent; 

    @PostConstruct 
    public void initialize() { 
        if(userIdentifier == null) { 
            userIdentifier = UUID.randomUUID().toString().replace("-", ""); 
        } 

    TopicsContext topicsContext = TopicsContext.lookup(); 
    topicsContext.getOrCreateTopic(new TopicKey(CDI_PUSH_TOPIC, userIdentifier));//initialize the topic and make the troublesome message disappears 
    } 

    public synchronized void sendMessage() throws MessageException { 
       pushEvent.fire(message); 
    } 


    public String getMessage() { 
       return message; 
    } 


    public void setMessage(String message) { 
       this.message = message; 
    } 

    public Event<String> getPushEvent() { 
     return pushEvent; 
    } 

    public void setPushEvent(Event<String> pushEvent) { 
     this.pushEvent = pushEvent; 
    } 

    public String getUserIdentifier() { 
     return userIdentifier; 
    } 

    public void setUserIdentifier(String userIdentifier) { 
     this.userIdentifier = userIdentifier; 
    } 

當我嘗試創建PushCdiBean類和調用的sendMessage()的代碼功能,但是,pushEvent.fire失敗。代碼在這裏。

/** 
* 
*/ 
public void run() { 
     while (running) { 
      try { 
          PushCdiBean pushTest = new PushCdiBean(); 
          pushTest.setMessage("This is CDI push Test"); 
          pushTest.sendMessage(); 
         } 
         catch (Exception e) { 
        System.out.println("Exception: " + e.getMessage()); 
          } 
         sleep(4000); 
        } 
} 

您能否給我一些建議?非常感謝你。

回答

1

您必須@Inject CDI bean,而不是通過新的自己實例化它。

+0

非常感謝您的回覆。是否有可能發佈一些示例代碼或編輯我現有的代碼?再次感謝。 – user1913353

+0

public class PushBeanTest { @Inject private PushBean pushTest public void run(){ while .... pushTest.setMessage(...); pushTest.sendMessage(); ... } }' 嗯,我認爲你有想法 – LightGuard

+0

非常感謝你的迴應。 :) – user1913353