java - EJB/JSF java.lang.ClassNotFoundException : com. ericsantanna.jobFC.dao.DAOFactoryRemote 来自本地模块加载器的 [模块 "com.sun.jsf-impl:main"]

标签 java jsf-2 primefaces dao ejb-3.1

我是第一次使用 EJB 和 JSF,我无法解决这个问题:

     20:23:12,457 Grave [javax.enterprise.resource.webcontainer.jsf.application] (http-localhost-127.0.0.1-8081-2) com.ericsantanna.jobFC.dao.DAOFactoryRemote from [Module "com.sun.jsf-impl:main" from local module loader @439db2b2 (roots: C:\jboss-as-7.1.1.Final\modules)]: java.lang.ClassNotFoundException: com.ericsantanna.jobFC.dao.DAOFactoryRemote from [Module "com.sun.jsf-impl:main" from local module loader @439db2b2 (roots: C:\jboss-as-7.1.1.Final\modules)]

当我执行 selectOneMenu 或单击 commandButton 之类的操作时,我会收到此消息。

DAOFactory.class

@Singleton
@Remote(DAOFactoryRemote.class)
public class DAOFactory implements DAOFactoryRemote {

private static final long serialVersionUID = 6030538139815885895L;

@PersistenceContext
private EntityManager entityManager;

@EJB
private JobDAORemote jobDAORemote;

/**
 * Default constructor. 
 */
public DAOFactory() {
    // TODO Auto-generated constructor stub
}

@Override
public JobDAORemote getJobDAO() {
    JobDAO jobDAO = (JobDAO) jobDAORemote;
    jobDAO.setEntityManager(entityManager);

    return jobDAO;
}

JobDAO.class

@Stateless
@Remote(JobDAORemote.class)
public class JobDAO implements JobDAORemote {

private static final long serialVersionUID = -5483992924812255349L;

private EntityManager entityManager;

/**
 * Default constructor. 
 */
public JobDAO() {
    // TODO Auto-generated constructor stub
}

@Override
public void insert(Job t) {
    entityManager.persist(t);
}

@Override
public Job findById(Class<Job> classe, Long id) {
    return entityManager.getReference(classe, id);
}

@Override
public Job findByName(Class<Job> clazz, String name) {
    return entityManager
            .createQuery("SELECT job FROM " + clazz.getName() + " job WHERE job.nome = :nome"
                , Job.class)
            .setParameter("name", name)
            .getSingleResult();
}
...

TriggerFormBean.class

@ManagedBean
@ViewScoped
@Stateless
public class TriggerFormBean implements Serializable    {

private static final long serialVersionUID = -3293560384606586480L;

@EJB
private DAOFactoryRemote daoFactory;

@EJB
private TriggerManagerRemote triggerManagerRemote;
...

triggerForm.xhtml(有问题的部分)

                            </p:layoutUnit>
                            <p:layoutUnit id="eastConditionPanel" position="center" size="50%">
                                <p:panel header="Conditions to Release"  style="width:97%;height:97%;">
                                    <h:panelGrid columns="2" cellpadding="3">
                                        <h:outputLabel value="Condition Name:" for="conditionName" />
                                        <p:inputText id="conditionName" value="#{triggerFormBean.newCondition.name}" />
                                    </h:panelGrid>

                                    <p:commandButton value="Add Condition" update="conditionsToReleaseList" id="addConditionToRelease"  
                                        actionListener="#{triggerFormBean.addNewCondition}" />

                                    <p:orderList 
                                            id="conditionsToReleaseList" 
                                            value="#{triggerFormBean.trigger.conditionsToRelease}" 
                                            var="condition" 
                                            controlsLocation="none"  
                                            itemLabel="#{condition.name}" 
                                            itemValue="#{condition}" 
                                            iconOnly="true"
                                            style="width:97%;heigth:97%;"/>
                                  </p:panel>
                        </p:layoutUnit>

在 TriggerFormBean.class 中,如果注释 daoFactory,我们会得到与 triggerManagerRemote 相同的异常,两者都用 @EJB 注释。

我不明白我的 DAOFactory 和“Module com.sun.jsf-impl:main”之间的关系...

当我单击 commandButton 时,会发生异常,它仅从 inputText 获取文本,设置为 Condition 实例并添加到由 orderList 映射的 ArrayList。

设置:JBoss 7.1、Primefaces 3.4

谢谢。

最佳答案

其实我也遇到过同样的麻烦。 奇怪的是,降级 JBoss 中的模块解决了我的问题:

<module xmlns="urn:jboss:module:1.1" name="javax.faces.api">
<dependencies>
    <module name="javax.el.api" export="true"/>
    <module name="javax.servlet.api" export="true"/>
    <module name="javax.servlet.jsp.api" export="true"/>
    <module name="javax.servlet.jstl.api" export="true"/>
    <module name="javax.validation.api" export="true"/>
</dependencies>

<resources>
    <resource-root path="jboss-jsf-api_2.1_spec-2.0.1.Final.jar"/>
    <!-- Insert resources here -->
</resources>

而不是:

<module xmlns="urn:jboss:module:1.1" name="javax.faces.api">
<dependencies>
    <module name="javax.el.api" export="true"/>
    <module name="javax.servlet.api" export="true"/>
    <module name="javax.servlet.jsp.api" export="true"/>
    <module name="javax.servlet.jstl.api" export="true"/>
    <module name="javax.validation.api" export="true"/>
</dependencies>

<resources>
    <resource-root path="jboss-jsf-api_2.1_spec-2.1.21.Final.jar"/>
    <!-- Insert resources here -->
</resources>

区别在于所使用的版本。 但我无法解释为什么。

希望这有帮助

关于java - EJB/JSF java.lang.ClassNotFoundException : com. ericsantanna.jobFC.dao.DAOFactoryRemote 来自本地模块加载器的 [模块 "com.sun.jsf-impl:main"],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13521050/

相关文章:

java - 从 selectOneMenu JSF 获取值

javascript - primefaces 命令按钮使用 jquery 更新数据表内

java - 为什么 instanceof 运算符不使用驼峰式表示法?

java - 在 Java 中,在类的主体中声明和初始化 java.util.(ex.list) 与首先导入相比有什么好处?

java - 使用 Jquery/Javascript 的 Spring 表单选择选择/单击事件

jsf - 可收藏的 PrimeFaces 数据表分页器

tomcat - 如何使用 primefaces 在 apache tomcat 中上传文件?

java - 使用来自谷歌 Guava 的 Murmur3 生成长唯一 ID

jsf - 如果目标 url 必须最初从服务器获取,如何使用 JSF 打开外部 url 的空白页面?

java - 为什么我的@ApplicationScope CDI bean 没有更新?