在JBOSS 7.1

问题描述:

汽车无运行进样BeanClass到了ServletContextListener这就是我有一个是在开始了我的JBOSS 7.1服务器运行的ServletContextListener。这基本上监听一个文件夹,并等待新文件,并等待新的Excel文件,并重新命名它们。在JBOSS 7.1

的Java

public class StagedFolderListener implements ServletContextListener { 

    @Inject 
    TableDao tableDao; 

@Inject 
ImportDatabase import; 

public void contextInitialized(ServletContextEvent e) { 
    System.out.println("Listener starting..."); 
    Timer timer = new Timer(); 
    timer.schedule(new TimerTask() { 

     @Override 
     public void run() 
     { 
      ProcessData(); 
     } 
    }, 0, 10000); 

} 

public void contextDestroyed(ServletContextEvent e) { 
    System.out.println("Listener destroyed..."); 
} 

public void ProcessData() { 

    String myDirectoryPath = "/home/myStoredFolder"; 

    File dir = new File(myDirectoryPath); 
    for (File child : dir.listFiles()) { 
     String extension = ""; 

     int j = child.getName().lastIndexOf('.'); 
     if (j > 0) { 
      extension = child.getName().substring(j + 1); 
     } 


     if (fileIsOktoBeImported) { 

      // Import the file into the database 

          import.loadDatabase();    


      // Rename the file after processing 
     } 

     else 

     { 
      System.out.println("No processing required on file " 
        + child.getName()); 
     } 
    } 

} 

}

另外我还有一个类,它读取Excel文件和数据仍然存在通过JPA和实体管理器数据库。这工作正常,在自己的权利(我有它连接到GUI,可以从那里进口),但我需要有打电话给我的ServletContextListener内导入进来新的Excel文件loadDatabase()方法。我试图注入将ImportDatabase放入ServletContextListener并调用loadDatabase()方法,但EntityManager持久存在数据库时,我得到一个空指针异常。

的Java

@Stateful 
@LocalBean 
public class ImportDatabase implements TableDao{ 
@Inject 
private EntityManager em; 
Row row = null; 
FileInputStream inp; 
Workbook wb; 

public void loadDatabase() 
{ 

Load data into the Database via JPA 

} 

更新Java来包括EntityManager的生产

的Java

@Stateful 
@RequestScoped 
public class Resources{ 

    @PersistenceContext(type = PersistenceContextType.EXTENDED) 
    private EntityManager em; 

    @Produces 
    public EntityManager getEm() { 
     return em; 
    } 
} 

的是让我叫在ServetContextListener loadDatabase()方法的最佳途径?

任何帮助非常赞赏,

更新

注入ImportDatabase全班分成了ServletContextListener

错误

1时,即时通讯现在得到一个错误:15:06447 ERROR [org.apache.catalina.core.ContainerBase。[jboss.web]。[default-host]。[/ mast]](MSC服务线程1-1)Error configuri类com.ericsson.listener.StagedFolderListener的纳克应用监听器:java.lang.IllegalStateException:JBAS011048:无法在org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:163)[JBoss的构建组件实例 -as-EE-7.1.1.Final.jar:7.1.1.Final] 在org.jboss.as.ee.component.BasicComponent.createInstance(BasicComponent.java:85)的JBoss-AS-EE-7.1。 1.Final.jar:7.1.1.Final] 在1 org.jboss.as.web.deployment.component.WebComponentInstantiator $(WebComponentInstantiator.java:57)的JBoss-AS-web的7.1.1.Final.jar :7.1.1.Final]

显然即时在这里做得不对......只是不知道是什么,任何帮助,非常感谢!

干杯

+3

EntityManager通常不适用于CDI注入'@ Inject'。你有合适的制片人吗? Wthout它的参考将'空' – kostja 2013-03-26 10:12:51

+0

+1 kostja,你不能简单@注入一个实体经理。您需要通过PU访问它(通常这是在生产者方法上完成的)。为什么不给已经设置好的类注入servlet监听器? – Perception 2013-03-26 10:19:31

+1

刚刚在那里更新 - 欢呼@Perception会尝试 – user1694873 2013-03-26 10:21:37

尝试使用@EJB注解注入你的DAO到听众:

@EJB ImportDatabase importDatabase; 

此外,你并不需要注射两TableDAOImportDatabase,选择一个或其他。最后,您当前的生产者是请求作用域,这将阻止它在servlet侦听器的上下文中解析(当侦听器被初始化时,请求作用域将不会被激活)。我会建议删除它的范围。

+0

干杯现在会尝试(Id给你一个+1,但我限制在这一刻与我的0评级:()谢谢 – user1694873 2013-03-26 11:23:51

+0

只是试图使用EJB符号,但仍然得到上述相同的错误 – user1694873 2013-03-26 11:28:29

+0

非常感谢很多spiritwalker - 这是我的问题的解决方案的一部分 - 看到我上面的评论我应该如何标记我的答案,你自己和@Perception ?? – user1694873 2013-03-26 11:47:22