JBoss, EAR, EJB und ClassNotFound

S

Sym

Gast
Hallo,

ich nutze Maven 3, Java 6, JBoss 7.

Ich habe ein EAR, bestehend aus WAR und EJB. Bisher hat es auch funktioniert. Nun habe ich in der EJB-Einheit eine Dependency eingefügt und bekomme beim Deployment folgenden Fehler

Code:
12:55:31,736 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC00001: Failed to start service jboss.deployment.unit."larmic-ts-ejb-1.0-SNAPSHOT.jar".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.unit."larmic-ts-ejb-1.0-SNAPSHOT.jar".INSTALL: Failed to process phase INSTALL of deployment "larmic-ts-ejb-1.0-SNAPSHOT.jar"
	at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:121)
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1765)
	at org.jboss.msc.service.ServiceControllerImpl$ClearTCCLTask.run(ServiceControllerImpl.java:2291)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_26]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_26]
	at java.lang.Thread.run(Thread.java:680) [:1.6.0_26]
Caused by: java.lang.RuntimeException: Error getting reflective information for class de.larmic.ts.ejb.user.impl.RegistrationLocal
	at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:70)
	at org.jboss.as.ee.component.EEModuleClassDescription$DefaultConfigurator.configure(EEModuleClassDescription.java:144)
	at org.jboss.as.ee.component.EEClassConfigurationProcessor.deploy(EEClassConfigurationProcessor.java:100)
	at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:115)
	... 5 more
Caused by: java.lang.NoClassDefFoundError: de/larmic/ts/business/model/userdata/UserData
	at java.lang.Class.getDeclaredMethods0(Native Method) [:1.6.0_26]
	at java.lang.Class.privateGetDeclaredMethods(Class.java:2427) [:1.6.0_26]
	at java.lang.Class.getDeclaredMethods(Class.java:1791) [:1.6.0_26]
	at org.jboss.as.server.deployment.reflect.ClassReflectionIndex.<init>(ClassReflectionIndex.java:65)
	at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:66)
	... 8 more
Caused by: java.lang.ClassNotFoundException: de.larmic.ts.business.model.userdata.UserData from [Module "deployment.larmic-ts-ejb-1.0-SNAPSHOT.jar:main" from Service Module Loader]
	at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:191)
	at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:358)
	at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:330)
	at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:307)
	at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:101)
	... 13 more

Da scheint ein Dependency-Problem vorzuliegen. :)

Auschnitte aus meiner EJB-Pom:

Code:
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-ejb-plugin</artifactId>
	<version>2.3</version>
	<configuration>
		<ejbVersion>3.1</ejbVersion>
		<archive>
			<manifest>
				<addClasspath>true</addClasspath>
			</manifest>
		</archive>
	</configuration>
</plugin>

Bei der dependency wird im Parent die Version angegeben.

Code:
<dependency>
	<groupId>de.larmic.ts</groupId>
	<artifactId>larmic-ts-business-model</artifactId>
</dependency>

Hat jemand eine Idee? Eine MANIFEST.MF muss ich doch nicht anlegen, das übernimmt doch Maven für mich.

Gruß und Dank
 
S

Sym

Gast
Inhalt der MANIFEST.MF:
Code:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: larmic
Build-Jdk: 1.6.0_26
Class-Path: larmic-ts-business-model-1.0-SNAPSHOT.jar

Sieht gut aus. Könnte das am EAR liegen? Ich habe ebenfalls versucht, nur die EJB-Einheit zu deployen, mit demselben Ergebnis.
 
S

Sym

Gast
Ok, das Problem liegt in den EJBs.

Ich habe eine Methode hinzugefügt:

Code:
public void register(final UserData userData) {...}

und das UserData ist aus meinem larmic-ts-business-model.

Mal sehen.
 
S

Sym

Gast
Das Problem tritt ja nur beim Deployment auf. Zur Laufzeit findet der JBoss die Abhängigkeiten.

Hat jemand einen Tip?
 
S

Sym

Gast
Die wurde generiert:

Code:
<?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>larmic-ts-ear</display-name>
  <module>
    <web>
      <web-uri>larmic-ts-webservice-1.0-SNAPSHOT.war</web-uri>
      <context-root>/larmic-ts-webservice</context-root>
    </web>
  </module>
  <module>
    <web>
      <web-uri>larmic-ts-web-1.0-SNAPSHOT.war</web-uri>
      <context-root>/larmic-ts-web</context-root>
    </web>
  </module>
  <module>
    <ejb>larmic-ts-ejb-1.0-SNAPSHOT.jar</ejb>
  </module>
</application>

Da ist das entsprechende Jar nicht enthalten.
 

mvitz

Top Contributor
Erst nachdem ich Glassfish 3 installiert habe (und dort eine vernünftige Fehlermeldung bekommen habe) hab ich das Problem gelöst bekommen.

Ich nehme an, dass dein WAR deine EJBs direkt referenziert, richtig? Wenn ja, dann passiert folgendes, dein EJB JAR wird einmal im EAR mitgeliefert und einmal im WAR unter WEB-INF/lib. Das führt dann dazu, dass der AppServer Probleme bekommt, da z.B. sämtliche EJBs doppelt vorhanden sind.

Lösung: Setzte im WAR Module die Abhängigkeit zum EJB Modul auf den scope provided.
Alternativ könntest du dein EJB Modul in zwei Module (z.B. api und impl) aufsplitten und dein WAR hängt dann nur noch vom API ab (hier sind dann nur Interfaces drin) und das Impl kommt mit ins EAR (hier sind die EJBs, die die API Interfaces implementieren drin).
 

TheDarkRose

Gesperrter Benutzer
Lösung: Setzte im WAR Module die Abhängigkeit zum EJB Modul auf den scope provided.
Alternativ könntest du dein EJB Modul in zwei Module (z.B. api und impl) aufsplitten und dein WAR hängt dann nur noch vom API ab (hier sind dann nur Interfaces drin) und das Impl kommt mit ins EAR (hier sind die EJBs, die die API Interfaces implementieren drin).

Brauchst nicht mal extra zwei Module machen, sondern wenn alle EJB die vom WAR referenziert werden, ein LocalInterface implementieren und im WAR auch nur das LocalInterface referenziert wird, dann einfach normal das EJB-Modul als Abhängigkeit einbinden und packaging-type auf ejb-client. Ist ganz nice :)
 

TheDarkRose

Gesperrter Benutzer
Naja, das Namenschema stellt kein großes Problem dar. Einfach die Inclusions und Exclusions des ebj-client änder ;) Sonst werden folgendes im default ausgeschlossen:
Code:
Default Exclusions:

**/*Bean.class
**/*CMP.class
**/*Session.class
**/package.html
 
S

Sym

Gast
Hallo,

danke für Eure Antworten. Leider ist das Problem damit unverändert.

Ich kann die Klassen zur Laufzeit ja auch in den EJBs verwenden. Das Problem ist nur, wenn ich die Klassen mit in eine Signatur einer Methode übernehme.

Sprich

Code:
package de.larmic.ts.ejb.user.impl;

import javax.ejb.Local;
import javax.ejb.Stateless;

import de.larmic.ts.business.model.userdata.UserData;
import de.larmic.ts.ejb.dummy.DummyDB;
import de.larmic.ts.ejb.exception.EmailAddressAlreadyInUseException;
import de.larmic.ts.ejb.user.Registration;

@Stateless(mappedName = "ejb/RegistrationLocal")
@Local(Registration.class)
public class RegistrationLocal implements Registration {

	@Override
	public void register(final UserData userData) {
		if (isEmailAddressAlreadyInUse(userData.getAuthentication().getEmail())) {
			throw new EmailAddressAlreadyInUseException();
		}
	}

	@Override
	public boolean isEmailAddressAlreadyInUse(final String email) {
		for (final UserData user : DummyDB.getInstance().getActiveUsers()) {
			if (user.getAuthentication().getEmail().equals(email)) {
				return true;
			}
		}

		return false;
	}

}

Obere Methode geht nicht, untere Methode alleine geht.
 

mvitz

Top Contributor
Ich verstehe jetzt noch nicht ganz, wie dein Projekt insgesamt aufgebaut ist und was genau nicht funktioniert, evtl. würden da weitere Ausschnitte (z.B. die POMs) helfen.

Ansonsten habe ich versucht was zu bauen, komisch ist nur, dass mein Beispiel (siehe Anhang) jetzt unter Glassfish3 läuft, JBoss7 allerdings meckert beim aufrufen des Servlets (sourcen sind im mit drin, vorher .zip in .ear umbennen). Jemand da eine Idee?
 

Anhänge

  • app-1.0.0-SNAPSHOT.zip
    12,4 KB · Aufrufe: 8
S

Sym

Gast
Hier meine poms:

EJB:
Code:
<?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">
	<parent>
		<groupId>de.larmic.ts</groupId>
		<artifactId>larmic-ts</artifactId>
		<version>1.0-SNAPSHOT</version>
	</parent>

	<modelVersion>4.0.0</modelVersion>
	<artifactId>larmic-ts-ejb</artifactId>
	<packaging>ejb</packaging>
	<name>larmic-ts-ejb Application</name>

	<build>
		<directory>target</directory>
		<outputDirectory>target/classes</outputDirectory>
		<finalName>${project.artifactId}-${project.version}</finalName>
		<testOutputDirectory>target/test-classes</testOutputDirectory>
		<sourceDirectory>src/main/java</sourceDirectory>
		<scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
		<testSourceDirectory>src/test/java</testSourceDirectory>
		<resources>
			<resource>
				<directory>src/main/resources</directory>
			</resource>
		</resources>
		<testResources>
			<testResource>
				<directory>src/test/resources</directory>
			</testResource>
		</testResources>
		<pluginManagement>
			<plugins>
				<plugin>
					<artifactId>maven-resources-plugin</artifactId>
					<version>2.4.3</version>
					<configuration>
						<encoding>UTF-8</encoding>
					</configuration>
				</plugin>
				<plugin>
					<artifactId>maven-compiler-plugin</artifactId>
					<version>2.3.2</version>
					<configuration>
						<source>1.6</source>
						<target>1.6</target>
					</configuration>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-ejb-plugin</artifactId>
					<version>2.3</version>
					<configuration>
						<ejbVersion>3.1</ejbVersion>
						<archive>
							<manifest>
								<addClasspath>true</addClasspath>
							</manifest>
						</archive>
						<generateClient>false</generateClient>
					</configuration>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>

	<dependencies>
		<dependency>
			<groupId>org.jboss.spec</groupId>
			<artifactId>jboss-javaee-6.0</artifactId>
			<type>pom</type>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax</groupId>
			<artifactId>javaee-api</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>de.larmic.ts</groupId>
			<artifactId>larmic-ts-business-model</artifactId>
		</dependency>
	</dependencies>
</project>

WAR:
Code:
<?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">
	<parent>
		<groupId>de.larmic.ts</groupId>
		<artifactId>larmic-ts</artifactId>
		<version>1.0-SNAPSHOT</version>
	</parent>

	<modelVersion>4.0.0</modelVersion>
	<artifactId>larmic-ts-ear</artifactId>
	<packaging>ear</packaging>
	<name>larmic-ts-ear Application</name>

	<build>
		<directory>target</directory>
		<outputDirectory>target/classes</outputDirectory>
		<finalName>${project.artifactId}-${project.version}</finalName>
		<testOutputDirectory>target/test-classes</testOutputDirectory>
		<sourceDirectory>src/main/java</sourceDirectory>
		<scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
		<testSourceDirectory>src/test/java</testSourceDirectory>
		<resources>
			<resource>
				<directory>src/main/resources</directory>
			</resource>
		</resources>
		<testResources>
			<testResource>
				<directory>src/test/resources</directory>
			</testResource>
		</testResources>
		<pluginManagement>
			<plugins>
				<plugin>
					<artifactId>maven-resources-plugin</artifactId>
					<version>2.4.3</version>
					<configuration>
						<encoding>UTF-8</encoding>
					</configuration>
				</plugin>
				<plugin>
					<artifactId>maven-compiler-plugin</artifactId>
					<version>2.3.2</version>
					<configuration>
						<source>1.6</source>
						<target>1.6</target>
					</configuration>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-ear-plugin</artifactId>
					<version>2.3.2</version>
					<configuration>
						<modules>
							<webModule>
								<groupId>de.larmic.ts</groupId>
								<artifactId>larmic-ts-web</artifactId>
							</webModule>
							<ejbModule>
								<groupId>de.larmic.ts</groupId>
								<artifactId>larmic-ts-ejb</artifactId>
							</ejbModule>
							<!-- jarModule>
								<groupId>de.larmic.ts</groupId>
								<artifactId>larmic-ts-business-model</artifactId>
								<bundleDir>larmicLib</bundleDir>
							</jarModule-->
						</modules>
						<archive>
							<manifest>
								<addClasspath>true</addClasspath>
							</manifest>
						</archive>
					</configuration>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>

	<dependencies>
		<!-- dependency>
			<groupId>de.larmic.ts</groupId>
			<artifactId>larmic-ts-webservice</artifactId>
			<version>${project.version}</version>
			<type>war</type>
		</dependency-->
		<dependency>
			<groupId>de.larmic.ts</groupId>
			<artifactId>larmic-ts-web</artifactId>
			<version>${project.version}</version>
			<type>war</type>
		</dependency>
		<dependency>
			<groupId>de.larmic.ts</groupId>
			<artifactId>larmic-ts-ejb</artifactId>
			<version>${project.version}</version>
			<type>ejb</type>
		</dependency>
	</dependencies>
</project>
 
S

Sym

Gast
Also, er schlägt beim Deployment der EJB-Einheit fehl, wenn ich in die Methoden-Signatur eine externe Klasse verwende. Auch wenn ich das Interface in ein eigenes Projekt auslagere, erhalte ich den Fehler.

Ich bin ratlos...
 

mvitz

Top Contributor
Ich poste mal eben meine POMs für das oben hochgeladene Projekt, allerdings läuft das auch unter JBoss nicht (aber meine EJB wird deployed!).

[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>de.mvitz.test.jf</groupId>
<artifactId>javaee</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
</properties>

<modules>
<module>domain</module>
<module>service</module>
<module>gui</module>
<module>app</module>
</modules>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>de.mvitz.test.jf.javaee</groupId>
<artifactId>domain</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>de.mvitz.test.jf.javaee</groupId>
<artifactId>service</artifactId>
<version>${project.version}</version>
<type>ejb</type>
</dependency>
<dependency>
<groupId>de.mvitz.test.jf.javaee</groupId>
<artifactId>service</artifactId>
<version>${project.version}</version>
<type>ejb-client</type>
</dependency>
<dependency>
<groupId>de.mvitz.test.jf.javaee</groupId>
<artifactId>gui</artifactId>
<version>${project.version}</version>
<type>war</type>
</dependency>
</dependencies>
</dependencyManagement>

</project>[/XML]

DOMAIN
[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>

<parent>
<groupId>de.mvitz.test.jf</groupId>
<artifactId>javaee</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>

<groupId>de.mvitz.test.jf.javaee</groupId>
<artifactId>domain</artifactId>

</project>[/XML]

EJB
[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>

<parent>
<groupId>de.mvitz.test.jf</groupId>
<artifactId>javaee</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>

<groupId>de.mvitz.test.jf.javaee</groupId>
<artifactId>service</artifactId>
<packaging>ejb</packaging>

<dependencies>
<dependency>
<groupId>de.mvitz.test.jf.javaee</groupId>
<artifactId>domain</artifactId>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.3</version>
<configuration>
<ejbVersion>3.1</ejbVersion>
<archive>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
</archive>
<generateClient>true</generateClient>
<clientIncludes>
<clientInclude>**/api/**</clientInclude>
</clientIncludes>
</configuration>
</plugin>
</plugins>
</build>

</project>[/XML]

WAR
[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>

<parent>
<groupId>de.mvitz.test.jf</groupId>
<artifactId>javaee</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>

<groupId>de.mvitz.test.jf.javaee</groupId>
<artifactId>gui</artifactId>
<packaging>war</packaging>

<dependencies>
<dependency>
<groupId>de.mvitz.test.jf.javaee</groupId>
<artifactId>service</artifactId>
<type>ejb-client</type>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
</dependencies>

</project>[/XML]

EAR
[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>

<parent>
<groupId>de.mvitz.test.jf</groupId>
<artifactId>javaee</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>

<groupId>de.mvitz.test.jf.javaee</groupId>
<artifactId>app</artifactId>
<packaging>ear</packaging>

<dependencies>
<dependency>
<groupId>de.mvitz.test.jf.javaee</groupId>
<artifactId>gui</artifactId>
<type>war</type>
</dependency>
<dependency>
<groupId>de.mvitz.test.jf.javaee</groupId>
<artifactId>service</artifactId>
<type>ejb</type>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.5</version>
</plugin>
</plugins>
</build>

</project>[/XML]

Wie gesagt, unter Glassfish v3 läuft das damit erstelle (und oben hochgeladene) EAR ohne Probleme, nur der JBoss kann das Servlet nicht erstelen (beim ersten Zugriff).
 
S

Sym

Gast
Also ich habe das mal angepasst. Leider funktioniert das weder im JBoss noch im Glassfish bei mir. In beiden Fällen bekomme ich die Fehlermeldung.

Kannst Du bitte mal eine Beispiel Service-EJB posten?
 

mvitz

Top Contributor
Na klar, anbei das gesamte Projekt im Anhang (habs gerade nochmal getestet, also das läuft unter Glassfish v3).
 

Anhänge

  • de.mvitz.test.jf.javaee.zip
    12,7 KB · Aufrufe: 10
S

Sym

Gast
Danke noch mal.

Dein Projekt tut es bei mir. Das ist doch schon mal was. Bei mir läuft es leider nicht, ich habe aber wesentlich mehr Abhängigkeiten.

Code:
Caused by: java.lang.ClassNotFoundException: de.larmic.ts.business.model.api.Test from [Module "deployment.larmic-ts-ejb-1.0-SNAPSHOT.jar:main" from Service Module Loader]
	at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:191)
	at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:358)
	at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:330)
	at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:307)
	at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:101)
	... 18 more

10:40:22,105 WARN  [org.jboss.as.server.deployment] (MSC service thread 1-6) Class Path entry jaxb-api.jar in "/content/larmic-ts-web-1.0-SNAPSHOT.war/WEB-INF/lib/jaxb-impl-2.2.1.jar"  does not point to a valid jar for a Class-Path reference.
10:40:22,106 WARN  [org.jboss.as.server.deployment] (MSC service thread 1-6) Class Path entry activation.jar in "/content/larmic-ts-web-1.0-SNAPSHOT.war/WEB-INF/lib/jaxb-impl-2.2.1.jar"  does not point to a valid jar for a Class-Path reference.
10:40:22,106 WARN  [org.jboss.as.server.deployment] (MSC service thread 1-6) Class Path entry jsr173_1.0_api.jar in "/content/larmic-ts-web-1.0-SNAPSHOT.war/WEB-INF/lib/jaxb-impl-2.2.1.jar"  does not point to a valid jar for a Class-Path reference.
10:40:22,106 WARN  [org.jboss.as.server.deployment] (MSC service thread 1-6) Class Path entry jaxb1-impl.jar in "/content/larmic-ts-web-1.0-SNAPSHOT.war/WEB-INF/lib/jaxb-impl-2.2.1.jar"  does not point to a valid jar for a Class-Path reference.
10:40:22,106 WARN  [org.jboss.as.server.deployment] (MSC service thread 1-6) Class Path entry larmic-ts-business-model-1.0-SNAPSHOT.jar in "/content/larmic-ts-web-1.0-SNAPSHOT.war/WEB-INF/lib/larmic-ts-ejb-1.0-SNAPSHOT-client.jar"  does not point to a valid jar for a Class-Path reference.
Was bedeuten diese Warnings? Kann das damit zusammenhängen?
 

mvitz

Top Contributor
1. Also die Warnings sollten in meinem Projekt auch kommen (scheinbar hat der JBoss ein Problem damit, wenn ein JAR unter WAR/WEB-INF/lib ein MANIFEST.MF mit Classpath Eintrag besitzt.

2. Mein Projekt läuft bei dir auch, wenn du das Servlet aufrufst? (Das funktioniert bei mir nämlich nicht)

3. Wenn es sich nur um die JAXB Ahbängigkeiten handelt, die müsstest du weglassen können und zwar weil Java seit 1.6 JAXB direkt im JRE mit ausliefert, d.h. die dort gefundene Version wird sowieso als erste genutzt.
 
S

Sym

Gast
Alles klar, es liegt anscheinend am JBoss. Vielleicht warte ich da doch noch einmal Version 7.1 ab. Mit dem Glassfish tut es alles.

Danke nochmal!
 
S

Sym

Gast
1. Also die Warnings sollten in meinem Projekt auch kommen (scheinbar hat der JBoss ein Problem damit, wenn ein JAR unter WAR/WEB-INF/lib ein MANIFEST.MF mit Classpath Eintrag besitzt.

2. Mein Projekt läuft bei dir auch, wenn du das Servlet aufrufst? (Das funktioniert bei mir nämlich nicht)

3. Wenn es sich nur um die JAXB Ahbängigkeiten handelt, die müsstest du weglassen können und zwar weil Java seit 1.6 JAXB direkt im JRE mit ausliefert, d.h. die dort gefundene Version wird sowieso als erste genutzt.
Nein, das Servlet tut es auch nicht. :)

Ist wohl noch nicht so rund der AS :)
 

mvitz

Top Contributor
Ja, wenn ich wüsste wo ich da jetzt genau nen Issue eintragen könnte bei JBoss würde ich es glatt tun, aber irgendwie hab ich das noch nicht so ganz gefunden.

Ich hab jetzt übrigens eine Lösung gefunden (die ich allerdings für sehr unschön halte).

Und zwar folgendes (ich gehe von meinem Projekt aus).

Da das service.jar ja von domain.jar abhängt (und domain.jar ja mit im EAR ist) muss man scheinbar dafür sorgen, dass das domain.jar NICHT mehr im WAR liegt, aber das WAR trotzdem die Klassen von domain.jar findet. Das lässt sich über META-INF/MANIFEST.MF im WAR File steuern (Classpath: domain.jar). Mit Maven kann man das dann lösen, indem man folgende pom.xml für das GUI Module nutzt:
[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>

<parent>
<groupId>de.mvitz.test.jf</groupId>
<artifactId>javaee</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>

<groupId>de.mvitz.test.jf.javaee</groupId>
<artifactId>gui</artifactId>
<packaging>war</packaging>

<dependencies>
<dependency>
<groupId>de.mvitz.test.jf.javaee</groupId>
<artifactId>service</artifactId>
<type>ejb-client</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>de.mvitz.test.jf.javaee</groupId>
<artifactId>domain</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<packagingExcludes>WEB-INF/web.xml</packagingExcludes>
<archive>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>

</project>[/XML]

nicht schön, funktioniert aber. Evtl. hilft es dir ja doch noch, weiß ja nicht wie fest bei dir der JBoss gesetzt ist.
 

noirabys

Neues Mitglied
Hallo zusammen!

da ich ebenfalls mit ClassNotFoundException im JBoss 7 kämpfe habe ich mir das ear mal genauer angeschaut.
und folgendes geändert:

1. domain nach lib verschoben
2. domain und service aus war gelöscht

nun deployt es und ich kann es erfolgreich aufrufen!

funktioniert mit jre 1.6_11, 1.7 und jboss 7.0.0.Final und 7.0.1.Final

Schönen Tag und Gruß
Noirabys
 

Anhänge

  • app-1.0.0-SNAPSHOT.ear.zip
    8,9 KB · Aufrufe: 10

noirabys

Neues Mitglied
hi!
ja hab ich, allerdings bin ich mir nicht 100% sicher, ob das so im Sinne der Erfinder umgesetzt ist

siehe Anhang

Viele Grüße,
Noirabys
 

Anhänge

  • de.mvitz.test.jf.javaee.zip
    42,8 KB · Aufrufe: 7

mvitz

Top Contributor
Wow, in der Tat, dieses lib Verzeichnis scheint so einiges zu bewirken ;)

Ich würde es fast so nutzen, wie das, was du hochgeladen hast, habe nur ein paar Kleinigkeiten noch geändert.

1) Erstellen vom Manifest für das service Projekt abgestellt (ist dann nicht mehr nötig)
2) Erstellen des ejb-client wieder eingefügt (somit kann man aus der WebGUI nicht aus versehen auf Implementierungsklassen zurückgreifen
3) Entfernen der Abhängigkeit von GUI auf Domain (da Domain ja schon über den Service angezogen wird)

Ergebnis: Das nun erzeugte EAR lässt sich sowohl unter JBoss AS 7.0.1.final als auch unter Glassfish 3.1 ausführen.

Danke!

P.S.: Hab mein Projekt dann auch nochmal zur Vollständigkeit angehängt.
 

Anhänge

  • de.mvitz.test.jf.javaee.zip
    10,6 KB · Aufrufe: 21
S

Sym

Gast
Danke nochmal euch beiden.

Das Problem ist damit behoben! Es gibt noch ein CDI-Problem beim Inject der EJBs, welches aber mit dem JBoss 7.0.1 bereits behoben wurde.

Super! Und es ist immer schön zu sehen, wie sich die Leute so in einem Forum engagieren können!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Y Spring JBoss 7 - wie JNDI Datasource einbinden Application Tier 8
S JBoss - .properties vom Kunden änderbar machen Application Tier 10
M org.jboss.weld.exceptions.UnproxyableResolutionException wegen Parametern im Superclass-Kontruktor Application Tier 10
G jBoss automatische Synchronisation? Application Tier 4
JimPanse JBoss 7 + JPA + Kundera + Cassandra Application Tier 2
B Glassfish vs. Tomcat/JBoss Application Tier 4
S Umstellung von JBoss 7 Full auf Web Profile Application Tier 4
V [JBoss 5] Datenbankverbindung zur Laufzeit aufbauen? Application Tier 8
V [JBoss5] JBoss stoppen bzw. am starten hindern? Application Tier 9
V [JBoss 5] Startroutine implementieren? Application Tier 7
V JBoss 5 DeploymentSorter? Application Tier 3
V JBoss 5 mag @Service nicht Application Tier 2
K Threads im JBoss Application Tier 20
S JBoss EJB RMI Application Tier 5
A Jboss Ear mittels maven Application Tier 3
D Lazy Hibernate bei 3-Tier Applikation (JBoss + EJB3 + FatClient) Application Tier 6
ruutaiokwu stateful ejb unter jboss als webservice zur verfügung stellen... Application Tier 2
T Simples EJB-Beispiel für JBoss mit Eclipse Application Tier 3
M Spring - Leichtgewichtiger als JBoss? Application Tier 4
M JBoss Seam - Spring Application Tier 11

Ähnliche Java Themen

Neue Themen


Oben