相关疑难解决方法(0)

何时需要或方便地将Spring或EJB3或它们全部一起使用?

混淆使用JSF2 + Spring + EJB3或它们的任意组合让我感到有些困惑.我知道Spring的一个主要特性是依赖注入,但是我可以使用JSF托管bean @ManagedBean@ManagedPropertyanotations,并获得依赖注入功能.使用EJB3,我更加困惑何时将其与JSF一起使用,或者甚至有理由使用它.

那么,在什么样的情况下使用Spring + JSF2或EJB3 + JSF2是个好主意?

到目前为止,我只使用JSF2创建了一些小型Web应用程序,从不需要使用Spring或EJB3.但是,我在许多地方看到人们正在将所有这些东西放在一起.

jsf spring ejb java-ee service-layer

39
推荐指数
2
解决办法
9689
查看次数

EntityManager真的是线程安全的吗?

我在说这里的基本用法:

@Stateless
public class BookServiceBean implements BookService {
  @PersistenceContext EntityManager em;
  public void create(Book book) { this.em.persist(book);}
} 
Run Code Online (Sandbox Code Playgroud)

谷歌上面的问题,StackOverflow说是的,但没有 - 接受的答案是肯定的,但后续的是否定的; Spring.io说是和不,而且似乎是Java EE专家的Adam Bien给出了一个不合格的是.

我对一个简单的预定bean的经验表明答案是否定的:

@Stateless
public class TimerTick implements TimerTickAbs, Runnable {
  @PersistenceContext private EntityManager entityManager;
  @Override
  public void run() {
    Query q = entityManager.createQuery("SELECT blah...");
  }
  @Override
  public Runnable runner() {
    return this;
  }
}
Run Code Online (Sandbox Code Playgroud)

抽象界面:

@Local
public interface TimerTickAbs {
  public Runnable runner();
}
Run Code Online (Sandbox Code Playgroud)

开始于:

@Resource ManagedScheduledExecutorService managedExecutorService;
@EJB TimerTick myRunner;

public …
Run Code Online (Sandbox Code Playgroud)

java multithreading jpa glassfish-4

7
推荐指数
2
解决办法
7088
查看次数

标签 统计

ejb ×1

glassfish-4 ×1

java ×1

java-ee ×1

jpa ×1

jsf ×1

multithreading ×1

service-layer ×1

spring ×1