2016-07-25 55 views
1

Ich stehe vor dem folgenden Problem: Während der Bereitstellung eines Eclipse ejb-Projekts auf meinem Glassfish Server, bekomme ich eine "Class [. ..] nicht gefunden "im Protokoll meines Servers für eine meiner Bohnen. Daher sagt Eclipse mir, dass "Bereitstellung fehlschlägt".Klasse nicht gefunden in META-INF/lib nach der Bereitstellung auf Glassfish obwohl alle Gläser da sind

Die definitive Ursache für diesen Fehler ist, dass ich eine Klasse aus einem Drittanbieter-Jar (Apache Shiro) verwenden. Während/nach der Bereitstellung kann Glassfish die verwendete Klasse nicht finden. Wenn ich die einzige Codezeile mit der Klasse von Apache shiro überspringe, funktioniert alles einwandfrei.

Ich benutze Maven für die Abhängigkeitsverwaltung und fügte die Maven-Abhängigkeiten meinem Java-Build-Pfad korrekt hinzu (damit ich keine Fehler bei der Implementierung des Codes erhalte) und meiner EJB-Deployment-Assembly.

Die Maven-Abhängigkeiten (alle benötigten JARs) sind in meiner ejb-jar-Datei unter META-INF/lib korrekt verpackt. Dies wurde überprüft (1), indem die ejb-jar-Datei mit einem Eclipse-Export exportiert und untersucht wurde und (2) die Dateien auf dem Glassfish-Server analysiert wurden. Alle Apache Shiro-Jars sind vollständig unter domain1/eclipseApps/My-App-root/META-INF/lib bereitgestellt (Ich habe auch META-INF/Klassen mit demselben Fehler versucht).

Übrigens: Als ich die Apache Shiro-Jars unter domain1/lib hinzugefügt habe, hat alles gut funktioniert.

Daher nehme ich an, dass etwas mit meinem Klassenpfad nicht stimmt, damit Glassfish die Gläser nicht unter/META-INF/lib finden kann.

Mein pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<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>OrganizationAndSecurity</groupId> 
    <artifactId>OrganizationAndSecurity</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>ejb</packaging> 
    <name>Organization and security</name> 
    <description>Provide facilities to manage organization units &amp; members, resources and permissions.</description> 

    <build> 
    <sourceDirectory>ejbModule</sourceDirectory> 
    <resources> 
     <resource> 
     <directory>ejbModule</directory> 
     <excludes> 
      <exclude>**/*.java</exclude> 
     </excludes> 
     </resource> 
    </resources> 
    <plugins> 
     <plugin> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.3</version> 
     <configuration> 
      <source>1.8</source> 
      <target>1.8</target> 
      <failOnMissingWebXml>false</failOnMissingWebXml> 
     </configuration> 
     </plugin> 
     <plugin> 
     <artifactId>maven-ejb-plugin</artifactId> 
     <version>2.5</version> 
     <configuration> 
      <ejbVersion>3.2</ejbVersion> 
      <failOnMissingWebXml>false</failOnMissingWebXml> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    <dependencies> 
    <dependency> 
     <groupId>org.apache.shiro</groupId> 
     <artifactId>shiro-core</artifactId> 
     <version>1.2.5</version> 
     <type>ejb</type> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.shiro</groupId> 
     <artifactId>shiro-web</artifactId> 
     <version>1.2.5</version> 
     <type>ejb</type> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-simple</artifactId> 
     <version>1.6.1</version> 
     <type>ejb</type> 
    </dependency> 
    </dependencies> 
</project> 

Mein ejb-jar.xml

<?xml version="1.0" encoding="UTF-8"?> 
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/ejb-jar_3_2.xsd" version="3.2"> 
    <display-name>OrganizationAndSecurity</display-name> 
</ejb-jar> 

Mein Glassfish-ejb-jar.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 EJB 3.1//EN" "http://glassfish.org/dtds/glassfish-ejb-jar_3_1-1.dtd"> 
<glassfish-ejb-jar> 
    <enterprise-beans> 
     <ejb> 
      <ejb-name>AuthenticatorMessageBean</ejb-name> 
      <jndi-name>jms/queue/authenticationMessageQueue</jndi-name> 
      <resource-ref> 
       <res-ref-name>ConnectionFactory</res-ref-name> 
       <jndi-name>authenticationMessageConnectionFactory</jndi-name> 
      </resource-ref> 
     </ejb> 
    </enterprise-beans> 
</glassfish-ejb-jar> 

ich Eclipse-Mars.2 bin mit (4.5.2), Glassfish 4.1, Java (JDK) 1.8.0_25

Frage: Warum ist mein Glassfish Server nicht in der Lage, die in META-INF/lib deployten Gefäße für mein ejb-Projekt zu finden und kann die Klasse aus der JAR-Datei eines Apache shiro nicht finden?

Antwort

1

kann ein ejb-Projekt keine zusätzlichen Gläser enthalten, wenn Sie dann benötigen, müssen Sie ein Ohr-Projekt, das sowohl Ihre ejb-Projekt als Bibliotheken von Drittanbietern

Ohr-Projekt + ejb-Projekt umfasst + Apache-Shiro