java - 单例 session Bean

标签 java ejb

我正在尝试为单个 session bean 提供一个基本模板。然后,我举了《计数器的架构》中包含的例子:

https://docs.oracle.com/javaee/7/tutorial/ejb-basicexamples002.htm

但是,在运行示例时,我无法打印 count.hitCount 的值。

我发现访问变量时的常见问题是没有 getter。例如,在 index.html 中:

<ui:define name="title">
        This page has been accessed #{count.hitCount} time(s).
</ui:define>

但是,在 Count.java 中包含 getter getHitCount():

@Named
@SessionScoped
public class Count implements Serializable {

    @EJB
    private CounterBean counterBean;

    private int hitCount;

    public Count() {
        this.hitCount = 0;
    }

    public int getHitCount() {
        hitCount = counterBean.getHits();
        return hitCount;
    }
    public void setHitCount(int newHits) {
        this.hitCount = newHits;
    }

最后,CounterBean.java增加变量:

@Singleton
public class CounterBean {
    private int hits = 1;

    // Increment and return the number of hits
    public int getHits() {
        return hits++;
    }
}

感谢您的帮助和评论,我们非常感激。

最佳答案

带有显示次数计数器的 Facelet:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html">
  <h:head>
    <title>Facelet Title</title>
</h:head>
  <h:body>
    This page displayed #{counterController.hitCount} times.
  </h:body>
</html>

CounterController 是一个 @RequestScoped bean,用于在其 @PostConstruct 方法中递增 CounterBean.hitCount:

package x;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.inject.Named;
import javax.enterprise.context.RequestScoped;

@Named( value = "counterController" )
@RequestScoped
public class counterController
{

  @EJB
  private CounterBean counterBean;

  @PostConstruct
  public void initialize()
  {
    counterBean.incHitCount();  
  }

  public int getHitCount()
  {
    return counterBean.getHitCount();
  }

  public CounterController()
  {
  }

}

CounterBean 是一个用于存储 hitCount 的 @Singleton EJB。 @StartUp 注释将其作为一个急切构建的 bean(在应用程序启动时创建,在接受任何客户端请求之前):

package x;

import javax.ejb.Singleton;
import javax.ejb.Startup;
import lombok.Data;

@Singleton
@Startup
public class CounterBean
{
  private int hitCount;

  public int getHitCount()
  {
    return hitCount;
  }

  public void incHitCount()
  {
    hitCount++;
  }

  public CounterBean()
  {}
}

关于java - 单例 session Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43987676/

相关文章:

jakarta-ee - 单个应用程序服务器实例中不同应用程序中的 EJB 本地/远程接口(interface)

java - Spring Boot JAR - 缺少 EmbeddedServletContainerFactory

java - 从 Integer 包装类转换为 int 原始类

java - 由于无状态 bean 引用,有状态 bean 钝化失败

java - 在Jboss webservice中使用Log4j时写入重复数据

jboss 7.1 调用 ejb 到 jboss 4.2

java - 无状态 session bean 中的高效 JDBC 连接管理

java - Maven 项目 : How to specify a relative path in a *. ini 文件?

java - 如何在pdf-java中设置字段名称

java - TextView.setText()使我的应用程序在HTC One和Bluestacks上崩溃