Java 我可以在EJB3.2中获得类似实体bean的东西吗?

Java 我可以在EJB3.2中获得类似实体bean的东西吗?,java,jakarta-ee,jpa,entity-bean,ejb-3.2,Java,Jakarta Ee,Jpa,Entity Bean,Ejb 3.2,我最近在读一本JavaEE的书,很明显,实体bean最近从EJB规范中删除了。你应该用JPA来代替。但是我想要实体豆!!我真正想要的是一个可以远程访问的JPA持久实体,比如EJB。大概是这样的: @Entity @Remote(MyEntityRemote.class) @LocalBean public class MyEntityEJB implements MyEntityRemote { public void doSomething() { // actuall

我最近在读一本JavaEE的书,很明显,实体bean最近从EJB规范中删除了。你应该用JPA来代替。但是我想要实体豆!!我真正想要的是一个可以远程访问的JPA持久实体,比如EJB。大概是这样的:

@Entity
@Remote(MyEntityRemote.class)
@LocalBean
public class MyEntityEJB implements MyEntityRemote {
    public void doSomething() {
        // actually do something
    }
}
@Stateless
@Remote(StatelessInterfaceToMyEntityRemote.class)
@LocalBean
public class StatelessInterfaceToMyEntity implements StatelessInterfaceToMyEntityRemote {
    public void doSomething(MyEntity entity) {
        entity.doSomething();
    }
}
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;
}
}
在不删除bean注释和编写会话bean的情况下,这是完全可能的吗

@Entity
@Remote(MyEntityRemote.class)
@LocalBean
public class MyEntityEJB implements MyEntityRemote {
    public void doSomething() {
        // actually do something
    }
}
@Stateless
@Remote(StatelessInterfaceToMyEntityRemote.class)
@LocalBean
public class StatelessInterfaceToMyEntity implements StatelessInterfaceToMyEntityRemote {
    public void doSomething(MyEntity entity) {
        entity.doSomething();
    }
}
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;
}
}

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

@Entity
@Table('MyEntityTable')
public class MyEntity {...}
然后为实体创建一个会话bean facade,通过它公开您可能需要的任何接口

@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;
}
上面的函数可以轻松完成一些基本的CRUD操作。因此,扩展facade使您能够定义does操作,可以说是开箱即用。当然,对于基本配置,实体facade可以使用许多实体并在持久化之前执行一些业务逻辑。因此,在您的情况下,它将是这样的:

@Entity
@Remote(MyEntityRemote.class)
@LocalBean
public class MyEntityEJB implements MyEntityRemote {
    public void doSomething() {
        // actually do something
    }
}
@Stateless
@Remote(StatelessInterfaceToMyEntityRemote.class)
@LocalBean
public class StatelessInterfaceToMyEntity implements StatelessInterfaceToMyEntityRemote {
    public void doSomething(MyEntity entity) {
        entity.doSomething();
    }
}
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;
}
}
公共类EntityFacade扩展了AbstractFacade{
@PersistenceContext(unitName=“MyPersistanceUnit”)//记得先定义它
私人实体管理者;
@凌驾
受保护的EntityManager getEntityManager(){
返回em;
}
公共剂量测量(MyEntity实体)
{
实体。获取(…);
...
entity.set(…)
如果(IwantTopEsistit)
编辑(实体)
其他的
返回;
}
}

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

@Entity
@Table('MyEntityTable')
public class MyEntity {...}
然后为实体创建一个会话bean facade,通过它公开您可能需要的任何接口

@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;
}
上面的函数可以轻松完成一些基本的CRUD操作。因此,扩展facade使您能够定义does操作,可以说是开箱即用。当然,对于基本配置,实体facade可以使用许多实体并在持久化之前执行一些业务逻辑。因此,在您的情况下,它将是这样的:

@Entity
@Remote(MyEntityRemote.class)
@LocalBean
public class MyEntityEJB implements MyEntityRemote {
    public void doSomething() {
        // actually do something
    }
}
@Stateless
@Remote(StatelessInterfaceToMyEntityRemote.class)
@LocalBean
public class StatelessInterfaceToMyEntity implements StatelessInterfaceToMyEntityRemote {
    public void doSomething(MyEntity entity) {
        entity.doSomething();
    }
}
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;
}
}
公共类EntityFacade扩展了AbstractFacade{
@PersistenceContext(unitName=“MyPersistanceUnit”)//记得先定义它
私人实体管理者;
@凌驾
受保护的EntityManager getEntityManager(){
返回em;
}
公共剂量测量(MyEntity实体)
{
实体。获取(…);
...
entity.set(…)
如果(IwantTopEsistit)
编辑(实体)
其他的
返回;
}
}

只要您的实体类是可序列化的,就可以使用远程会话bean方法,将实体类用作参数和/或返回类型。(您知道“EJB”的意思是“企业JavaBean”,而不是“实体bean”?EJB是会话bean和消息驱动bean,它们都还在规范中。)用例是什么?拥有一个带有远程接口的JPA持久实体意味着对getter的每次调用都使用RMI。即使使用老式的实体bean,也最好使用会话bean作为远程接口,然后使用实体bean。只要实体类是可序列化的,就可以使用远程会话bean方法,将实体类用作参数和/或返回类型。(您知道“EJB”的意思是“企业JavaBean”,而不是“实体bean”?EJB是会话bean和消息驱动bean,它们都还在规范中。)用例是什么?拥有一个带有远程接口的JPA持久实体意味着对getter的每次调用都使用RMI。即使使用老式的实体bean,将会话bean作为远程接口始终是一个好主意,而远程接口又使用实体bean?它不在JavaEEAPI中。什么是
AbstractFacade
?它不在JavaEEAPI中。