0

Java eeで非同期メソッド呼び出しを行うための2つのクラスがあります。リンクhttp://satishgopal.wordpress.com/2011/04/24/ejb-3-1-asynchronous-methodsをたどって方法を学んでいます。非同期メソッドを呼び出すと、次の結果が得られます。

結果:

INFO: caller method running in thread http-thread-pool-8083(5) date:1373866669346
INFO: start running asyncMethod in thread http-thread-pool-8083(5)

INFO: finished running asyncMethod in thread http-thread-pool-8083(5)
INFO: caller method running in thread http-thread-pool-8083(5) date:1373866672348

私が期待しているのは、asyncMethod() メソッドの呼び出しが完了するのを待つことではありませんが、結果からわかるように、asyncMethod() メソッドの呼び出しは別のスレッドによって処理されません。Glassfish 3.1.1 をアプリケーション コンテナーとして使用します。

BusinessBean クラス

@ManagedBean
@Stateless
public class BusinessBean {

@Asynchronous
public void asyncMethod() {
    System.out.println("start running asyncMethod in thread "+ Thread.currentThread().getName());

    try {
        Thread.sleep(3000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    System.out.println("finished running asyncMethod in thread "+ Thread.currentThread().getName());
}   

}

LoginBean クラス

@ManagedBean
@RequestScoped
public class LoginBean implements Serializable {

    private static final long serialVersionUID = 1L;

    @ManagedProperty(value="#{businessBean}")
    BusinessBean businessBean;  


    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    public void login(){        
        System.out.println("caller method running in thread "+Thread.currentThread().getName()+" date:"+System.currentTimeMillis());
        businessBean.asyncMethod();
        System.out.println("caller method running in thread "+Thread.currentThread().getName()+" date:"+System.currentTimeMillis());
    }

    public BusinessBean getBusinessBean() {
        return businessBean;
    }

    public void setBusinessBean(BusinessBean businessBean) {
        this.businessBean = businessBean;
    }


}
4

1 に答える 1

1

BusinessBeanのアノテーションを取り除きManagedBeanます。これは Enterprise Java Bean である必要があり、アノテーションのおかげです@Stateless

また、次の方法で注入します@EJB

@EJB
private BusinessBean businessBean;

詳細については、このリンクを参照してください。

于 2013-07-15T06:19:55.313 に答える