发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 CQRS 扩展性 并发编程 事件溯源 分布式 SOA

ear包中的jar包相互调用

2009-09-04 17:25
赞助商链接

如题,最近开发系统, 开发环境EJB3.0, 按业务模块分别开发并打成JAR包,然后装配成ear包发布..
现在有2个问题与大家讨论一下
1.jar包的ejb-jar.xml,persistence.xml文件必须每个jar包都要单独配置的, 放在ear下的META-INF不起作用???!!, 如果有10多个jar包, 那就要配置10多次,很繁琐, 有没有其他的办法??
2.各个工程之间设置了好了引用关系, 可是jar包中的ejb调用其他jar包ejb的时候,如果使用@EJB 注解调用时可以的, 但是有的情况, 必须要"xxxServiceImplxxx/local",这样就需要加上ear包名, 形如"earname/xxxServiceImplxxx/local", 有解决方法吗?


[该贴被tangshd于2009-09-04 17:27修改过]

2009-09-04 18:03

1.第一个EJB是组件模块,这些XML配置就是组件模块的定义,所以必须每个包有一套。

2.EJB之间远程调用或跨EAR包调用,需要特别的。

EJB是一个分布式组件,多台服务器是它缺省的运行环境,这和Spring的单个JVM单个Windows的个体户运行环境的语境是不一样的。

所以,如果你用过EJB2,已经感觉EJB3节省很多,但是基本的一些没变。

2009-09-04 18:19

感谢banq的及时回复..

第一个问题, 我查了资料, 正如banq所说的, 这是必须的..

第二个问题, 我有不同意见, EAR中的jar包引用另外一个jar包, 应该不是远程调用, 而且是APP CLASS LOADER统一加载的,
a.jar包中的调用global.jar中的某个service, 如果用@EJB注解是可以直接调用的, 但是如果用了
public static Object getLocalEJB(String jndiName) {
try {
InitialContext ctx = new InitialContext();
return ctx.lookup(jndiName+"/local");
} catch (NamingException e) {
e.printStackTrace();
}
return null;
}
来引用一个EJB, 必须指定EAR的名称, getLocalEJB("earName/xxxServiceImplxxx"),这样是可以获得EJB实例的.而且并没有跨EAR使用啊

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系管理员 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com