JBoss und die Einbindung eines externen JAR

OlliL

Bekanntes Mitglied
Hallo,

ich entwickel gerade EJB auf meinem JBoss in Eclipse für die spätere Verwendung in meinem Swing Client.

Aktuell habe ich folgende Packages in meinem EJB-Projekt

business (enthällt die Interfaces der Beans)
entity (enthällt die Business Objekte - z.B. User)
businesslogic (enthällt die Implementierung der Interfaces aus business)

Der EJB Aufruf klappt wunderbar von meinem Swing Client aus.

Nun möchte ich die Packages business und entity in ein extra Eclipse Project "Lib" auslagern und diese dann als JAR sowohl in meinem JBoss EJB wie auch meinem Swing-Client nutzen.

Und - hier fangen die Probleme an. Erstmal meine Schritte zur Einbindung der JAR in meinem JBoss Deployment:

- Generieren des Projekts "Lib" als Lib.jar in Eclipse via "Export -> JAR"
- Kopieren von Lib.jar nach C:\....\jboss-as-7.1.1.Final\modules\my\structure\main
- Erzeugen von module.xml im oben genannten Pfad:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="my.structure">
  <resources>
    <resource-root path="Lib.jar"/>
  </resources>
</module>

- Einbinden von Lib.jar as an "External JAR" in Eclipse für mein EJB Projekt zum Auflösen der Abhängigkeiten.
- Erzeugen der META-INF\jboss-deployment-structure.xml file in meinem EJB Projekt:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
  <deployment>
    <dependencies>
      <module name="my.structure" export="true" />
    </dependencies>
  </deployment>
</jboss-deployment-structure>

- Rebuild des EJB Projekts
- Republish des EJB Project nach JBoss.​

Und nun fangen die Probleme an...

1.)
Als erstes mal steht mein Bean nicht mehr via JBoss Remoting zur Verfügung. Das "java:jboss/exported...." JNDI binding wird nicht mehr von JBoss generiert. Die anderen Bindings der Bean (global, app, module) werden erzeugt. Annotiere ich neben dem in der Lib befindlichen Interface auch nochmal zusaetzlich die Implementierung mit "@Remote" klappt das wieder. Das sollte eigentlich nicht nötig sein, da bereits das Interface welches nun im Lib.jar ist mit @Remote annotiert wurde.

2.)
Mein Hibernate Zugriff auf meine Datenbank Tabelle funktioniert nicht mehr. Folgende Funktion in meiner Bean Implementierung:

Java:
@Override
public User findUserByUsernamePassword(User user) {
    String q = "SELECT p from " + User.class.getName() + " p WHERE p.name = :name AND p.password = SHA1(:pass)";
    Query query = entityManager.createQuery(q);
    query.setParameter("name", user.getName());
    query.setParameter("pass", user.getPassword());
    User u = (User) query.getSingleResult();
    return u;
}

User ist das Objekt aus dem "entity" Package was sich nun ja ebenfalls in dem externen JAR befindet.

Es sieht vom header her so aus:
Java:
@Entity(name = "users")

public class User  implements Serializable {
    private static final long    serialVersionUID    = 7898904802394084838L;
    @Id
    private long    userid;
    private String    name;
    private String    password;
    @Column(name = "att_new", columnDefinition = "TINYINT(1)")
    private boolean    attNew;
    @Column(name = "perm_login", columnDefinition = "TINYINT(1)")
    private boolean    permLogin;
    @Column(name = "perm_admin", columnDefinition = "TINYINT(1)")
    private boolean    permAdmin;

Die Fehlermeldung bei verwenden dieser Methode als EJB lautet:

Caused by: java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: could not locate named parameter [name]


Warum kommt es zu diesen Problemen? Wie gesagt, kopiere ich die 2 Packages entity und business wieder in mein EJB Projekt und binde die JAR nicht ein, funktioniert alles wunderbar.

Irgendwo vermute ich den Fehler darin wie die JAR eingebunden wird, oder vielleicht auch die JAR-Datei selbst (vielleicht muss man sie auf eine "besondere" Art und Weise generieren?).
 

OlliL

Bekanntes Mitglied
Hallo FArt,

aber ich dachte das ist genau der Grund wozu ich META-INF\jboss-deployment-structure.xml erstellt habe? Muss ich Abhängigkeiten noch feiner granuliert angeben? Also auf Objekt-Ebene? Wenn aber mein "UserBean" die Entität "User" aktuell gar nicht kennen würde, dann würde ich doch ganz andere Fehlermeldungen bekommen, oder? Lösche ich z.B. die META-INF\jboss-deployment-structure.xml, kann ich das Projekt gar nicht mehr deployen wegen den fehlenden Dependencies.

Also mir wird nicht ganz klar, was genau zu tun ist, Sorry. :(
 

FArt

Top Contributor
aber ich dachte das ist genau der Grund wozu ich META-INF\jboss-deployment-structure.xml erstellt habe?(
Ja, das ist prinzipiell richtig, aber wo ist dein "Deployment"? Wo ist deine Enterpriseapplikation?

Du versuchst deine Library zu den mitgelieferten JBoss Libraries zu kopieren und einzubinden. Warum?

Warum baust du nicht einfach ein EAR mit deiner Library, deinen Beans usw. und deployst das?
 

OlliL

Bekanntes Mitglied
Hallo FArt,

OK, mit EAR Deployment unter JBoss habe ich mich bisher noch nicht auseinander gesetzt. Das kannte ich bisher nur aus der OC4J Schiene. Aktuell in der "Entwicklungsphase" starte ich das ganze halt einfach aus Eclipse heraus als "Run As -> Run on Server" und der deployt nur das JAR mit den Elementen aus dem aktuellen Projekt.

Und was ich im Netz bisher so gefunden hatte, schien das "JBoss Vorgehen" zu sein, die JARs in modules/ abzulegen und dann via der XML Datei darauf zu verweisen.

Ist aber nicht das richtige Vorgehen? Muss ich mich nun also um EAR-Erzeugung kümmern?

Nun... dann werde ich mir heute Abend mal ein EAR Projekt in Eclipse anlegen, die entsprechenden Projekte dort verlinken und dann deployen. ;)
 
Zuletzt bearbeitet:

OlliL

Bekanntes Mitglied
Hallo,

leider nicht das gewünschte Ergebniss.

Ich habe jetzt ein EAR Projekt (Java EE -> Enterprise Application Projekt), und die erzeugte EAR Datei hat folgenden Inhalt:

/
/lib/Lib.jar
/META-INF/application.xml
/META-INF/MANIFEST.MF
/Server.jar

Ich kann die EAR Datei problemlos auf meinen JBoss Server deployen, und die meine Beans werden auch als "java:jboss/exported/..." in den JNDI Bindings eingetragen.

1. Eine weitere Annotation @Remote bei der Implementierung des Interfaces aus der Lib im Server-Projekt ist nicht mehr notwendig.

2. Der Fehler beim Hibernate-Zugriff bleibt nach wie vor:

17:41:14,942 ERROR [org.jboss.ejb3.invocation] (EJB default - 1) JBAS014134: EJB Invocation failed on component UserBean for method public abstract my.project.entity.User my.project.business.UserIf.findUserByUsernamePassword(my.project.entity.User): javax.ejb.EJBException: java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: could not locate named parameter [name]

OK, machen wir mal einen einfacheren Query:

Eine weitere Routine in meinem Bean:

Java:
	@Override
	public User findUserById(User user) {
		User u = entityManager.find(User.class, user.getUserid());
		return u;
	}

Erzeugt beim Aufruf vom Client aus z.B. folgenden Fehler:

17:42:26,508 ERROR [org.jboss.ejb3.invocation] (EJB default - 2) JBAS014134: EJB Invocation failed on component UserBean for method public abstract my.project.entity.User my.project.UserIf.findUserById(my.project.entity.User): javax.ejb.EJBException: java.lang.IllegalArgumentException: Unknown entity: my.project.entity.User


my.project.entity.User kommt aus der Lib
 

fastjack

Top Contributor
Ich denke der "my.project.entity.User" muss entsprechend in einer hibernate config (da wo auch die persistence-unit definiert wird) gemappt werden.
 

JimPanse

Bekanntes Mitglied
Man könnte sich ja auch eines der Beispeile runterladen quickstarts

Die Frage ist wie rufst du die Methode auf: Über das Interface ( @Locale oder @Remote) oder die Bean? Seit EJB3.1 brauch man für den Lokalen Zugriff kein Interface mehr definieren. (@LocalBean) d.h.

Java:
@EJB // @Inject
UserBean userBean;

sollte reichen. Weitere Frage: Wo rufst du die Bean auf?

Nachtrag:
Ganz wichtig: hast du die Zugriffsdaten zur DB in die standalone.xml (bzw. domain.xml) eingetragen???
 
Zuletzt bearbeitet:

OlliL

Bekanntes Mitglied
In einem Swing Client via JBoss Remoting

in etwa so (vereinfacht):

Java:
Context context = ClientUtility.getInitialContext();
final UserIf bean = (UserIf) context.lookup("/ServerEAR/Server/UserBean!my.project.business.UserIf");
String msg = "Message From EJB --> " + bean.findUserByUsernamePassword(user).getName();

Trage ich in meine persistence.xml die Entity explizit ein:

Code:
        <class>my.project.entity.User</class>

verschwindet der Fehler. Ist dies nun die einzige und auch richtige Lösung? Warum brauche ich das ohne eine extra Lib.jar nicht? Sucht JBoss evtl. nicht in meiner Lib.jar nach Entities? Kann ich Ihn irgendwie dazu bewegen? <jar-file>Lib.jar</jar-file> hat leider auch nicht den gewuenschten Erfolg gebracht.
 

OlliL

Bekanntes Mitglied
OK, ich habs - Es reicht tatsaechlich <jar-file> in der persistence.xml. Aber - es muss der tatsaechliche relative Pfad angegeben werden. Also nicht
Code:
		<jar-file>Lib.jar</jar-file>
sondern
Code:
		<jar-file>lib/Lib.jar</jar-file>

Jetzt klappts auch ohne <class> wunderpraechtig! :)


Code:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
             xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

	<persistence-unit name="JPADB">
		<jta-data-source>java:/MySQLDS</jta-data-source>

		<jar-file>lib/Lib.jar</jar-file>

		<properties>
			<property name="showSql" value="true"/>
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
		</properties>
	</persistence-unit>

</persistence>
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Y EJBs und Callbacks (Jboss 7.1) Allgemeines EE 1
J Mit @Schedule annotierte Methode wird nach einer Weile nicht mehr ausgeführt (JBoss AS 7.2) Allgemeines EE 0
P eMail versenden mit JBOSS Allgemeines EE 2
N WS-Security Beispiel mit JBOSS/Wildfly gesucht Allgemeines EE 2
I JBoss unheimlich langsam nach mehreren Deploys Allgemeines EE 2
BuckRogers Jboss 7** und j2ee 1.7 Allgemeines EE 1
D Jboss löscht Archiv nicht beim Redeployed Allgemeines EE 3
J paar Fragen zu JSF2/JEE6 Anwendung mit JBoss 7.1.1 Allgemeines EE 6
D Jboss lernen mit Praxisbeispiel Allgemeines EE 4
Y JBoss 7 - wie kann ich das logging meiner Applikation am JBoss konfigurieren Allgemeines EE 3
E Generelle Frage zu CDI mit JBoss AS 7.1.1 and Jave EE 6 Allgemeines EE 4
B JBoss Libs vs. JBoss Libary Allgemeines EE 12
E CDI mit verschiedenen Jars in EAR klappt auf Jboss AS 7.1.1.Final nicht Allgemeines EE 8
S Webapp in JBoss absichern nur in bestimmten Umgebungen? Allgemeines EE 2
C JBoss Clustering schlägt fehl Allgemeines EE 10
E JBoss 7.1 Datasource Problem Allgemeines EE 2
2 Deployment per EAR [JBOSS] Allgemeines EE 6
E JBoss NameNotFoundException: einloggen not bound Allgemeines EE 4
S Jboss Server Allgemeines EE 5
E JBoss, jsp und Parameter Allgemeines EE 2
H Bean läuft unter GlassFish, aber JBoss nicht Allgemeines EE 5
S JBoss 7 Authentifizierung: "No principals available" Allgemeines EE 3
S Principal, Authentication, Security und alles im JBoss 7 Allgemeines EE 16
W JBoss 6 - SocketTimeout dynamisch setzen Allgemeines EE 2
S Manueller EJB Lookup im JBoss AS 7.0.1 Allgemeines EE 8
T eXist und JBoss Allgemeines EE 5
J JBoss, Eclipse, Webseite wird nicht angezeigt? Allgemeines EE 4
T erste Anwendung in JBoss deployen Allgemeines EE 3
V JBoss und Classloader Allgemeines EE 6
S Embedded JBoss Problem beim Deployment Allgemeines EE 4
W Anleitung/Tutorial Eclipse/JBoss 6.0 mit Seam 3.0 bzw. jBPM 5.0 Allgemeines EE 3
G JBoss Portal Allgemeines EE 5
E Servlet Wie kann ich ohne Hilfe von Eclipse in JBoss mein servlet aufrufen Allgemeines EE 2
P Kann jemand mit dieser Exception was anfangen? (JBoss) Allgemeines EE 5
ruutaiokwu jboss problem - work-verzeichnis muss manuell gelöscht werden??? Allgemeines EE 5
W JBoss log dependencies aus jbossall-client.jar Allgemeines EE 7
G JBoss Datasource Allgemeines EE 3
ruutaiokwu ejb hot deployment unter jboss 4.2.3 Allgemeines EE 7
fastjack jBoss und externes Nachrichtensystem Allgemeines EE 3
H log4j + JBoss Allgemeines EE 10
P JAAS mit jboss 6 Allgemeines EE 2
X JBoss log4j Konflikt Allgemeines EE 2
reibi JBoss Webinterface Allgemeines EE 3
X JBoss InitialContext problem Allgemeines EE 5
E Properties-File in Jboss-Conf Verzeichnis ansprechen Allgemeines EE 2
S Servlet auf JBoss 5? Allgemeines EE 11
T Hibernate 3 + EJB 3 + JBoss 5 Allgemeines EE 6
M Deployment auf entfernten JBoss Allgemeines EE 4
T JBoss und DB2-Express Allgemeines EE 2
G separate log files in JBoss Allgemeines EE 2
Escorter JBoss AS als Webserver Allgemeines EE 2
N JBoss Problem mit Bibliothek in unterschiedlichen Versionen Allgemeines EE 2
K mehrere Datenbanken mit JBoss 4.2 und EJB3 Allgemeines EE 3
S Oracle DataSource im JBOSS ---> ClassCastException Allgemeines EE 2
S oracle db über jboss in jsp Allgemeines EE 19
F FORM Auth in JBoss für User mit falscher Rolle ? Allgemeines EE 2
E JBoss mit existierendem Tomcat nutzen? Allgemeines EE 4
T POI, Maven, JBoss und ein java.lang.NoClassDefFoundError Allgemeines EE 7
M embedded jboss unter eclipse 3.3 Allgemeines EE 2
M URL-Programm-Handling mit Jboss Allgemeines EE 2
G Deployen am JBoss Server Allgemeines EE 14
I JBOSS Jsp Files Pfad im Servlet? Allgemeines EE 4
B Problem mit JBoss-4.2.1.GA Allgemeines EE 8
remus JBoss Authentifizierung mit MYSQL-Datenbank Allgemeines EE 4
B Client ausführen mit JBoss v4.2 Allgemeines EE 3
G JBoss nutzt beim starten ständig das Root.war Allgemeines EE 12
R Jboss-Server mit Beispielanwendung füttern Allgemeines EE 2
R JBoss über lokale IP ansprechen Allgemeines EE 16
M JSP, MySQL und JBoss "No suitable Driver" Allgemeines EE 3
J Frage zu Jboss Allgemeines EE 7
N Jboss als Dienst -> Fehler 1053 Allgemeines EE 1
I JBOSS IDE EJB 3.0 Servlets JSP Applikation --> JSF sinnvo Allgemeines EE 2
S JBOSS-Security_DatabaseServerLoginModule Allgemeines EE 29
R Eclipse + JBoss + JSF Allgemeines EE 14
G webapplikation mit jsp, ejb 3.0 und jboss Allgemeines EE 10
T JBoss Installation . JAVA_HOME not set Allgemeines EE 2
JimPanse Jboss 4.2.0, myfaces bzw. Tomahawk Allgemeines EE 5
E JBoss Hibernate Datenbank-Timeout Allgemeines EE 3
G JBoss aus einem Java-Programm starten Allgemeines EE 11
G JSP und URL-Auflösung (JBoss 4.2.0) Allgemeines EE 4
G JBoss im LAN / wie konfigurieren Allgemeines EE 2
G JBoss + MySQL Allgemeines EE 8
R JBoss 4.2.0 - Eclipse RC 3.3 und WTP Allgemeines EE 3
D JBOSS unter Eclipse Allgemeines EE 2
B Servlet-Api.jar auf JBoss? (Migration von Tomcat zu JBoss) Allgemeines EE 4
F JBoss WebService Allgemeines EE 3
P Einarbeitung in JBOSS? Allgemeines EE 3
C EntityManager wirft NullpointerException: JBoss-Hibernate Allgemeines EE 4
K JBoss AS & IDE Probleme Allgemeines EE 2
S JBoss gibt POI API nicht frei Allgemeines EE 8
T Probleme beim Einsatz von J2EE / JBoss Allgemeines EE 4
M JBOSS AS von Eclipse aus steuern Allgemeines EE 9
N Struts Jboss und Filter Allgemeines EE 2
G JBoss - Session / Entity Allgemeines EE 8
H Gibt es ein jBoss Tutorial für JSPs ? Für Anfänger ? Allgemeines EE 5
H Hilfe! Wie erstelle ich einen Interceptor unter jBoss? Allgemeines EE 3
P jsf1.2 JBoss Allgemeines EE 5
M Chatähnliche Architektur mit JEE/JBoss Allgemeines EE 2
M Wann braucht man JBoss? Allgemeines EE 34
G jboss fehlermeldung Allgemeines EE 4

Ähnliche Java Themen

Neue Themen


Oben