gpt4 book ai didi

java - 我可以在 EJB 3.2 中获得类似实体 bean 的东西吗?

转载 作者:行者123 更新时间:2023-12-01 23:36:04 26 4
gpt4 key购买 nike

我最近正在读一本 Java EE 书籍,显然最近从 EJB 规范中删除了实体 bean。你应该使用 JPA 来代替。但我想要实体 bean !!我真正想要的是一个可远程访问的 JPA 持久实体,例如 EJB。像这样的事情:

@Entity
@Remote(MyEntityRemote.class)
@LocalBean
public class MyEntityEJB implements MyEntityRemote {
public void doSomething() {
// actually do something
}
}

如果不删除 Bean 注释并编写 session Bean,这是否可能:

@Stateless
@Remote(StatelessInterfaceToMyEntityRemote.class)
@LocalBean
public class StatelessInterfaceToMyEntity implements StatelessInterfaceToMyEntityRemote {
public void doSomething(MyEntity entity) {
entity.doSomething();
}
}

最佳答案

如果我理解正确的话这是可能的首先创建一个实体:

@Entity
@Table('MyEntityTable')
public class MyEntity {...}

然后,您为实体创建一个 session Bean Facade,通过它公开您可能需要的任何接口(interface)

@Stateless //Facade is a seesion bean so it can be @Stateless or @Statefull for basic CRUD it shoud be @Stateless
public class EntityFacade extends AbstractFacade<MyEntity> {
@PersistenceContext(unitName = "MyPersistanceUnit") //remember to define it first
private EntityManager em;

@Override
protected EntityManager getEntityManager() {
return em;
}

现在您可以定义任何适用于您的实体类的方法。请记住,如果您通过远程接口(interface)公开实体,它将处于分离状态。因此,更新后您首先需要使用 EntityManager

merge(object) 方法

编辑
抽象外观是与 JPA 实体一起使用的概念,NetBeans 在 7.3 版本中自动为您生成它。它用于定义实体上最常见的操作,因此您不必为每个实体重复代码。事情是这样的

public abstract class AbstractFacade<T> {
private Class<T> entityClass;

public AbstractFacade(Class<T> entityClass) {
this.entityClass = entityClass;
}

protected abstract EntityManager getEntityManager();

public void create(T entity) {
getEntityManager().persist(entity);
}

public void edit(T entity) {
getEntityManager().merge(entity);
}

public void remove(T entity) {
getEntityManager().remove(getEntityManager().merge(entity));
}

public T find(Object id) {

return getEntityManager().find(entityClass, id);
}
...
}

上面的函数不需要太多努力就可以完成一些基本的 CRUD 操作。因此,扩展外观使您能够定义开箱即用的操作。当然,这仅适用于基本配置,实体外观可以使用许多实体并在持久保存任何内容之前执行一些业务逻辑。所以在你的情况下它会像这样:

public class EntityFacade extends AbstractFacade<MyEntity> {
@PersistenceContext(unitName = "MyPersistanceUnit") //remember to define it first
private EntityManager em;
@Override
protected EntityManager getEntityManager() {
return em;
}
public doSomething(MyEntity entity)
{
entity.get(...);
...
entity.set(...)
if(iWantToPesristIt)
edit(entity)
else
return;
}
}

关于java - 我可以在 EJB 3.2 中获得类似实体 bean 的东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18675258/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com