You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NetBeans跨项目EJB注入及CDI使用问题:如何仅通过本地接口实现跨项目调用

解决跨项目EJB/CDI调用的编译依赖问题

这个问题其实很好解决——核心思路是把共享的接口抽出来放到一个独立的中间项目里,彻底解开两个项目之间的编译依赖。我给你一步步说怎么做:

1. 新建一个独立的API类库项目

在NetBeans里创建一个普通的Java类库项目(比如命名为shared-ejb-api),专门用来存放两个项目之间需要共享的接口:

  • 把calledon项目里的EJB接口(比如你提到的CalledOn对应的接口)迁移到这个项目中
  • 给接口加上@Local注解(如果是本地容器内调用,这是最适合的场景),确保接口是public访问权限,示例代码:
    import javax.ejb.Local;
    
    @Local
    public interface CalledOnInterface {
        // 定义你需要调用的方法,比如
        String doSomething();
    }
    

2. 改造calledon项目

  • 在NetBeans中右键点击calledon项目 → 「库」→ 「添加项目」,选择刚才创建的shared-ejb-api项目,把它作为依赖添加进来
  • 修改你的CalledOn EJB类,让它实现这个共享接口,保持原有的EJB注解(比如@Stateless)不变:
    import javax.ejb.Stateless;
    import com.yourpackage.shared.api.CalledOnInterface;
    
    @Stateless
    public class CalledOn implements CalledOnInterface {
        @Override
        public String doSomething() {
            return "Called from CalledOn bean!";
        }
    }
    

3. 改造caller项目

  • 同样给caller项目添加shared-ejb-api项目作为依赖(步骤和上面一样)
  • 在caller项目中,通过共享接口来注入并调用EJB,不需要直接引用CalledOn实现类:
    import javax.ejb.EJB;
    import com.yourpackage.shared.api.CalledOnInterface;
    
    public class CallerService {
        @EJB
        private CalledOnInterface calledOnBean;
    
        public void invokeCalledOn() {
            String result = calledOnBean.doSomething();
            System.out.println(result);
        }
    }
    

4. 部署与运行注意事项

  • 确保shared-ejb-api、calledon、caller三个项目都部署到同一个Java EE应用服务器(比如GlassFish、WildFly),因为本地EJB调用要求所有组件在同一个容器实例内
  • 编译caller项目时,只需要shared-ejb-api的代码存在即可,完全不需要先编译calledon项目——只有在部署运行时,服务器才会把calledon的实现和caller的调用关联起来

这种方式的好处是彻底解耦了两个业务项目的编译依赖,同时符合Java EE中EJB调用的规范,是企业级项目中常用的解耦方案。

内容的提问来源于stack exchange,提问作者JanNilsson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 21:27:39