EJB注入部署失败

我有一个exxh EJB的问题。

首先,我的设置:我正在使用GlassFish和JEE6。 我得到了一个打包成WAR的REST服务和一个打包成EJB-Jar的bean。 它们不在EAR内。 应该通过@EJB从REST-WAR中使用EJB,但是当我尝试部署WAR时,GlassFish会显示此错误:

部署期间发生错误:部署应用程序时出现异常[exx-upload-1.0]:无法解析引用本地ejb-ref名称= com.ex.exx.model.FileUpload / ocr,本地3.x接口= com.ex.exx .api.IOCRService,EJB链接= NULL,查找=,= mappedName,JNDI名称=,= RefType的会话。 有关更多详细信息,请参阅server.log。

(之前部署了EJB,没有任何错误)。

我不知道为什么。 这里是EJB代码:

接口:

@Local
public interface IOCRService {
    public String performOCRonImage(BufferedImage input);
}

和实施:

@Stateless
@LocalBean
public class OCRScanner implements IOCRService  {

    private Logger logger = Logger.getLogger(this.getClass().getName());
    private final static String NOT_RECOGNIZED = "Can not regocnize text";
    /**
     * Default constructor.
     */
    public OCRScanner() {
        logger.log(Level.INFO, "### OCR SCANNER BUILD" + this);
    }



    public String performOCRonImage(BufferedImage input) {
    logger.log(Level.INFO, "### OCR SCANNER CALLED" + this);
    }

    ...

这里是战争中的重要部分:

public class FileUpload {
private final File PROPERTIES_FILE = new File(
        "fileUploadProperties.properties");
private final String PARAMETER_NAME = "file";
private final Logger logger = Logger.getLogger(this.getClass().getName());


@EJB
    private IOCRService ocr;
    public Response uploadFile(...) {
    // do some stuff
    logger.log(Level.INFO, "### EJB" + ocr.toString())
    }
Anny suggestions? I can not find my failure here.

用@Remote替换@Local解决了这个问题。 然而,这种方法有效,我不满意,因为我不明白为什么。


如果目标不是EJB,则不应使用@EJB 。 我想这是你的情况,因为你试图在WAR中注入一个类。

而是使用:

@Inject
private IOCRService ocr;

基本上,@ @Inject在大多数情况下更好,因为:

  • 它更安全,
  • 它支持@Alternatives
  • 它意识到注入对象的范围。

  • 基本上,根据规范(例如,在本教程中解释),应用程序只能访问其他应用程序的EJB,如果它们用@Remote修饰的话。

    因此,你有3个选择:

  • @Remote装饰你的EJB(你所做的),
  • 将两个包装在一起放在耳朵内(因为它们将在同一个应用程序中)。 但是,如果您打算将它们部署在单独的应用程序或单独的服务器中,请使用1)
  • 将CDI与@Inject一起使用,但是如果在同一个应用程序中,它仍然只发现EJB,或者如果不是,则将其作为@Remote装饰。
  • HTH,Alex

    链接地址: http://www.djcxy.com/p/58779.html

    上一篇: EJB Injection failure on deploy

    下一篇: Cannot inject a local EJB. Dependency Injection failed