ant build war glassfish

eclipse de veya netbeansde yazdık bi sürü hibernate ot bok derken en az war dosyamız oldu 20mb. şimdi her seferinde koca war dosyası upload edip onu servera deploy etmek ne zor olurdu dimi altı üstü bir kaç dosya değiştirdik diye koca 20mb upload peh.

ant burda bir numaralı araç. basit bir ant xml ile war dosyası oluşturabilir ve sorunu çözebiliriz yapmamız gereken linuxe ssh yapıp serverda derleyip ona deploy etmek. buyrun örnek build.xml

<?xml version=”1.0″ ?>

<project name=”vitrn.com” default=”war”>

<!– running ant with this is enough for eveyrthing dont forget to rearrange paths 😉

for server there must be glassfish libs in the clkasspath :ln -s /home/mascix/glassfishv3/glassfish/fomains/domain1/lib/

–>

<path id=”compile.classpath”>

<fileset dir=”WebContent/WEB-INF/lib”>

<include name=”*.jar” />

</fileset>

</path>

<target name=”init”>

<mkdir dir=”build/classes” />

<mkdir dir=”dist” />

<exec executable=”rm”>

<arg line=”lib” />

</exec>

<exec executable=”ln”>

<arg line=”-s /home/mascix/glassfishv3/glassfish/lib” />

</exec>

</target>

<target name=”compile” depends=”init”>

<copy todir=”build/classes/”>

<fileset dir=”src”>

<exclude name=”**/*.java” />

</fileset>

</copy>

<javac destdir=”build/classes” debug=”true” srcdir=”src”>

<classpath refid=”compile.classpath” />

<classpath>

<pathelement path=”${classpath}” />

<pathelement location=”lib/helper.jar” />

</classpath>

<classpath>

<pathelement path=”${classpath}” />

<fileset dir=”WebContent/WEB-INF/lib”>

<include name=”**/*.jar” />

</fileset>

<fileset dir=”lib”>

<include name=”**/*.jar” />

</fileset>

<pathelement location=”classes” />

</classpath>

</javac>

</target>

<target name=”war” depends=”compile”>

<war destfile=”dist/vitrn.com.war” webxml=”WebContent/WEB-INF/web.xml”>

<fileset dir=”WebContent” />

<lib dir=”WebContent/WEB-INF/lib” />

<classes dir=”build/classes” />

</war>

</target>

<target name=”clean”>

<delete dir=”dist” />

<delete dir=”build” />

</target>

<property name=”build.sysclasspath” value=”ignore” />

</project>

elbet işe yarar.

svn e ssh ile bağlanmak

uzun süredir svn kullanırım ama her seferinde apache mod svn falan gibi şeyler kurup http ile bağlanıyordum. aslında windowsda ilk svnimi kurmuştum sanırım ordan bir alışkanlıkı bu. neyse geçende okurken çok tatlı bişey öğrendim. aslında svn e ssh ilede bağlanılabiliyor. buyrun örnek:

svn co svn+ssh://sizinserver.com/usr/local/src/proje

tabiiki /usr/local/src/proje altında bi kere svnadmin create yapılmış olması gerek onun dışında bir farkı yok svn e ssh ile bağlanır gibi bağlanıp kodlarınızı commit ve update edebilersiniz. nays 🙂

glassfish update console

glassfish i debianda update etmeye uğraşıyorum ve habire


WX import error. Verify the WX widgets are in the PYTHONPATH.
The following can be reported to Update Tool 2.3.2 Development Team .

Traceback (innermost last):
File "/home/mascix/glassfishv3/updatetool/vendor-packages/updatetool/common/boot.py", line 278, in init_app_locale
import wx
File "wx/__init__.py", line 45, in ?
File "wx/_core.py", line 4, in ?
ImportError: libgtk-x11-2.0.so.0: cannot open shared object file: No such file or directory

hatası alıom. kurcalarken buldum sonunda

apt-get install ia32-libs-gtk

yaptım ve artık o preblem kalmadı 🙂

rsync vs scp

yeni servera bişeler kopyalıom yan serverdan normalde scp ile tıkır tıkır çekerim. biproblem olmaz ama bu sefer büyük bir folder var ve linkler falan var. bi baktım scp linke girip ordanda dosya çekiyor oysa onu sadece link olarak almalı. neyse kurcalarken rsync nin bunu yaptığını örendim buyrun örnek komut:

rsync -azuv -e ssh kullaniciadi@xx.xx.xx.xx:public_html/* public_html/

java thumbnail oluşturma

asp.net de uzun süredir kullandığım sevdiğim bir şey bu. bir kod yazıyorsunuz o kod gidip image resize edip istediğiniz gibi getiriyor.


<%@page import="java.io.ByteArrayInputStream"%>
<%@page import="java.io.ByteArrayOutputStream"%>
<%@ page language="java" contentType="image/png" pageEncoding="UTF-8"%>
<%@page import="com.mascix.tools.CacheManager"%>
<%@page import="java.util.Calendar"%>
<%@page import="org.apache.commons.lang.time.DateUtils"%>
<%@page import="org.apache.commons.lang.StringUtils"%>
<%@page import="com.mortennobel.imagescaling.DimensionConstrain"%>
<%@page import="com.mortennobel.imagescaling.ResampleOp"%>
<%@page import="javax.imageio.ImageIO"%>
<%@page import="java.awt.image.BufferedImage"%>
<%@page import="java.io.File"%>
<%
int width = (!StringUtils.isEmpty(request.getParameter("w"))) ? Integer.valueOf(request.getParameter("w")) : 150;
String path = request.getParameter("p");
if (StringUtils.isEmpty(path))
path = "/1.jpg";
BufferedImage b =null;

if (CacheManager.get(path) == null) {
BufferedImage image = ImageIO.read(new File(application.getRealPath(path)));

ResampleOp rop = new ResampleOp(DimensionConstrain.createMaxDimension(width, -1));
rop.setNumberOfThreads(4);
b = rop.filter(image, null);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(b, "png", baos);
byte[] bytesOut = baos.toByteArray();
CacheManager.put(path, (Object) bytesOut);
} else{
byte[] bytesOut =(byte[])CacheManager.get(path);
b = ImageIO.read(new ByteArrayInputStream(bytesOut));
}
response.setHeader("Last-Modified", DateUtils.addDays(Calendar.getInstance().getTime(), 2*360).toGMTString());
response.setHeader("Expires", DateUtils.addDays(Calendar.getInstance().getTime(), 2*360).toGMTString());
out.clear();
ImageIO.write(b, "png", response.getOutputStream());
%>

ve bu dosyayı kullanmak için en basitinden /thumb.jsp?p=/birfolder/resim.jpg demeniz yeterli w değişkenini vermezseniz direk 150 pixel yapılıyor width. birde bağımlılığı var oda burda acaba yüksek yükde nasıl çalışır bu kod şöyle anlık 50 yada günlük 50 bin kişi falan girse. SEO ready olması ve bir kere verdiği şeyi browsera cacheletmesi bu açıdan çok yüksek rakamlar görebilir gibi düşündürüyor bana bakalım.

glassfish ile geliştirmek

bir süredir glassfish üstünde çalışan ufak bir site yapasım var onu kodlamaya başladım. ama aynı windowsda IIS ile direk çalışılınca olan problem benim sitem alt bir modül/path olarak çalışıyor. bu durumda ben html de /bisayfa.jsp dediğim zaman eğer domainde localhost:8080/gelistirme/ altındaysam link beni çat diye localhosta gönderiyor buda adamı çileden çıkartabilir altı üstü bir link verip test yapıcam. sonra servera attığımdada /gelistirme/ lı linkleri atmam çok muhtemel. neyse çözüm kolay.

localhost:4848 de çalışan glassfish admin console açılır. orda Configuration>Virtual Servers>server seçilir orda “Default web module” combo boxından bizim geliştirmkede olduğumuz modül seçilir ve sonuçta direk / da bizim geliştirmekde olduğumuz uygulama çalışmaya başlar. yanlış url vermek şansınız kaybolur oh….

set default web module
default web modul seçerek / da çalışmasını istediğiniz uygulamayı seçebilirsiniz.

uzun süredir hibernate de gördüğüm bir exceptionu an itibariyle çözdüm

bir site için 3 webserverı var ve bu serverlar ara ara aynen şuna benzer bir exception atarlar.

org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [obje package ismi#1]

ben hep diğer bir server mı bunu yapıo ama bu hibernate ler birbirinden bağımsız noluoki diye düşünürdüm. işleyişde bir arıza yapıyor bu exception. az evel local makinede kod pırkalıom bir baktım aynı hata. yok dedim daha neler lan bide ortada server yok şükür classımı hibernate ile bağımlı olmasına rağmen start edip testler yapabiliyorum. yani bi main fonksiyonum var ve şıkır şıkır çalışıyor bu esnada db ye bağlanıo bazı işler çeviriyor hibernate üstünden.

sonra başladım okumaya. saveOrUpdate çağırınca oluyor bu hata ve version kolonu ile bi karışıklık çıkarıyor. çok anlamadım ne olduğunu nalet.