0

問題が発生しました。exxh EJB です。

まず、私のセットアップ: GlassFish と JEE6 を使用しています。WAR としてパッケージ化された REST サービスと、EJB-Jar としてパッケージ化された Bean があります。それらは EAR 内にはありません。EJB は @EJB を介して REST-WAR から使用する必要がありますが、WAR をデプロイしようとすると、GlassFish に次のエラーが表示されます。

展開中にエラーが発生しました:

Exception while deploying the app [exx-upload-1.0] : Cannot resolve reference Local ejb-ref name=com.ex.exx.model.FileUpload/ocr,Local 3.x interface =com.ex.exx.api.IOCRService,ejb-link=null,lookup=,mappedName=,jndi-name=,refType=Session. Please see server.log for more details.

(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())
}

アニーの提案はありますか?私はここで私の失敗を見つけることができません。

4

4 に答える 4

3

@Local を @Remote に置き換えることで、これを解決しました。これはうまくいきますが、理由がわからないので満足できません。

于 2013-04-23T12:18:43.490 に答える
2

@EJBターゲットが EJB でない場合は使用しないでください。WARのクラスに注入しようとしているので、これがあなたのケースだと思います。

代わりに次を使用します。

@Inject
private IOCRService ocr;

基本的に@Inject、次の理由により、ほとんどの場合の方が優れています。

  • よりタイプセーフであり、
  • @Alternatives をサポートしています
  • 注入されたオブジェクトのスコープを認識しています。
于 2013-04-23T12:14:18.023 に答える