GlassFish exception



我对这一切都很陌生。我试图通过GlassFish推出一项网络服务。当我试图构建这个项目时,我遇到了一个错误。

ant -f /home/philipp/NetBeansProjects/sks3 -DforceRedeploy=false -Ddirectory.deployment.supported=true -Dnb.wait.for.caches=true run
init:
deps-module-jar:
deps-ear-jar:
deps-jar:
check-rest-config-props:
generate-rest-config:
library-inclusion-in-archive:
library-inclusion-in-manifest:
compile:
compile-jsps:
In-place deployment at /home/philipp/NetBeansProjects/sks3/build/web
Initializing...
deploy?DEFAULT=/home/philipp/NetBeansProjects/sks3/build/web&name=sks3&contextroot=/sks3&force=true failed on GlassFish Server 3.1.2 
 Error occurred during deployment: Exception while deploying the app [sks3] : Invalid TYPE-level @EJB with name() = [] and beanInterface = [class java.lang.Object] in class Webservice.MeasurementResources.  Each TYPE-level @EJB must specify both name() and beanInterface().at org.glassfish.apf.AnnotationInfo@3b63118a. Please see server.log for more details.
/home/philipp/NetBeansProjects/sks3/nbproject/build-impl.xml:1028: The module has not been deployed.
See the server log for details.
BUILD FAILED (total time: 6 seconds)

我不知道出了什么问题,但根据消息,它必须在文件MeasurementResrces.java…中

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Webservice;
import Exception.DALException;
import dal.MeasurementDao;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;
import javax.inject.Named;
import javax.ws.rs.Path;
import repo.Measurement;
/**
 *
 * @author philipp
 */
//@Stateless
//@inject
@EJB
//@LocalBean
@Named
@Path("Measurement")
public class MeasurementResources {
    @Inject
    MeasurementDao mDao;
    public void add(Measurement arg) throws DALException{
        mDao.save(arg);
    }
 /*   public void getAll(Measurement arg) throws DALException{
        mDao.getAll();
    }
    */
}

有人至少有一点暗示,问题出在哪里?

您使用的是类型级EJB,而没有声明namebeanInterface

/**
 *
 * @author philipp
 */
//@Stateless
//@inject
@EJB(name="MyEjb", beanInterface=RemoteEjb.class)
//@LocalBean
@Named
@Path("Measurement")
public class MeasurementResources {
    @Inject
    MeasurementDao mDao;
    public void add(Measurement arg) throws DALException{
        mDao.save(arg);
    }
}
@Remote
public interface RemoteEjb {
    public void doSomething();
}
@Stateless
public class MyEjb implements RemoteEjb {
   ...
}

name是您尝试注入的EJB的名称。beanInterface是本地或远程接口。这不是真正的注射。这是一种使用注释来替换部署描述符ejb-ref元素的方法。您应该使用JNDI查找来注入ejb。

我不知道你想做什么,但注入ejb的常见方法如下:

@Named
@Path("Measurement")
public class MeasurementResources {
    @EJB
    private MyEjb myejb;
    @Inject
    MeasurementDao mDao;
    public void add(Measurement arg) throws DALException{
        mDao.save(arg);
    }
    ...
 }       

相关内容

  • 没有找到相关文章

最新更新