【发布时间】:2012-07-02 04:09:09
【问题描述】:
我的 Java EE 应用程序使用 crawler4j,它使用以下代码开始抓取:
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 是一个具有@Stateless bean 实现的@Local bean 接口。我在许多其他地方注入了这个 bean,它工作正常。
我认为通过使用“controller.start(Crawler.class, 1)”开始爬网会导致 Crawler.class 成为 POJO 而不是 EJB。因此 Crawler.class 中的注释被忽略。
【问题讨论】:
-
什么? (a) 您的第一行代码无效;那应该是对变量的赋值吗? (b) 这是什么
SeedFacadeLocal类型? (c) 你为什么使用@Inject和一个看起来像 EJB 的变量?如果你要问一个问题,至少要问一个有意义的问题! -
我会更新,但我认为找到解决方案并不重要
-
细节没有。你可以写
CrawlController controller; controller.start(Crawler.class, 1);。但是当我看到一个包含无法编译的代码的问题时,我无法说出它的真正含义。
标签: dependency-injection ejb nullpointerexception code-injection