Dependency injection EJB未注入
我的Java EE应用程序使用以下代码启动爬网: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
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)代码>。但当我看一个包含未编译代码的问题时,不可能知道它的真正含义。