Home > Red5 > Red5 + JPA + Maven2

Red5 + JPA + Maven2

Zapraszam do artykułu w którym opisze jak przy pomocy Maven2 zbudować aplikację dla serwera Red5 korzystającą z technologii Spring, JPA, Hibernate oraz bazy PostgreSQL. Nie będę posługiwał się żadnym IDE, użyje tylko edytora tekstu VIM oraz poleceń powłoki Bash. Całość uruchomię na wirtualnym komputerze z FreeBSD.

Zadanie aplikacji, korzystającej z tych wszystkich technologii będzie bardzo proste. Będzie to program klasy “Hello World”. Aplikacja będzie sprawdzać, czy Internauta ma uprawnienia do publikowania materiałów wideo na serwerze Red5. Sprawdzanie będzie odbywać się na postawie adresu IP nadawcy. Dozwolone adresy IP będą zapisane w bazie danych PostgreSQL. A najfajniejsze jest to, że już tą aplikację napisałem, opublikowałem i opiszę gotowca.

Na serwerze mam już zainstalowane:

  • Java 1.6 (Diablo JDK)
  • Maven 2.0.9
  • PostgreSQL 8.3

Aby rozpocząć, pobieramy aplikację korzystając z SVN:

svn checkout http://jakubiak-red5.googlecode.com/svn/trunk/ jakubiak-red5-read-only

 

W ten sposób ściągamy źródła projektu jakubiak-red5 wraz z przykładową aplikacją. Projekt jakubiak-red5 jest dowiązany do źródeł projektu Red5 przy pomocy svn:externals. Tak więc, pobierając mój projekt, zostaną pobrane kody źródłowe serwera Red5. Nastał czas na pierwszą kompilację. Dzięki pracy włoskiego programisty Marcello Teodorii aplikacja powinna zbudować się bez przeszkód.

cd jakubiak-red5-read-only/jakubiak-red5-pom/
mvn clean install

 

W tym momencie maven zacznie pobierać z Internetu biblioteki konieczne do zbudowania aplikacji. Może to chwile potrwać. Kolejną chwilę będziemy musieli poczekać na kompilacje 700 klasy Javy. Na koniec, ucieszymy się sukcesem. (Jak widać, ja byłem cierpliwy bo czekałem 16 minut, jednak gdy zależności są już pobrane z Internetu to aplikacja buduje się szybko.)

Następnie zakładamy bazę danych PostgreSQL i użytkownika dla niej. Jako hasło podajemy “demojpa”.

createuser -h localhost -U pgsql -S -D -R -P demojpa
createdb -h localhost -U pgsql -O demojpa demojpa

 

Założenie bazy danych na tym etapie jest wymagane, gdyż właśnie ta baza będzie użyta do testowania aplikacji. Aplikacja będzie się testować podczas kompilacji. Więc kompilujemy:

cd ../jakubiak-red5-demo-jpa/
mvn clean install

 

Powinniśmy cierpliwie oczekiwać sukcesu.

Nasza aplikacja została zbudowana. Wynikiem pracy jest plik war. Ten plik war możemy wgrać na serwer Apache Tomcat. Ja korzystam z najnowszej stabilnej wersji – 6.0.18.

cd ../..
wget "http://ftp.tpnet.pl/vol/d1/apache/tomcat/tomcat-6/v6.0.18/bin/apache-tomcat-6.0.18.tar.gz"
tar xvfz apache-tomcat-6.0.18.tar.gz
cp jakubiak-red5-read-only/jakubiak-red5-demo-jpa/target/tomcat/webapps/jakubiak-red5-demo-jpa-war.war apache-tomcat-6.0.18/webapps/

 

Zaganiamy koteczka Toma do roboty. MiauJ

cd apache-tomcat-6.0.18/
./bin/startup.sh
tail -f logs/catalina.out

 

W logach serwera wypatrujemy sukcesu.

Nadszedł czas na testy użytkownika. Uruchamiamy przeglądarkę:

http://ADRES-IP-SERWERA:8080/jakubiak-red5-demo-jpa-war/publisher.swf

 

Wczytana zostanie standardowa aplikacja demonstracyjna, dostarczana z serwerem Red5. W polu “Location” wpisujemy:

rtmp://ADRES-IP-SERWERA/demojpa

 

RTMP to protokół komunikacyjny używany w Flashu. “demojpa” to nazwa naszej aplikacji. Połączenie do serwera zostanie nawiązane.

W zakładkach “Settings” wybieramy kamerę webową oraz dźwięk. Testujemy publikowanie wideo. Nie powinno działać, gdyż nie wpisaliśmy jeszcze swojego adresu IP do listy uprawnionych adresów w naszej aplikacji.

W logach serwera znajdziemy przyczynę.

Adres IP, z którego zamierzamy publikować, trzeba dopisać do bazy danych.

psql -h localhost -U demojpa
INSERT INTO hostallow VALUES ( '192.168.0.114' );

 

Wracamy do przeglądarki WWW. Teraz możemy już rozpocząć publikację i podziwiać efekt naszej pracy.

Gdy mamy już działającą aplikację, to możemy w niej pogrzebać, po to by coś zepsuć lub ją zrozumieć. Ja nie będę nic psuł, ale postaram się opisać najważniejsze elementy.

find . -type f | egrep -v .svn
./src/test/java/eu/jakubiak/red5/demo/jpa/StreamPublishSecurityTest.java
./src/main/java/eu/jakubiak/red5/demo/jpa/entities/HostAllow.java
./src/main/java/eu/jakubiak/red5/demo/jpa/DemojpaApplicationAdapter.java
./src/main/java/eu/jakubiak/red5/demo/jpa/StreamPublishSecurity.java
./src/main/resources/META-INF/persistence.xml
./src/main/resources/red5-services.xml
./src/main/resources/logback.xml
./src/main/resources/red5-core.xml
./src/main/resources/red5-common.xml
./src/main/resources/beanRefContext.xml
./src/main/resources/defaultContext.xml
./src/main/resources/red5-web.xml
./src/main/resources/jdbc.properties
./src/main/webapp/META-INF/MANIFEST.MF
./src/main/webapp/WEB-INF/demojpa-servlet.xml
./src/main/webapp/WEB-INF/web.xml
./src/main/webapp/publisher.swf
./pom.xml
			

 

Po kolei, StreamPublishSecurityTest – jest to klasa która służy do przetestowanie wrażliwego kodu w naszej aplikacji. HostAllow jest to klasa reprezentująca encję JPA, koresponduje ona z tabelką która zostanie utworzona w bazie danych. DemojpaApplicationAdapter definiuje aplikację Red5, w tej klasie włączamy naszą politykę bezpieczeństwa podczas publikowania wideo. StreamPublishSecurity to klasa którą robi czarną robotę – właśnie tu sprawdzane jest, czy Internauta może publikować.

Dalej: persistence.xml to plik potrzebny dla JPA. Najprościej mówiąc, definiujemy w nim, które klasy mają być mapowane na tabele w bazie danych. red5-services.xml to bardzo ważny plik, w którym konfigurujemy ziarna springa wykorzystywane w naszej aplikacji. Znalazły się tam też informacje o bazie danych. Gdyby nasza aplikacja posiadała jakieś usługi zdalne, to właśnie tam warto było by je opisać.

logback.xml to konfiguracja dzienników aplikacji. red5-core.xml, red5-common.xml, beanRefContext.xml i defaultContext.xml to konfiguracja Springa dla serwera Red5. Gdy chcemy coś ulepszyć w Red5 to właśnie tam powinniśmy się włamać. red5-web.xml to plik w który możemy zmienić nazwę naszej aplikacji “demojpa” używaną podczas połączenia RTMP.

jdbc.properties to parametry połączenia do bazy danych. demojpa-servlet.xml w tym pliku trzymał bym konfiguracje kontrolerów widocznych w protokole HTTP (akurat nie ma takich). web.xml to najważniejszy dla archiwum war plik w którym opisujemy składniki aplikacji internetowej. Z publisher.swf już wcześniej się spotkaliśmy. pom.xml to magiczny plik dla Mavena, który opisuje jak zbudować całą aplikację i jakie ma ona zależności.

Prawda, że fajne? 

Categories: Red5 Tags:
  1. Maciej Sawicki
    May 14th, 2009 at 14:32 | #1

    Siema, dzięki za super prezentację na Jugu. Mógłbyś gdzieś wrzucić slajdy? Albo chociaż gdzieś umieścić spis technologi? Przede wszystkim chodzi mi o ten serwer w C++ i To co integrowało Red5 z ffmpeg.

  2. May 15th, 2009 at 09:36 | #2

    Dzięki za zainteresowanie. Większość z omówionych technologii opisywałem w moim blogu. Dla zainteresowany – Ciebie – przesyłam prywatnie dostęp do slajdów z prezentacji.

  3. Ijon
    January 30th, 2011 at 17:33 | #3

    Fajny artykulik – niestety nie biega :(

    Zatrzymalem sie na kompilacji demo (jakubiak-red5-demo-jpa):

    [INFO] Scanning for projects…
    [INFO]
    [INFO] ————————————————————————
    [INFO] Building jakubiak-red5-demo-jpa 1.0-SNAPSHOT
    [INFO] ————————————————————————
    [WARNING] The POM for eu.jakubiak:jakubiak-red5-flash-publisher:swf:0.9.2-SNAPSH
    OT is missing, no dependency information available
    [INFO] ————————————————————————
    [INFO] BUILD FAILURE
    [INFO] ————————————————————————
    [INFO] Total time: 3.187s
    [INFO] Finished at: Sun Jan 30 17:29:25 CET 2011
    [INFO] Final Memory: 5M/15M
    [INFO] ————————————————————————
    [ERROR] Failed to execute goal on project jakubiak-red5-demo-jpa: Could not reso
    lve dependencies for project eu.jakubiak:jakubiak-red5-demo-jpa:war:1.0-SNAPSHOT
    : Could not find artifact eu.jakubiak:jakubiak-red5-flash-publisher:swf:0.9.2-SN
    APSHOT -> [Help 1]

  4. January 30th, 2011 at 20:19 | #4

    Artykuł pisałem ponad rok temu, musisz samemu sprawdzić w czym jest problem.

    Jeżeli uda Ci się rozwiązać problem, to podeślij mi patcha i ja go zakomituję.

  5. piter77
    February 2nd, 2011 at 00:01 | #5

    Art super ale ja też utknąłem przy kompilacji JPA, więc jak widać mój poprzednik nie jest odosobniony

    Missing:
    ———-
    1) eu.jakubiak:jakubiak-red5-flash-publisher:swf:0.9.2-SNAPSHOT

    Try downloading the file manually from the project website.

    Then, install it using the command:
    mvn install:install-file -DgroupId=eu.jakubiak -DartifactId=jakubiak-red5-flash-publisher -Dversion=0.9.2-SNAPSHOT -Dpackaging=swf -Dfile=/path/to/file

    Alternatively, if you host your own repository you can deploy the file there:
    mvn deploy:deploy-file -DgroupId=eu.jakubiak -DartifactId=jakubiak-red5-flash-publisher -Dversion=0.9.2-SNAPSHOT -Dpackaging=swf -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]

    Path to dependency:
    1) eu.jakubiak:jakubiak-red5-demo-jpa:war:1.0-SNAPSHOT
    2) eu.jakubiak:jakubiak-red5-flash-publisher:swf:0.9.2-SNAPSHOT

    ———-
    1 required artifact is missing.

    for artifact:
    eu.jakubiak:jakubiak-red5-demo-jpa:war:1.0-SNAPSHOT

    from the specified remote repositories:
    jakubiak-red5 (http://jakubiak-red5.googlecode.com/svn/repo),
    central (http://repo1.maven.org/maven2)

  6. February 2nd, 2011 at 17:54 | #6

    Brakuje czegoś co się nazywa: eu.jakubiak:jakubiak-red5-flash-publisher:swf:0.9.2-SNAPSHOT
    Trzeba to skomilować. http://jakubiak-red5.googlecode.com/svn/trunk/jakubiak-red5-flash-publisher/
    Najlepiej pobrać całą gałąź SVN i kompilować to co jest potrzebne: http://jakubiak-red5.googlecode.com/svn/trunk/

  1. No trackbacks yet.

Subscribe without commenting