25 Mart 2010 Perşembe

Red5 "Error decoding buffer" hatası

İstemci tarafından(flash, dhtml...) red5 tarafında oluşturulmuş olan remote shared object'e bağlanan bir değişken soChatRoom olsun. Shared object üzerinde bir işlem yapmak istediğimizde ise, bu metodun send metoduna değişken olarak complex(ya da decode edilemeyecek tipte, örneğin openlaszlo için lz.button) bir parametre gönderilirse,

soChatRoom.send('writeMessage', new lz.button(canvas,{text:'button'}));

şu şekilde bir hata alıyor ve ardından red5 uygulaması ile bağlantının kesiliyor olmanız gerekir :

ERROR] [NioProcessor-2] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder - Error decoding buffer
org.red5.server.net.protocol.ProtocolException: Error during decoding


...

yapmamız gereken :

parametre olarak text gönderilmeli ve yapılacak complex işlemler send ile çağırılan metodun içerisinde yapılmalıdır.

23 Mart 2010 Salı

Red5'te bir odaya bağlanırken ve bağlantı kesilirken method çağırım sırası

Red5 uygulamalarında oda kavramı aslında scope(IScope)'dan ibarettir.
Örneğin istemci tarafından rtmp://127.0.0.1:1935/Red5Application/room1 şeklinde Red5 uygulamıza bağlandığımızda, Red5Application üzerindeki room1 scope'una ya da odasına bağlanmış oluyoruz. Red5Application da tabi ki bir scope'tur aslında.

Yukarıdaki url'yi kullanarak red5 uygulamamıza bağlandığımızda ve ardından bağlantıyı kestiğimizde, red5 tarafında çağırılan methodlar sırasıyla şu şekildedir :

(rtmp://127.0.0.1:1935/Red5Application/room1 için)

bağlantı kurulduğu zaman
-------------------------
roomStart : room1
connect : Red5Application
connect : room1
roomJoin : room1

bağlantı kesildiği zaman
---------------------------
disconnect : room1
roomDisconnect : room1
roomLeave : room1
roomStop : Red5Application
disconnect : Red5Application

java content assist is not available for the current cursor location

Eclipse üzerinde bir JSP 'yi düzenlerken
<%request.%> gibi bir satırda, normal koşullarda otomatik tamamlama yapılması gerekirken
java content assist is not available for the current cursor location gibi bir uyarı mesajı alıyorsanız,

yapmamız gereken :
mevcut projemizin classpath'ine, tomcat ile gelen servlet-api*.jar'ı eklemektir.

18 Mart 2010 Perşembe

Hibernate'te APPARENT DEADLOCK

Hibernate kullanıcıları böyle bir hata ile karşılaşıyor ise :

08:15:22,164 WARN ThreadPoolAsynchronousRunner:608 - com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@4d480ea -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
08:15:22,172 WARN ThreadPoolAsynchronousRunner:624 - com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@4d480ea -- APPARENT DEADLOCK!!! Complete Status:
Managed Threads: 3
Active Threads: 3


Yapmamız gereken :

Bir önceki blog girdisindeki gibi hibernate.cfg.xml'e ilgili satırlar eklemelidir.

Hibernate'ten Mysql'e Otomatik Bağlantı Açılması

Hibernate kullanarak veritabanı işlemleri yapan bir uygulamayı web'te yayınladığımda, bir süre sonra (tahminen birkaç saat) uygulamanın veritabanı ile bağlantısının kesildiğini farkettim. Log'lara baktığımda ise şöyle bir hatanın verildiğini gördüm :

org.hibernate.util.JDBCExceptionReporter: The last packet successfully received from the server was 56697 seconds ago. The last packet sent successfully to the server was 56697 seconds ago, which is longer than the server configured value of ‘wait_timeout’. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property ‘autoReconnect=true’ to avoid this problem

Böyle bir hata alıyor isek yapmamız gereken c3p0 kütüphanesini kullanmak olacaktır.
Kısaca c3p0 ne işe yarıyor peki :

* Veritabanı bağlantılarını elde etmek için, geleneksel DriverManager tabanlı JDBC sürücülerini yeni javax.sql.DataSource'larına uyarlamada kullanılır
* Connection ve DriverManager pooling sağlar.

Yapmamız gereken :

- http://sourceforge.net/projects/c3p0/files/ buradan c3p0 binary'sini indirin. c3p0*.jar 'ı classpath'e ekleyin
- hibernate.cfg.xml dosyasına şu satırları ekleyin


1
100
5
0
2
90
18000
25000
true

org.hibernate.connection.C3P0ConnectionProvider



- c3p0.properties adında bir dosya oluşturun ve şu satırları ekleyin :

c3p0.testConnectionOnCheckout=true
c3p0.maxStatements=0
c3p0.maxStatementsPerConnection=0


Bu dosyayı da(c3p0.properties) classpath'e ekleyin.

17 Mart 2010 Çarşamba

Red5 Rtmp Portları

Bir flash istemci ugulamasının Red5 uygulaması ile iletişiminde rtmp protokolü kullanılıyor. Red5 rtmp ve http hizmetini öntanımlı olarak şu portlardan verir :

http : 5080
rtmp : 1935
rtmpt : 8088 (Tunneled Rtmp). 1935 portunun kapalı olduğu ve 80(http) portundan erişime izin verildiği durumlarda, http portu üzerinden rtmp hizmeti vermek için kullanılır.
rtmps : 8443(Secure Rtmp) Bu tür rtmp protokolünde, veriler https üzerinden şifrelenerek gönderilir.
Not : Red5 rtmps'i 8443'ten sunuyor ancak flash öntanımlı olarak 443'ten rtmps'yi deniyor. Bunun için, ya red5 tarafında rtmps portu $red5-home/conf/red.properties içerisinde 443 olarak değiştirilmeli ya da flash tarafında bağlantı URL'sine rtmps için kullanılacak olan port 8443 olarak belirtilmelidir.