Damian Korczewski

Damian Korczewski dział jakości

Temat: Pytanie do praktyków - czy możliwa zmiana w class

Witam.
Testuje darmowe oprogramowanie, które straciło jakiś czas temu wsparcie ze strony producenta.
Jedną z funkcjonalności są powiadomienia o wydarzeniach wygenerowanych w programie, które są rozsyłane drogą mailową.

Problem polega na tym, że powiadomienia przechodziły przez serwer pocztowy producenta oprogramowania, a ten go wyłączył. Szkoda moim zdaniem marnować tak fajny program.
Program w katalogu instalacyjnym ma Java Mail.

Teraz pytania:
1) czy ma sens przekopywanie się przez paczki *.jar z około setką plików *.class w poszukiwaniu ustawień (smtp i dane logowania dla domyślnego e-maila) i czy jest nadzieja na ich samodzielną edycję.

2) znalazłem taki kod: http://en.wikipedia.org/wiki/JavaMail#Examples
czy może być to powiązane z moim problemem?

Ogólnie z Javą niezbyt mi po drodze, ale może jakaś Wasza podpowiedź skieruje mnie na właściwą ścieżkę postępowania.

konto usunięte

Temat: Pytanie do praktyków - czy możliwa zmiana w class

Możesz spróbować znaleźć klasę odpowiedzialną za nawiązanie połączenia z serwerem SMTP używając do tego celu jakiegoś dekompilatora (JAD [chyba przestał być utrzymywany], JD-Gui [http://java.decompiler.free.fr/?q=jdgui]).

Mając źródła tej 1 klasy, możesz spróbować ją zmodyfikować, skompilować ponownie i wgrać do pliku JAR.

Technicznie raczej nic trudnego, ale pamiętaj, że dekompilując i modyfikując czyjś kod możesz łamać licencję.

Temat: Pytanie do praktyków - czy możliwa zmiana w class

Rafał Głowiński:
Mając źródła tej 1 klasy, możesz spróbować ją zmodyfikować, skompilować ponownie i wgrać do pliku JAR.

(..) pamiętaj, że dekompilując i modyfikując czyjś kod możesz łamać licencję.
Alternatywnie (podaję jako ciekawostkę, bo w tym przypadku byłby to raczej overhead..) można by użyć AspectJ i przeplatania bytecodu w trakcie ładowania (load-time weaving).
Rozwiązanie polegałoby na wyłapywaniu wywołań metody Session.getInstance(props) i podmianie ustawień.
To pozwoli zawrzeć wszystkie zmiany w 1 miejscu (advice-ie aspektu).Marcin Kubala edytował(a) ten post dnia 13.03.13 o godzinie 19:48
Maciej Nowicki

Maciej Nowicki Java Developer

Temat: Pytanie do praktyków - czy możliwa zmiana w class

A czy nie ma po prostu w któryś z jarów pliku .properties w którym można sobie wszystko ustawić?

konto usunięte

Temat: Pytanie do praktyków - czy możliwa zmiana w class

Maciej Nowicki:
A czy nie ma po prostu w któryś z jarów pliku .properties w którym można sobie wszystko ustawić?

Zakładałem, że autor już to sprawdził :)

konto usunięte

Temat: Pytanie do praktyków - czy możliwa zmiana w class

A może szybciej będzie podsłuchać w sieci, z jakim serwerem program próbuje gadać i postawić sobie taki serwer w swojej sieci (udający ten prawdziwy już wyłączony).

konto usunięte

Temat: Pytanie do praktyków - czy możliwa zmiana w class

Mozna tez sprobowac podmienic hosty na serwerze ;)
Damian Korczewski

Damian Korczewski dział jakości

Temat: Pytanie do praktyków - czy możliwa zmiana w class

Dzięki za wszystkie podpowiedzi.
Widzę, że opcji jest trochę. Na początek skorzystałem z decompilera JD-Gui. Efekty są ciekawe tzn. nie znalazłem póki co w żadnym z *.jar oczekiwanej nazwy serwera (jestem niemal pewien jak się nazywa), ale znalazłem klasę w której jest zbudowany cały interfejs do ręcznego ustawienia sobie swojego smtp, loginu, hasła itd.

Wygląda na to, że pojawia się jeszcze jedna możliwość, mianowicie przywrócenie tej funkcjonalności, którą pozostawiono w kodzie, ale wyłączono/ukryto dla użytkowników programu.

Co do podmiany hostów i postawienia serwera to - o ile byłoby to wykonalne - raczej potraktuje jako ostateczność :)

ps. pod kątem properties sprawdzałem

konto usunięte

Temat: Pytanie do praktyków - czy możliwa zmiana w class

Damian Korczewski:

Co do podmiany hostów i postawienia serwera to - o ile byłoby to wykonalne - raczej potraktuje jako ostateczność :)

Z ciekawości: czemu ? Na mój gust jedna zmiana w /etc/hosts i ustawienie lokalnie jakiegoś sendmaila będzie chyba prostsze (i bezpieczniejsze) niż całe to kopanie przez skompilowane jary. Bezpieczeniejsze też zdaje się licencyjnie.
Damian Korczewski

Damian Korczewski dział jakości

Temat: Pytanie do praktyków - czy możliwa zmiana w class

Dzięki Wam wszystkim za podpowiedzi. Na kilka dni inne obowiązki zatrzymały ten projekt, ale na pewno pochwalę się rezultatem.
Grzegorz Gajos

Grzegorz Gajos Founder of Open
Tangerine

Temat: Pytanie do praktyków - czy możliwa zmiana w class

Gdybyś potrzebował podmieniać funkcjonalność to polecam framework do testowania https://code.google.com/p/jmockit/ , oprócz testowania, idealnie nadaje się do zadań specjalnych tego typu. Jeśli chodzi o podmianę działania istniejącego kodu to nie ma sobie równych. Daje radę nawet w przypadku finalnych klas itp.

Następna dyskusja:

Ciekawostka - pytanie?




Wyślij zaproszenie do