Dependency injection EJB未注入

Dependency injection EJB未注入,dependency-injection,ejb,nullpointerexception,code-injection,Dependency Injection,Ejb,Nullpointerexception,Code Injection,我的Java EE应用程序使用以下代码启动爬网: CrawlConfig config = new CrawlConfig(); config.setCrawlStorageFolder("C:/crawler4j_storage"); PageFetcher pageFetcher = new PageFetcher(config); RobotstxtConfig robotstxtConfig = new RobotstxtConfig(); RobotstxtServer robotst

我的Java EE应用程序使用以下代码启动爬网:

CrawlConfig config = new CrawlConfig();
config.setCrawlStorageFolder("C:/crawler4j_storage");
PageFetcher pageFetcher = new PageFetcher(config);
RobotstxtConfig robotstxtConfig = new RobotstxtConfig();
RobotstxtServer robotstxtServer = new RobotstxtServer(robotstxtConfig, pageFetcher);
CrawlController controller = new CrawlController(config, pageFetcher, robotstxtServer);

controller.start(Crawler.class, 1);
EJB被注入Crawler.class中:

@Stateless
@LocalBean
public class Crawler extends WebCrawler {

    @Inject private SeedFacadeLocal seedEJB;

    public void doSomething () {
        seedEJB.findAll(); // gives the NullPointerException
    }
我猜这与Crawler.class作为参数传递的方式有关。SeedFacadeLocal是一个@localbean接口,它有一个@Stateless bean实现。我在许多其他地方注射了这种豆子,效果很好


我认为使用“controller.start(Crawler.class,1)”启动爬网会导致Crawler.class成为POJO而不是EJB。因此,Crawler.class中的注释被忽略。

CrawlController
通过一个简单的
newInstance
调用创建爬虫实例:

这不会进行任何类型的注入,因此爬虫程序的注入字段将为空

如果要使用注入式爬虫程序,则需要控制
CrawlController
创建爬虫程序的方式。然而,没有明显的方法可以做到这一点;从这个角度来看,它的设计相当糟糕


您可能需要做的是将您的域逻辑(您在EJB中编写的内容)从爬虫类中分离出来,并编写一个简单的、可更新实例的爬虫类,在适当的时候调用EJB。EJB本身不是一个爬虫程序。您可以使用JNDI获得对EJB的引用。

什么?(a) 您的第一行代码无效;这应该是变量的赋值吗?(b) 这是什么
SeedFacadeLocal
类型?(c) 为什么要将
@Inject
与一个看起来像EJB的变量一起使用?如果你要问一个问题,至少要问一个有意义的问题!我会更新的,但我认为找到解决方案并不重要,细节不重要。您可以编写
爬行控制器;控制器启动(Crawler.class,1)。但当我看一个包含未编译代码的问题时,不可能知道它的真正含义。