Client als Jar und die vielen Abhängigkeiten

Weisswurst

Aktives Mitglied
Hi!

Ich bin gerade dabei meine EJB Kenntnisse wieder auf zu frischen.
Ich habe in Eclipse ein EJB Projekt, das ich auch schön auf meinem Jboss deployen kann.
Java:
	BookTestBean/remote - EJB3.x Default Remote Business Interface
	BookTestBean/remote-de.helloTest.beaninterfaces.bookTestBeanRemote - EJB3.x Remote Business Interface
	BookTestBean/local - EJB3.x Default Local Business Interface
	BookTestBean/local-de.helloTest.beaninterfaces.bookTestBeanLocal - EJB3.x Local Business Interface
Ich habe des weitern ein Clientprojekt, das direkt mit dem EJB Projekt als "Required Project" verbunden ist.
Der Client funktioniert auch. Ich kann meine Bean über JNDI anrufen, bekomme gesagt wieviele Bücher in der Datenbank liegen, kann mir diese sogar auflisten lassen und kann sogar neue Bücher anlegen.

So, nun zum eigentlichen Problem.
Mein Client ist ein Apache pivot Client und sollte auch als Applet laufen können. Dazu muss ich den Client erstmal in ein JAR File packen. Und da fangen die Probleme an. Ich habe die BeanInterfaces aus dem EJB Projekt in ein Jar File gepackt und wollte das in den Classpath des Clients hängen. Innerhalb von Eclipse funktioniert das sogar.

Aber wenn ich den Client über Terminal als "java -jar ..." aufrufe dann funktioniert der Client nicht.
Momentan sieht mein Manifestfile so aus:

Java:
Manifest-Version: 1.0
Main-Class: de.test.HelloTestClient
Class-Path: lib/pivot-core-1.5.1.jar lib/pivot-wtk-1.5.1.jar lib/pivot-wtk-terra-1.5.1.jar lib/jnp-client.jar lib/jboss-logging.jar lib/helloTestBeanIf.jar lib/hibernate-jpa-2.0-api.jar

Zwischenzeitlich habe ich sogar alle Beanklassen aus dem EJB Projekt einfach in das Client Projekt kopiert.
Dennoch bekomme ich folgende Exception:

Java:
java.lang.ClassCastException: javax.naming.Reference cannot be cast to de.helloTest.beaninterfaces.bookTestBeanRemote
	at de.test.HelloTestClient.startup(HelloTestClient.java:81)
	at org.apache.pivot.wtk.DesktopApplicationContext$HostFrame.processWindowEvent(DesktopApplicationContext.java:95)
	at java.awt.Window.processEvent(Window.java:1823)
	at java.awt.Component.dispatchEventImpl(Component.java:4630)
	at java.awt.Container.dispatchEventImpl(Container.java:2099)
	at java.awt.Window.dispatchEventImpl(Window.java:2478)
	at java.awt.Component.dispatchEvent(Component.java:4460)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Ich habe reichlich gegooglet und habe erfahren, dass diese Art von Fehler meist dann auftritt, wenn irgend eine Beanklasse nicht verfügbar ist. Das scheint auch zu passen, denn innerhalb von Eclipse ist der Cast kein Problem.
Der dazugehörige Quellcode (Exception in Zeile 27):

Java:
@Override
    public void startup(Display display, Map<String, String> properties) {
    	WTKXSerializer wtkxSerializer = new WTKXSerializer();
        try {
        	InputStream stream = new FileInputStream(dummy.class.getResource("hello.wtkx").getFile());
        	//InputStream stream = new FileInputStream("hello.wtkx");
        	window = (Window)wtkxSerializer.readObject(stream);
			wtkxSerializer.bind(this);
			addButton.getButtonPressListeners().add(this);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SerializationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		Properties jndiProperties = new Properties();
		jndiProperties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
		jndiProperties.put("java.naming.factory.url.pkgs","=org.jboss.naming:org.jnp.interfaces");
		jndiProperties.put("java.naming.provider.url","localhost:1099");
		
		try {
			context = new InitialContext(jndiProperties);
			//Object obj = bookTestBeanRemote.class;
			bookTestBeanRemote beanRemote = (bookTestBeanRemote) context.lookup("BookTestBean/remote");
			//beanRemote.test();
			System.out.println("Bookcount: " + beanRemote.getAllBooks().size());
			
			ArrayList<Object> buchListenDaten = new ArrayList<Object>();
			for(Book b : beanRemote.getAllBooks()) {
				HashMap<String, String> row = new HashMap<String, String>();
					
					row.put("id", b.getId().toString());
					row.put("author", b.getAuthor());
					row.put("book", b.getTitle());
					buchListenDaten.add(row);
			}
			tableView.setTableData(buchListenDaten);
				
		} catch (NamingException e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}
       window.open(display);
    }

Da ich inzwischen alle Beanklassen aus dem EJB Projekt in das Clientprojekt kopiert habe muss die fehlende Klasse eine der Jboss jars sein. Ich habe, wie man am Manifest sehen kann schon einige aufgenommen. Aber irgendwas scheint immernoch zu fehlen. Aber ich kann doch nicht alle 164 Jbossclient jars in's Manifest hängen...
Irgendwo ist da der Wurm drin...

Danke euch!
Grüße
 
M

Marcinek

Gast
hast du die JBoss-all-client.jar passend zu deinem JBoss im Classpath?


Das lookup scheint dir etwas zu liefern, dass du falsch castest. (Ok das steht auch in deinem Posting ^^)

Hinweis: Packetnamen sind immer lowecase und Klassennammen beginnen mit einem Großbuchstaben.
 
Zuletzt bearbeitet von einem Moderator:

Weisswurst

Aktives Mitglied
Ach jetzt seh ichs.
In der allclient.jar sind verweise auf die benötigten jar files.
So muss ich zwar praktisch alle beilegen, aber immerhin muss ich sie nicht in mein manifest schreiben.
thx!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
LimDul Rest-Client/DTOs aus JSON Ergebnis generieren Allgemeines EE 3
I Client Desktop -> Update in Browser? Allgemeines EE 0
Yamanuchi Glassfish 4 : Client Anzahl restriktieren Allgemeines EE 2
R Web-Applikation mit GWT- und Android-Client Allgemeines EE 0
B Ordner von Client an Server senden Allgemeines EE 2
J Client Request vom Server aus. Allgemeines EE 2
H SQL Daten von Webservice an Client übergeben Allgemeines EE 3
T Client IP ermitteln Allgemeines EE 3
C Objekte aus EJB an Client schicken Allgemeines EE 6
T JMX und ServiceMBean - Zugriff mittels Client Allgemeines EE 2
S Rich Client Application mit Eclipse/WebLogic/EclipseLink/EJB3 Allgemeines EE 2
C JMS Remote Client Allgemeines EE 5
G EJB client Allgemeines EE 4
W JBoss log dependencies aus jbossall-client.jar Allgemeines EE 7
P unique ID am Client Allgemeines EE 3
G XML vom Server zum Client Allgemeines EE 4
D Wohin mit Resourcen (Bilder, txt Dateien) im Application Client Allgemeines EE 3
J geschützter Bean zugriff mit einem Rich-Client Allgemeines EE 2
P Client startet viel zu langsam ??? Allgemeines EE 5
MQue Server -> Client zyklische Daten senden Allgemeines EE 20
K Glassfish Application Client Allgemeines EE 4
C EntityBean im GWT-Client Allgemeines EE 2
foobar Client-Jar und JPA-Entities für Remotzugriff Allgemeines EE 12
I Session-Attribute von Client zugänglich? Allgemeines EE 6
M Objektübergabe von Client zum Server Allgemeines EE 11
R EJB Client: Probleme mit der Client.jar Allgemeines EE 2
M "Auto Client-Request" oder Server-Push oder Ajax – Allgemeines EE 2
B Client starten ohne Eclipse Allgemeines EE 4
B Client ausführen mit JBoss v4.2 Allgemeines EE 3
G AnfängerFrage: EJB 3 und Enterprise Client Allgemeines EE 4
M probleme mit client server kommunikation Allgemeines EE 3
K Tomcat als Client nutzen Allgemeines EE 2
K Mail Client Allgemeines EE 2
M PDF im neuen Browserfenster auf Client-Rechner anzeigen Allgemeines EE 5
F Wie heisst das , was der Client als anfrage sendet? Allgemeines EE 3
N Wie heisst das was der Client beim Http Server anfragt? Allgemeines EE 6
G WebService Client: Parameterübergabe Allgemeines EE 9
N Tomcat -> Binary aus DB lesen und an Browser/Client sende Allgemeines EE 9
J Axis Client - Welcher JARs mitliefern? Allgemeines EE 5
B Java-Client für eBaySOAP-API liefert HTTP(400) Bad Request Allgemeines EE 2
L Web-Client - SessionBean - WebService Allgemeines EE 2
A problem mit client Allgemeines EE 3
M EJB-client: jar-Archiv als Export aus Eclipse läuft nicht Allgemeines EE 5
M Entity Beans: Rückgabe von Collectionen an Client Allgemeines EE 2
F Verständnis-Frage zu den vielen Frameworks Allgemeines EE 17
R Abhängigkeiten zwischen EJB-JARs Allgemeines EE 0

Ähnliche Java Themen

Neue Themen


Oben