Archive

Archive for March, 2008

Eclipse PDT + Zend Debugger @ Vista 64

March 28th, 2008 4 comments
Dziś, bez najmniejszego problemu zainstalowałem debugger do PHPZend Debugger. Instalacja przebiegła bez żadnego problemu i zajęła mi kilkanaście minut. To bardzo dobrze, bo kilka lat temu zajęła by pewnie kilka dni. A więc, mam zainstalowane Apache 2.2, PHP 5.2, Eclipse PDT. Pobrałem Zend Debugger. Rozpakowałem archiwum i odpowiednią bibliotekę DLL wgrałem do katalogu z rozszerzeniami PHP. Do pliku php.ini dopisałem:
[Zend]
zend_extension_ts="C:\Program Files (x86)\PHP\ext\ZendDebugger.dll"
zend_debugger.allow_hosts=127.0.0.1
zend_debugger.expose_remotely=always 
Po restarcie serwera Apache funkcja phpinfo() zgłasza, że ZendDebugger jest zainstalowany. Teraz mogę już odpluskwiać programy w PHP, prawie tak samo przyjemnie jak te napisane w Javie. Instalacja debuggera zajmuje mniej czasu niż napisanie tego posta i to cieszy mnie najbardziej.
Categories: Eclipse, PHP Tags:

Testowanie zdalnych metod w Flex

March 14th, 2008 No comments
Moim zadaniem jest przetestowanie działania zdalnych metod Java uruchamianych w Flex, np.:
netConnection.call( "calculatorService.add", new Responder( onAdd ), 2, 2 );
Do tworzenia testów jednostkowych w Flex zalecana jest biblioteka FlexUnit. Wkładając ten kod do FlexUnit, zauważmy, że nie radzi on sobie z metodami asynchronicznymi – chyba że je specjalnie zaznaczymy:
netConnection.call( "calculatorService.add", new Responder( addAsync(onAdd,5000) ), 2, 2 );
Jednak to jeszcze nie działa. Metoda addAsync dostosowana jest do pracy z zdarzeniami. Próbując uruchomić ten kod otrzymam błąd: TypeError: Error #1034: Type Coercion failed: cannot convert "4" to flash.events.Event. Poradziłem sobie z tym w następujący sposób:
netConnection.call("calculatorService.add", new Responder( myAddAsync( testSum ) ), 2, 2 );

public function testSum(a:Number):void {
  assertEquals(4,a);
}

// 
public function myAddAsync(f:Function):Function {
  // wyciąga dane z eventa
  var f1:Function = function(e:DynamicEvent):void { 
    f.call(this,e.result);
  }
  // buduje asynchroniczną funkcję, operującą na zdarzeniach
  var f2:Function = addAsync(f1, 5000);
  // pakuje odpowiedź serwera do zdarzenia
  var f3:Function = function(a:*):void {
    var e:DynamicEvent = new DynamicEvent("MyDynamicEvent");
    e.result = a;
    f2.call(this, e);
  }
  return f3;
}
Ta ostatnia funkcja wygląda dość dziwnie – ale robi to co musi. Daje mi możliwość budowania testów integracyjnych – współpraca Flex’a z serwerem Red5.
Categories: FLEX, Java, Red5 Tags:

Red5 + Flex + JPA – mapowanie encji

March 12th, 2008 No comments

Udało mi się zamapować klasę Java (reprezentującą encję JPA) do klasy Flash AS3. Serwerem jest RED5, protokołem RTMP, kodowanie obiektów AMF0. Miałem dwa problemy:

  • wybór dostawcy JPA,
  • typ Number we Flashu,

Zacząłem od OpenJPA. Napotkałem na następujący problem. Obiekty klas Java nie zawsze były mapowane do odpowiedników AS3. Otóż gdy OpenJPA pobiera encje z bazy to zwraca klasy Proxy dziedziczące po klasach encji. RED5 nie potrafi sobie z tym poradzić, i nie wie jak ma mapować klasy Proxy dla Flasha. Doraźnym rozwiązaniem problemu jest wybór innego dostawcy JPA – Hibernate. Fajnie, że tak można.

Drugi problem, to mapowanie typu Number. Typ Number występuje w Flashu i teoretycznie nie należy mu przypisywać wartości NULL. Gdy ustawię w Flashu typ Number na NULL i wyślę go do serwera RED5, to w Javie otrzymam 0 (zero) – prawie to samo a działa bardzo źle. Doraźnym rozwiązaniem problemu jest dla mnie zastąpienie typu Number typem String w klasach AS3.

Categories: FLEX, Java, JPA, Red5 Tags: