1

EJB プロジェクトに依存する Maven Web アプリケーションがあります。

   <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>soar-ejb</artifactId>
        <version>1.0</version>
        <type>jar</type>
    </dependency>

EJB プロジェクトではenv-entryejb-jar.xml次のように を追加しました。

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns = "http://java.sun.com/xml/ns/javaee" 
     version = "3.1"
         xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee     http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd">
    <enterprise-beans>
        <session>
            <env-entry>
                <description>Config file</description>
                <env-entry-name>configFileLocation</env-entry-name>
                <env-entry-type>java.lang.String</env-entry-type>
                <env-entry-value>dropbox-config.properties</env-entry-value>
            </env-entry>
        </session>
    </enterprise-beans>
</ejb-jar>

arquillian を使用して EJB プロジェクトをテストしましたが、次のように使用してこの値を注入できます@Resource 。 @Resource(name = "configFileLocation") private String configFile;

ここで、ejb 依存関係を使用して .war をビルドすると、EJB プロジェクトを含む .war が .jar 内に取得されWEB-INF\libます。この EJB プロジェクト内 (つまり、.jar 内) のejb-jar.xmlファイルは適切な META-INFディレクトリにあります。

しかし今、サーバーにデプロイすると、@Resourceインジェクションは機能しません。はString常にnullです。私が読んだことによるとejb-jar.xml、EJB プロジェクト内と maven が生成する .war 内の両方で正しい場所にあります。

誰かが私が間違って構成したことを知っていますか?

ありがとう!

編集:

セッション要素を次のように変更しました

<session>
        <description>An EJB that loads configuration from a file</description>
        <display-name>ConfigurationProducer</display-name>
        <ejb-name>ConfigurationProducer</ejb-name>
        <ejb-class>com.trf.util.DropboxConfigFileProducer</ejb-class>
        <session-type>Stateless</session-type>
        <env-entry>
            <description>Location of the config file</description>
            <env-entry-name>configFileLocation</env-entry-name>
            <env-entry-type>java.lang.String</env-entry-type>
            <env-entry-value>dropbox-config.properties</env-entry-value>
        </env-entry>
    </session>
4

2 に答える 2

1

ejbプロジェクトの依存関係を に変更し、プロジェクトとプロジェクトをプロジェクトにラップpom.xmlすることで、これを解決しました。Web アーカイブのファイルは次のようになります。providedwarejbearpom.xml

    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>soar-ejb</artifactId>
        <version>1.0</version>
        <scope>provided</scope>
    </dependency>

次に、earプロジェクトpom.xmlには次のものがあります。

 <dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>soar-ejb</artifactId>
        <version>1.0</version>
        <type>ejb</type>
    </dependency>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>soar-war</artifactId>
        <version>1.0</version>
        <type>war</type>
    </dependency>
</dependencies>

@Resourceプロジェクトからサーバーにデプロイすると、env-entriesインジェクションがejb実行されるようになりました。ejb-jar.xmlear

于 2013-06-13T19:43:12.380 に答える