【问题标题】:java.lang.IllegalArgumentException: interface org.jboss.seam.persistence.EntityManagerProxy is not visible from class loaderjava.lang.IllegalArgumentException:接口 org.jboss.seam.persistence.EntityManagerProxy 在类加载器中不可见
【发布时间】:2011-02-14 11:21:21
【问题描述】:

我遇到了一个非常奇怪的错误,我无法理解。 简而言之:我有一个 ImporterBean,它应该读取一个 xml 文件然后做一些事情。 ImporterBean 由 ImporterKicker “启动”,但是当我启动应用程序时 ImporterBean 类中的 ApplicationBean 和 EntityManager 为空。他们是 没有注入那个豆子。在 KickerBean 中正确注入了 ImporterBean 和 ApplicationBean。

请参阅下面的代码,请告诉我我做错了什么(使用接缝 SEAM 2.2.1.CR2)。

@SuppressWarnings({"UnusedDeclaration"})
@Name("importerBean")
@AutoCreate
public class ImporterBean {

private static final FilenameFilter ONLY_XML_FILES = (FilenameFilter) new SuffixFileFilter(".xml");
public static final String IN_DIR = "IN";
public static final String ERROR_DIR = "ERROR";
public static final String PROCESSED_DIR = "PROCESSED";

@In(create = true)
public ApplicationBean applicationBean;

@In
private EntityManager entityManager;


@Asynchronous
@Transactional
public void runImport(@Duration long firstStart, @IntervalDuration long startTimer) {
    log.info("<118100>");
    File inDir = Doing some file stuff...
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

/**
 * Inner class bean to kick the background tasks.
 */
@Startup
@Scope(APPLICATION)
@Name("importerKicker")
public static class ImporterKicker {


    @In(create = true)
    public ImporterBean importerBean;

    @In(create = true)
    public ApplicationBean applicationBean;

    @Create
    public void scheduleOptimizer() {
        final int interval = applicationBean.getImporter118checkInterval();
        if (interval != 0) {

            importerBean.runImport(30 * MILLIS_PER_SECOND, interval * MILLIS_PER_SECOND);
        } else {
        }
    }

}

}

【问题讨论】:

    标签: seam ejb entitymanager


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      由于您使用的是异步调用,因此您不能在事件范围的组件中使用类似的注入。

      改为在 Asyncrhonous 方法里面写:

      @Asynchronous
      @Transactional
      public void runImport(@Duration long firstStart, @IntervalDuration long startTimer) {
          EntityManager entityManager = (EntityManager) Component.getInstance("entityManager");
          ApplicationBean applicationBean = (ApplicationBean) Component.getInstance("applicationBean",true);
          log.info("<118100>");
          File inDir = Doing some file stuff...
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多