部署时EJB注入失败

时间:2013-04-23 11:04:46

标签: glassfish ejb code-injection

我有一个问题exxh EJB。

首先,我的设置:我正在使用GlassFish& JEE6。我将REST-Service打包为WAR,将bean打包为EJB-Jar。他们不在EAR内。 应该通过@EJB从REST-WAR使用EJB,但是当我尝试部署WAR时,GlassFish会显示以下错误:

部署期间发生错误:部署应用程序时出现异常[exx-upload-1.0]:无法解析引用本地ejb-ref name = com.ex.exx.model.FileUpload / ocr,Local 3.x interface = 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);
    }

    ...

这是WAR中的重要部分:

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.

4 个答案:

答案 0 :(得分:3)

通过用@Remote替换@Local来解决这个问题。 然而,这是有效的,我不满意,因为我不明白为什么。

答案 1 :(得分:2)

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

改为使用:

@Inject
private IOCRService ocr;

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

  • 它更安全,
  • 它支持@Alternatives
  • 它知道注入对象的范围。

答案 2 :(得分:2)

基本上,根据规范(例如在tutorial中解释),如果应用程序使用@Remote进行修饰,则应用程序只能访问其他应用程序的EJB。

因此,您有3个选项:

  1. @Remote(你做过的)装饰你的EJB,
  2. 将两者一起打包在耳朵内(因为它们会留在耳朵里) 然后相同的应用程序)但是如果你打算单独部署它们 应用程序甚至单独的服务器,使用1。)
  3. 将CDI与@Inject一起使用,但这仍然只会发现EJB 在同一个应用程序中,如果没有,则装饰为@Remote
  4. HTH, 亚历

答案 3 :(得分:-1)

另一种解决方案是添加@Stateless(name=""),这种工作形式