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:
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:
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:
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?).
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:
- 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:
- Rebuild des EJB Projekts
- Republish des EJB Project nach JBoss.
- 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?).