【问题标题】:Cross referencing an Entity from another ear从另一只耳朵交叉引用实体
【发布时间】:2010-01-18 18:10:18
【问题描述】:

我基本上拥有的是这个(我的真实域代码的混淆示例):

在 CarDaoEar 中:

@Entity
public class Car {
//...
}

@Stateless
public class CarDao implements CarDaoRemote {
   @PersistenceContext( unitName = "carPersistenceUnit" )
   private EntityManger em;

   public void storeCar( Car car ) {
      em.persist( car );
   }

   public Car findCar( Car car ) {
     return em.find( Car.class, car.getID );
   }
}

@Remote
public interface CarDaoRemote {
   public void storeCar( Car car );

   public Car findCar( Car car );
}

在 CarInventoryTimerEar 中:

@Stateless
public class CarInventoryTimer {

   @EJB
   private CarDaoRemote _carDaoRemote;

   // do some stuff with _carDaoRemote...

}

所以问题是,如果我用 CarInventoryTimerEar 打包实体和 dao bean,那么应用服务器会抱怨我正在尝试再次部署实体 - 我明白这一点。但是,如果我不包含我得到 ClassNotFoundException 的类 - 这也是有道理的。

我确定我不是第一个做类似事情的人 - 所以对于所有 EJB 专家,我做错了什么?我该如何完成这项工作?

TIA

【问题讨论】:

    标签: java ejb-3.0 ejb


    【解决方案1】:

    如果我没看错的话,你的一只耳朵在想在另一只耳朵中使用 EJB。您应该能够从可以包含在第二个中的第一个中创建一个客户端 jar。这样第二只耳朵就可以使用客户端 jar 而不会得到 ClassNotFoundExceptions。

    【讨论】:

    • 当我这样做时,应用服务器会尝试在客户端 jar 中加载实体类 - 也许我可以剥离客户端 jar 中的注释?
    【解决方案2】:

    我的解决方案(我不喜欢)是在没有所有注释的“代理”项目中包含 Car & CarDaoRemote 类和接口。然后我让 CarInventoryTimerEar 直接依赖于代理项目而不是 dao 项目。

    我希望这对其他人有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-11
      • 2017-12-16
      • 2017-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多