4

これは、JMS を使用する最初の試みです。ファイルのアップロードに使用できるサーブレットを含む war ファイルを正常に作成/デプロイしました。ファイルがアップロードされると、JMS キューにメッセージが送信されます。次に、アップロードされたメッセージをキューから取得するリスナーを作成しましたが、デプロイしようとすると、次のエラーが発生します。

SEVERE: Invalid ejb jar [file-listener-ejb-1.0.jar]: it contains zero ejb. 
Note: 
1. A valid ejb jar requires at least one session, entity (1.x/2.x style), or message-  driven bean. 
2. EJB3+ entity beans (@Entity) are POJOs and please package them as library jar. 
3. If the jar file contains valid EJBs which are annotated with EJB component level annotations (@Stateless, @Stateful, @MessageDriven, @Singleton), please check server.log to see whether the annotations were processed properly.
    at    com.sun.enterprise.deployment.util.EjbBundleValidator.accept(EjbBundleValidator.java:76)
...<snip>...

これは、Maven を使用して構築された、1 つのクラスを持つ非常に単純なプロジェクトです。クラスは次のようになります。

package my.package;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@MessageDriven(mappedName = "jms/FileUploadedQueue", activationConfig = {
        @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue") })
public class FileListener implements MessageListener
{
    private static Logger log = LoggerFactory.getLogger(FileListener.class);

    public FileListener()
    {
        // empty constructor
    }

    public void onMessage(Message message)
    {
        try
        {
            log.info("Received message: " + ((TextMessage)message).getText());
        }
        catch (JMSException ex)
        {
            String error = "Received error code '"
                    + ex.getErrorCode()
                    + "' retrieving message from queue jms/FileUploadedQueue.";

            Exception linkedEx = ex.getLinkedException();

            if (linkedEx != null)
            {
                log.error(error += "Linked exception: ", linkedEx);
            }
            else
            {
                log.error(error, linkedEx);
            }
        }
    }
}

私の pom.xml は次のようになります。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>my.package</groupId>
    <artifactId>uploaded-file-listener</artifactId>
    <version>1.0</version>
    <packaging>ejb</packaging>
    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.4.2</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.14</version>
        </dependency>
        <dependency>
            <groupId>javax.jms</groupId>
            <artifactId>jms</artifactId>
            <version>1.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>                
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <compilerArguments>
                        <bootclasspath>${settings.localRepository}/javax/javaee-endorsed-api/6.0/javaee-endorsed-api-6.0.jar${path.separator}${sun.boot.class.path}</bootclasspath>
                    </compilerArguments>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-ejb-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <ejbVersion>3.1</ejbVersion>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

これにより jar ファイルが作成され、Glassfish 3.1 サーバーに (管理コンソール経由で) デプロイしようとすると、上記のエラーが発生します。

クラスに @MessageDriven アノテーションがあるため、何が間違っているのかわかりません。残念ながら、server.log ファイルには、エラーに関するこれ以上の詳細は含まれていません。

瓶を耳に詰めて展開する必要がありますか?

----------編集----------

ejb jar を含む ear を作成しましたが、ear を Glassfish にデプロイすると同じエラーが発生します。だから、それは注釈と関係があるに違いないと思います。ただし、複数の例/チュートリアルを見てきましたが、何が問題なのかわかりません。

どんな洞察/提案も大歓迎です!!

----------編集 2 ----------

MANIFEST.MF ファイルの内容:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: <name>
Build-Jdk: 1.6.0_24

application.xml の内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC
"-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN"
"http://java.sun.com/dtd/application_1_3.dtd">
<application>
  <display-name>FileListener-ear</display-name>
  <module>
    <ejb>file-listener-ejb-1.0.jar</ejb>
  </module>
</application>

----------編集 3 ----------

ejb-jar ファイルの内容:

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" 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"
    version="3.1">
    <display-name>FileListener</display-name>
    <enterprise-beans>
        <message-driven>
            <ejb-name>FileListener</ejb-name>
            <ejb-class>my.package.FileListener</ejb-class>
            <transaction-type>Container</transaction-type>
        </message-driven>
    </enterprise-beans>
</ejb-jar>
4

3 に答える 3

4

jar ファイルに ejb-jar.xml ファイルが含まれていますか? 欠落している場合、展開時に全体が爆発する理由を説明できます

于 2011-08-17T18:19:50.817 に答える
0

EJB と WAR で構成される EAR といくつかの JAR プロジェクトを GF 4.1 にデプロイすると、突然application.xml.

必要がなくなる前に多くの展開。

于 2015-02-02T22:56:33.080 に答える