7

Weblogic 10.3.4 が EJB をサーブレットの注釈付きフィールドに挿入しない理由を理解しようと、運が悪くてググってみました。

Ear には、DAO EJB を定義する ejb.jar と、TestServlet を使用した web.war が含まれています。

PluginDataDAO.java

@Stateless
public class PluginDataDAO implements IPluginDataDAO {

}

IPluginDataDAO.java

@Local
public interface IPluginDataDAO  {

}

TestServlet.java

public class TestServlet extends HttpServlet {
    @EJB(mappedName = "PluginDataDAO")
    private IPluginDataDAO pluginDataDAO;
}

web.xml

<web-app version="2.5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID">
<servlet>
    <servlet-name>TestServlet</servlet-name>
    <servlet-class>cz.literak.blog.j2ee.TestServlet</servlet-class>
</servlet>

サーブレットは web.war 内にあり、EJB は ejb.jar 内にあります。マッピングされた name 属性を使用して/使用せずに注釈を試してみましたが、うまくいきませんでした。web.xml を 3.0 にアップグレードしようとすると、3.0 が列挙されていないためにデプロイに失敗しました。なにが問題ですか?なぜ pluginDataDAO はまだ null ですか? ありがとうございました。

4

4 に答える 4

5

私は同じ問題を抱えていて、それを解決しました@ManagedBean:

@ManagedBean
public class TestServlet extends HttpServlet {
    @EJB(mappedName = "PluginDataDAO")
    private IPluginDataDAO pluginDataDAO;
于 2013-12-20T13:04:46.487 に答える
2

サーブレット 3 の問題については。WebLogic 10.3.x は Java EE 5 実装であり、サーブレット 2.5 のみをサポートします。

ただし、この例は機能するはずです。そのサーブレットと EJB のみを含む完全に新しいプロジェクトを試してみてください。

また、最新の WebLogic 12.1.2 で同じコードを試してください。オラクルのサイトから無料でダウンロードできます。

于 2013-08-20T08:28:38.637 に答える
1

このリンクには非常に良い答えがあると思います... Injecting a stateless EJB into Servlet ...

この男 Balus は、正しくないコンストラクターで DI を使用しようとしていると言っています...最も早く設定できるのは init() です ....他の誰かが役立つことを期待して答えをコピーしました

于 2014-05-12T03:03:21.057 に答える