0

我对所有这些东西都很陌生。我尝试通过 GlassFish 启动 Web 服务。当我尝试构建这个项目时,我得到一个错误。

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)

我不知道出了什么问题,但根据消息,它必须在文件 MeasurementResurces.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();
    }
    */
}

有人至少暗示出了什么问题?

4

1 回答 1

1

您正在使用类型级 EJB,但没有声明nameand 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);
    }

    ...
 }       
于 2013-02-08T21:59:12.610 回答