hibernate search timestamp problemi

hibernate java için seneler önce yazılmış orda burda genelde enterprise level eşşek boyu işlerde kullanılan bir ORM dir. up uzun bir hikayedir kendisi yazının amacı bir alt projesi olan “hibernate search”.

hibernate search bu hibernate i yazanlar tarafından yumurtlanmıştır. ulan biz bi dünya database işi yapıoz bu database de illa bir arama yapılacak.

select bisey from tablo1 where aranacak_kolon like ‘%aranan%’

şeklinde sql ler koşturmakda hiç bir database in hoşuna gitmez ve yavaş çalışır o zaman ne yapmalı biz bunun altına lucene dayayalım denmiş ve hibernate search çıkmış.

gelelim timestamp sorununa. java.sql.Timestamp normalde hibernate in date kolonları için kullanılan klasik bir değişkendir içine zaman verisi atılır. fekat hibernate search ilen indexleyem dendiğinde sıçmaya sebep olur alınan hata :

Unable to guess FieldBridge for created

created orda timestamp seçili kolon veya değişkendir. evvelden bu hatayı aldığımda class da tanımlı değişkeni java.util.Date ile değiştirdim problem çözüldü. bu sefer çok derin bi yerde rastladım. Entity class ımda. ki bu class bütün pojolarımın baba class’ı olduğundan getCrated() fonksiyonunun dönüşüne Date dediğimde kodun her yanı ayrı patladı 😀 başladım kurcalanmaya bi çözüm buldum. custom FieldBridge yazmak. ama kim uğraşcak ulen dedim okumaya devam ettim sonunda çözüm hibernate search’ün @field ile verilen annotationlarında bulundu.

@Field(index=Index.UN_TOKENIZED)
@DateBridge(resolution=Resolution.MILLISECOND)
public Timestamp getCreated(){
return super.getCreated();
}

kodu bu şekilde düzeltince ne dert kaldı nede tasa mis gibi çalışıyor.

velocity ve string

daha evvelde bahsetmiştim velocity performans ve yapı olarak şeker bişe. lakin dün çileden çıkarıyordu nerdeyse. çok basit bir string karşılaştırmasında doğru dürüst çalışmadı.

#if($degisken!=””)

gibi bir durum söz konusu ama çalışmıyor. neler denedim

!$degisken.equals(“”)
!$degisken.equalsIgnoreCase(“”)

hesapta bunlarında çalışması lazım sonuçda velocity runtime da böyle şeyleri çağırmaya izin veriyor ama omadı omadı. en son çözüm şu

#if($degisken!=[])

bu durumda çalıştı istediğim gibi ama hala doğru çözümmü emin değilim sonuçta [] karakterleri vtl de dizi(array) tanımlamak için kullanılıyor. testlerde çıkcak sonuç ortiye.

Ya linuxe taşınmak istersem

ki uzun zamandır düşünüyorum bunu. sonuçta linux sevdiğim bir işletim sistemi ki genelde yazılıma sevgi duymam 🙂 neyse garip bir biçimde hoşlanıom linuxden. bi felsefesi var bi değeri var. windowsumdan hızlı çalışıo tabii bu ayrı bir artı. 3 senedir formatlamadığım windowsum bazen çok kanırıo basit msn de konuşurken msn kanırıo. chrome kullanırken chrome kanırıo. var bi derdi bakım yaptım falan ama yok düzelmedi. virüs falan kaynıodur zaten onada eminim. ama virüs koruması çalıştırırsam ayrı bir kaynak daha gidiyor.

neyse bu tip fikirler içindeyken dedim linuxe geçsem nerde kod yazarım. sonuçda bilgisayardaki olayım o oyun değil kod yazmayı seviom. tabii akla ilk gelen diller arası bi test(benchmark) bakmalıydım. pitonmu javamı diye soruyordum kendime. bide ne bulim cirlop gibi site böle diller arası testler ve sonuçlarıyla dolu.

bu testlerden anladığım oki java gerçekden uygun linuxde kod yazmak isteyene. IDE si var netbeans eclipse sonracıma hızda takıo. tek problem şu anki sitelerimin aspx den javaya dönmesi gerekki o iş gözümde büyüyo 🙂 neyse bigün onuda çözerim.

Applet Sign / Applet imzalamak

uzun süredir ingilizce yazmaya uraşırken iyicede boşlamışdım blogu. zatende muhim bişe yokdu yazcak bugün ilk defa bir appleti imzalamam gerektiğini gördüm. applet bir oyun appleti. ve bir soket açıp servera bağlanması gerekiyordu. lokalde çalışan jar dosyası siteye koyunca exception atar oldu. security exception not allowed falan ulan noluo hani çalışıodu bu bende. anadımki soket açıcak dosya okicak yazcak yani IO işi yapcak bi appletse sign edilmesi gerekirmiş. aradım güzel doc yok bu yazdığımda çok resmi ve açıklayıcı olmicak ama ben olayı şöyle çözdüm.

1. adım jdk ile gelen keytool.exe ile bir key oluşturmalı
2. adım jarsigner.exe ile imzalamak(sign) istediğimiz jarı imzalıoz.

örnek komutlar:

C:Program FilesJavajdk1.6.0_04bin>keytool -genkey -validity 99999 -alias signTavlaFiles1 -keystore compstore -keypass kpi135 -dname “cn=Özkan Pakdil” -storepass ab987c

C:Program FilesJavajdk1.6.0_04bin>jarsigner -keystore compstore -storepass ab987c -keypass kpi135 -signedjar TavlaApplet.jar TavlaApplet1.jar signTavlaFiles1

benim aklıma takılan bi “validity” konusu oldu normalde bu parametreyi vermezseniz 6 aylık sign edio warning verio. keyfime tavlaappleti buldum oynuom bunun içinde para vermenin ne alemi var ama dimi 🙂 garip millet nerden sikceni şaşmış.

server client programming

here is the deal about the server client programming which is port numbers and their limit its about 65 thousands. I know its not a really big number about if you are planing to serve counts more then 65 thousands.

here is the solutions about it. iocp and p2p networking. I am reading both of those big topics. I think if you are planing to do something big p2p will be the real solution. at least throwing bandwidth of the server to client its easy way to go with p2p. I read jxta and I can say that its absolute solution about java and server part. there are some problems about .net and c# part but. in developing games in this situation its acceptable to build a applet for it 🙂

Kubuntu Java And Eclipse

I have 3gb ram and p4 2.6 cpu and 8400gs nvidia video card but I was still having gui freezing eclipse problems. in this morning I started digging talk with my friends and read forums about the performance problem. now I am freely telling you if you have eclipse which works really really slow. you need to install sun java. not gij or blacksmart or anything. sun works well and eclipse gui does not freeze anymore.

sendRedirect and SEO in java

simply response.sendRedirect takes user to another page. mostly its enough for forwarding browser to somewhere else from user perspective but what about google bot and other search engines. PR is not a easy thing to earn. and not affordable thing to loose.

anyway back to the topic. let say we are redirecting clients for subdomains to the other folders. like this:

faq.domain.com –>> faq.domain.com/faq/

in this situation we should use sendRedirect but that function uses HTTP 302 for the response status it means moved temporarily. as a result if you got any link from pr5 to faq.domain.com you will loose it. because google bot will say that this is a temporarily issue then I should not give this pr to that page.

how can we gain back that pr. you shoul use these lines for redirect:
response.setStatus(301);
response.setHeader(“Location”,newUrl);

if anyone who wonder about the real implementation of sendRedirect here:

public void sendRedirect(String url)
throws IOException
{
if (url == null)
throw new NullPointerException();

if (_originalResponseStream.isCommitted())
throw new IllegalStateException(L.l(“Can’t sendRedirect() after data has committed to the client.”));

_responseStream.clearBuffer();
_originalResponseStream.clearBuffer();

_responseStream = _originalResponseStream;
resetBuffer();

setStatus(SC_MOVED_TEMPORARILY);
String path = getAbsolutePath(url);

CharBuffer cb = new CharBuffer();

for (int i = 0; i < path.length(); i++) {
char ch = path.charAt(i);

if (ch == ‘<')
cb.append(“%3c”);
else
cb.append(ch);
}

path = cb.toString();

setHeader(“Location”, path);

// The data is required for some WAP devices that can’t handle an
// empty response.
ServletOutputStream out = getOutputStream();
out.println(“The URL has moved <a href="" + path + "">here</a>”);
// closeConnection();

if (_request instanceof AbstractHttpRequest) {
AbstractHttpRequest request = (AbstractHttpRequest) _request;

request.saveSession(); // #503
}

close();
}

JSP http post arguments/parameters

yesterday I was looking for a way to print some values from http POST. then I could not find easy example. this was about getting values from some swf. first I wrote this:

for(Enumeration i = request.getParameterNames();i.hasMoreElements();){
String parName=(String)i.nextElement();
out.write(“parameter:”+parName+” value:”+request.getParameter(parName));
System.out.println(“parameter:”+parName+” value:”+request.getParameter(parName));
}

this was working very well I tried it from browser address bar. but then there was a strange exception about security and stuff. like this:
[2008-01-31 19:18:17,140] resin-tcp-connection-*:80-11 WARN org.springframework.web.servlet.PageNotFound – No mapping for [/crossdomain.xml] in DispatcherServlet with name ‘pageFlow’

as you see sound like spring exception. then I convert the *.xml line to rss.xml in web.xml. because there was only one rss.xml request which has to be handled by spring. after that I have to find a crossdomain.xml for swf. example:
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*.macromedia.com" secure="false" />
<allow-access-from domain="*.adobe.com" secure="false" />
<allow-access-from domain="*.mydomain.com" secure="true" />
</cross-domain-policy>

the important part we have to say our domain is secure=true otherwise same exception stays. now my http post printer is working.

Hibernate and null fields

I was writing some simple slide generator. and in that process I write hbm.xml file and put this line in there.

<property name="photoSlideId" column="photo_slide_id" type="long" not-null="false" length="8" />

then I put needed variable into the class like this:
private long photoSlideId;

then I start to get photos list as null. it was impossible because it has to generate a exception or something in that situation. then I realized that this code was trying to assign null into the “long” type variable. it was impossible because in java we cannot assign null into the primitive types. then I changed class like this

private Long photoSlideId;

and its working like a charm.

asp.net den başka neler var çabası içinde

bi önceki yazıda anlattığım gibi java denemelerim bitmedi bu arada okurkene okurkene RoR a geldim. baktım godaddy destekliyor neden olmasın dedim ve ilk ror tutorialimi bitirdim. alet db ye epey hassasmış database.yml dosyasında 10 dakka oynadım bi türlü

error Before updating scaffolding from new DB schema, try creating a table for your model (Mujuser)

hatasını geçemedim sonradan öğrendimki oluşturmak istediğinizin kontrolün adında bir table gerekio sonunda da s olması ve o table da en azından bir ID kolonu bulunması gerekiyor yoksa ror kod generate edemiyor çatlıyor.

sorunları çözdükten sonra çalışır halini görmek nasip oldu bakim bu rb uzantılı dosyalar ne ayakdır dedim ve umduğum gibi python indentation u çakması sonunda noktalı virgül olmayan değişik bir syntax daha. {}(dantelli parantez) lerde kullanılmıo sanırım gözüme çarpmadı. bir türlü bu tipi sindiremedim. python da böyleydi.

bu arada netbeans ile de pojolar ve persistance naneleri çıkarmayı becerdim fekat insertlerini yazmadı yada ben henüz bulamadım. bakim hostingde çalışacakmı dedim. sonuç godaddy de kod çalıştırmak ayrı bir maharet özellikle php değilse. sonuç hala hosting ve frameworksel problemleri aşamadım bunaltı içindeyim.