Pluginy do aplikacj webowej (tomcat)

0

Witam
szukam rozwiązania problemu (oszczędzenia sobie roboty) : )
W uproszczeniu - mam aplikację internetową, w której użytkownik pracuje z obiektem jakiegoś typu.
Na tych obiektach wykonywane są pewnie standardowe operacje, ale istnieje czasem potrzeba np. zależnie od pewnych właściwości obiektu dodatkowych ruchów
Taki plugin byłby opcjonalny, musiałby by być w jakiś sposób znaleziony i wykonany.
Dodatkowo jak to wgrywać (zcalać z programem)?

0

Najprościej to interfejs oraz Class.forName który spróbuje znaleźć klasę jak jest na classpath, instancja i rzutujesz na interfejs i możesz korzystać. Wgrywanie wtedy odbywa się poprzez dołączenie jara do wara jako np lib

Ja masz springa to zrobi Ci to z automatu

0

Cześć
wyczytałem trochę na temat o którym mówisz - chcę to napisać sam.
Doszedłem do ściany tzn. (w eclipse)
zrobiłem trzy projekty

  • aplikację
  • plugin
  • interfejsy (implementsy dzielone między plugin i aplikację)

nie wiem jakie klasy mam w plugie (user może je nazywać dowolnie, mają tylko implementować interfejs)
chciałbym w jarze mieć tylko jedną klasę (implementująca interfejs) - niestety przy tworzeniu obiektu z jara, krzyczy że klasy interfejsu nie ma (mimo że jest w głównej aplikacji w takim samym pakiecie)
Co z tym zrobić?

0

Interfejs ma być jeden a nie sobie go kopiujesz...
Aplikacja ma zaleznosc do Interfejsow
Plugin ma zaleznosc do Interfejsow

Przy wypuszczaniu wersji z aplikacji dajesz zaleznosci do pluginow...

0

ok, jest prawie dobrze
zostało mi jeszcze jedno - plugin implementuje interfejs, ale po załadowaniu mojej klasy pluginu lista interfejsów jest pusta?

 
ClassLoader loader = new URLClassLoader(urls);
Class cls = loader.loadClass(fullyQualifiedName);
Class[] intfs = cls.getInterfaces();
0

Nasz gdzieś błąd,... to jest niemożliwe

0

ok, teraz zwraca interfejs prawidłowo, ale mam nowy problem : )
z tego zestawu klas dzielonego między aplikację www i pluginy jest brana klasa interfejsu
jak sprawdzam, czy klasa z jara implementuje interfejs, to zawsze mam że nie implementuje (zawsze false)
tzn.

 
Class<?> cls; // importowana klasa
Class<?> j = pl.test.MojInterface.class;
for (Class<?> i : cls.getInterfaces()) {
    if (i.equals(j.class)) {
        return true;
    }
}
return false;

//edit
kontekst classloadera!
teraz jest ok

1 użytkowników online, w tym zalogowanych: 0, gości: 1