我对这一切都很陌生。我试图通过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,而没有声明name
和beanInterface
。
/**
*
* @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);
}
...
}