[gelöst] Einbinden externe Jar´s

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

CDSchorsch
*
Beiträge: 13
Registriert: Sa, 19.05.2012 14:45

[gelöst] Einbinden externe Jar´s

Beitrag von CDSchorsch »

Ich habe ein UNO Plugin geschrieben. Diese versucht sich mit dem JBoss zu verbinden. Dabei bekomm ich folgende Fehlermeldung:

Code: Alles auswählen

javax.naming.NoInitialContextException: Cannot instantiate class: org.jboss.naming.remote.client.InitialContextFactory [Root exception is java.lang.ClassNotFountException: org(jboss/naming/remote/client/InitialContextFactory ]
Die Klasse ist im jboss-client.jar enthalten.
Wo muss ich nun dieses Archiv in Office 4.0 ablegen, damit das Plugin diese Klasse findet?

Ich habe es schon im classes-Verzeichnis abgelegt. Auch habe ich den Einstellung vom JDK (Class-Path/Archive hinzufügen) das JAR-Archiv eingetragen.
Es hilft aber nichts. Die Klasse wird nicht gefunden.

Ich hoffe es kann mir mal einer sagen, wie das in Office funktionieren soll.
Zuletzt geändert von CDSchorsch am Di, 24.09.2013 21:18, insgesamt 1-mal geändert.
CDSchorsch
*
Beiträge: 13
Registriert: Sa, 19.05.2012 14:45

Re: Einbinden externe Jar´s

Beitrag von CDSchorsch »

Nach langem Suchen hab ich die Lösung gefunden.
In Eclipse muss innerhalb des UNO-Projekt in der package.properties die JAR-Archive hinzugefügt werden. Dann werden sie auch in die PKG Datei übernommen.
Aber leider hat Open Office und UNO ein Problem mit dem ClassLoader. Da auch dann nicht die Klasse gefunden wird.
Durch folgenden Workaround kann der richtige Classloader ermittelt und gesetzt werden.

Code: Alles auswählen

// de.openoffice.kita.XKitaUNO:
	public void openDialog()
	{
		Thread thread = Thread.currentThread();
		thread.setContextClassLoader(findClassLoaderForContext(KitaUNOImpl.class));
		FieldNamesDialog dialog = new FieldNamesDialog();
		dialog.setVisible(true);
		dialog.dispose();
	}

	private ClassLoader findClassLoaderForContext(Class<?> c)
	{
		ClassLoader context = Thread.currentThread().getContextClassLoader();
		ClassLoader me = c.getClassLoader();
		ClassLoader system = ClassLoader.getSystemClassLoader();
		return (context == null) ? (me == null) ? system : me : context;
	}
Jetzt funktioniert auch endlich der EJB Zugriff. Da der InitialContext keinen Fehler mehr meldet.
Antworten