15 Eylül 2009 Salı

Jboss Seam browserda pdf gösterme

Öncelikle bir Pdf i browser da göstermenin bir kaç yolunda bahsedeceğim sizlere.
Bunlardan en kolayı hazır olarak satılan ajax veya javascript tabanlı pdf readerlar kullanmaktır.
Kafat bunlarada açıkçası ne kadar güvenilir bilinmez.

Çok tavsiye edeveğim bir yöntem değil fakat kısaca bir göz atabilirsiniz.

Vuzir

ajaxpdfviewer



Başka bir yöntem Servlet kullanacak , browsera pdfi embed etmek. Eğere seçiminimizi çok servlet te yana yaparsanız iyi bir seçim yapmış saayılmassnız. Çünkü (benim cahilliğimdende olabilir) Seam Contexte bulunan objelerime Servlete (HttpServerRequest) e hiç birinine erişemedim. Parametre gecemeyince pdf üretmek biraz zamhmetli oluyor.

Servlet Örneği;




public class CounterServer extends HttpServlet {

public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
int BUFSIZE = 32 * 1024;

File f = new File("/home/seyfettin/raporlar/test.pdf");
int length = 0;

try {

byte[] bufferSize = new byte[BUFSIZE];
DataInputStream dataInputStream = new DataInputStream(
new FileInputStream(f));

while ((dataInputStream != null)
&& ((length = dataInputStream.read(bufferSize)) != -1)) {
out.write(bufferSize, 0, length);
}
dataInputStream.close();
out.flush();
out.close();

} catch (IOException e) {
e.printStackTrace();
}
}
}


servlet oluşturduktan sonra web.xml sayfasında servlet için mappin yapıyoruz.

web.xml

<servlet>
<servlet-name> <servlet>
<servlet-name>PdfServlet</servlet-name>
<servlet-class>datassist.util.report.PdfServlet</servlet-class>

</servlet>

<servlet-mapping>
<servlet-name>PdfServlet</servlet-name>
<url-pattern>/PdfServlet</url-pattern>
</servlet-mapping></servlet-name></servlet><servlet-mapping><url-pattern></url-pattern>
</servlet-mapping>




Ve browserda göstermek ise;

sayfanıza ekleyin.
<embed src="http://127.0.0.1:8080/proje/PdfServlet" height="500" width="500"/>


Şimdi Sıra geldi en makül çözümde.

Bu yolu göstermeden önce eğere projenizde icefaces var ise, Ice Pdf kullanmanızı tavsi ederim. Fakat ne yazıkki bir RichFaces kullandığımı için Icepdf deneyemedim. Bir projede 2 tana ajax support kullanamıyoruz.

Pdf i browserde göstermek için richFacesin a4j:mediaOutput tagini kullanacağiz.


pdfViwer.xhtml




<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:rich="http://richfaces.org/rich"
xmlns:c="http://java.sun.com/jstl/core"
xmlns:a="https://ajax4jsf.dev.java.net/ajax"
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:a4j="http://richfaces.org/a4j">
<body>


<a4j:form id="docForm">

<a4j:mediaOutput id="pdfOut" name="pdfOut" uriAttribute="data"
element="object" style="width:100%;height:100%;"
createContent="#{pdfviewer.print}" mimeType="application/pdf"
standBy="loading..." />
</a4j:form>
<script type="text/javascript">
document.getElementById("docForm:pdfOut").type="application/pdf";
</script>


</body>
</html>




PdfViewer.java


@Name("pdfviewer")
@Scope(ScopeType.CONVERSATION)
public class PdfViewer implements Serializable {

/**
*
*/
private static final long serialVersionUID = -7470506167131572514L;



/**
* First set jasperprint
*
* @param outputStream
* @param object
* @throws IOException
*/
public void print(OutputStream outputStream, Object object)
throws IOException {

try {
JasperPrint jPrint = (JasperPrint)Contexts.getSessionContext().get("jasperPrint");

JasperExportManager.exportReportToPdfStream(jPrint,outputStream);
Component.getInstance("jasperPrint");
outputStream.flush();
outputStream.close();

} catch (Exception e) {
e.printStackTrace();
}

}
}




Burdaki örnekte sesionda JasperPrint alıp JasperExporManeger ile pdf görüntülemek için OutputStream e export ettik. Jasper Report kullanmıyorsanız OutputStream doldurmak için yukarda servletteki kodları kullanabilirsiniz.


Umarım yardımcı olmuştur.

19 Ağustos 2009 Çarşamba

ubuntu postgres kurulumu ve konfigurasyonu

ubuntu terminalden postgres için gerekli kütüphaneleri kuruyoruz.

$ sudo apt-get install postgresql postgresql-client postgresql-contrib
$ sudo apt-get install pgadmin3

Kurulum işini yaptıktan sonra postgres(admin kullanıcısı) şifresini tekrardan üreteceğiz.

$ sudo su postgres -c psql template1
template1=# ALTER USER postgres WITH PASSWORD 'password';
template1=# \q



tırnak içinde password yazan yere postgres kullanıcısı için kullanacağınız şifreyi yazın , ben postgres olarak kullanıyorum genelde.ü

En son olarakta veritabanına kimlerin bağlanabileceğini(hangi iplerin) düzenliyoruz.

$ sudo gedit /etc/postgresql/8.2/main/pg_hba.conf

burada hiç bir değişiklik yapmazsanız sadece




Yukarda yaptığımız işlem veritabanında şifreyi değiştirdi. Şimdi aynı şeyi ubuntudaki postgres kullanıcısı içinde yapacağız.

$ sudo passwd -d postgres
$ sudo su postgres -c passwd

bu aşamada posgres kullanicisi için sizden tekrar şifre isteyecek , bir önceki adımda 'password' alanına yazdığınız şifre ile aynı olsun.


Şimdi sıra geldi veritabanına bağlanmak için gerekli düzenlemleri yapmakta .

$ sudo gedit /etc/postgresql/8.2/main/postgresql.conf

burada ;
#listen_addresses = 'localhost'
olan satırı
listen_addresses = '*'
olarak


#password_encryption = on
olan satırı
password_encryption = on
olarak değiştirip sayfayı kaydediyoruz.


En son olarakta veritabanına kimlerin bağlanabileceği bilgisini düzenleyeceğiz.
Hiç bir değişiklik yapmazsanız sadece localhostta veritabanına bağlanabilirsiniz.

başkalarınında kullanımına açmak istiyorsanız;

$ sudo gedit /etc/postgresql/8.2/main/pg_hba.conf


burda açılan sayfanının en altında ;

# Connections for all PCs on the subnet
#
# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD
host all all [ip address] [subnet mask] md5

subnet mask örnek olarak genelde 255.255.255.0

ip adress kısmına size bağlanack ipleri yazabilirsiniz.

192.268.2.0 yada 192.268.2.x diye bir adres girerseniz 192.168.2 ile başlayan ipler veritabanınıza bağlanabilir.

java.net.UnknownHostException: www.jboss.com

java.net.UnknownHostException: www.jboss.com
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:849)
at java.net.InetAddress.getAddressFromNameService(InetAddress.java:1200)
at java.net.InetAddress.getAllByName0(InetAddress.java:1153)
at java.net.InetAddress.getAllByName(InetAddress.java:1083)
at java.net.InetAddress.getAllByName(InetAddress.java:1019)
at java.net.InetAddress.getByName(InetAddress.java:969)
at datassist.util.DnsResolver.getAddress(DnsResolver.java:18)
at datassist.util.DnsResolver.main(DnsResolver.java:11)

----------------------------------------------------------------------------


Bu hatayı almanızın nedeni 64 bit Ubuntu makinelerde 32 bit jdk kullanıyor olmaktan kaynaklanıyor.

illaki 64 bit makinada 32 bit eclipse ve 32 bit jdk kullanıcağım diyorsanız.
Çözüm için;

sudo apt-get install ia32-libs
kütüphanelerini yüklüyoruz.

Sonra eclipse 32 bit jdk ile calissin die eclipse i -vm /opt/{jdk_path}/jre/bin parametresi ile çalıştırıyoruz.

Fakat gerçek çözüm için

sudo apt-get install lib32nss-mdns
kütüphanesini yüklüyoruz.


Çalışıyormu diye test etmek için ;



import java.net.InetAddress;
import java.net.UnknownHostException;


public class DnsResolver {
public static void main(String[] args) {
try {
System.out.println(getAddress("www.google.com"));
} catch (UnknownHostException e) {
e.printStackTrace();
}
}

private static String getAddress(String address) throws UnknownHostException {
InetAddress addr = InetAddress.getByName(address);
return addr.getHostAddress();
}

}


bu program parçacığı çalışıyorsa sorun ortadan kalkmış demektir.

28 Şubat 2009 Cumartesi

JBoss Seam kullanarak email bildirimi ile kullanıcıyı sisteme kayıt etme

Burada Jboss Seam ile bir kullanıcın sisteminize kayıt olma istiğini ve bu isteğini gerekli kuralları gerçekleştirmesi şartı ile kullanıcıyi sistemde ekleme ile bir aktivasyon kodu oluşturarak bu kod sayasinde de kullanıcı hesabını sistemde aktif hale getirmeyi göreceğiz.

Bunu yaparken
  1. Jboss Seam annotaionlar ve bu annotaionların ne işe yaradığı.
  2. Jboss Seam org.jboss.seam.faces.Renderer ile mail yollamayı
  3. Kullanıcı kayıt formunun ve actionını nasıl işlemsi gerektğini göreceğiz.
Aşağıdaki resimde sisteme kayıt edeceğimiz kullanıcıdan alacağımı bilgilerin formu yer almakta. İlerleyen zamanlarda captcha ekleyebilirim fakat şu an gerekli görmüyorum.
İlk olarak Eclipse te File->New->Seam Web Project oluşturuyorup gerekli ayarlamaları yapıyoruz.

projemizin adı deneme , paket isimleride org.deneme diye başlasın.
register sayfamızı oluşturmadan önce org.deneme.entity paketinin içine User Entiy Objemizi oluşturuyoruz.



@Entity
@Table(name="\"user\"")
@Name("user")
public class User {
private Long id;
private String username;
private String password;
private String email;
private String status;
private Date joinDate;

@Id
@GeneratedValue
public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

@Version
public Integer getVersion() {
return version;
}

private void setVersion(Integer version) {
this.version = version;
}

@NotNull
@Length(max = 20,min=5,message="Kullanıcı adı en az 5 en fazla 20 karakter olmalıdır.")
public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

@NotNull
@Length(max = 50)
public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

@Email(message="Email adresi geçerli değil.")
@Pattern(regex="(\\w+)@(\\w+\\.)(\\w+)(\\.\\w+)*")
@Column(nullable=false,unique=true)
public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}


@Length(max=10)
public String getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}

//@NotNull
public Date getJoinDate() {
return joinDate;
}

public void setJoinDate(Date joinDate) {
this.joinDate = joinDate;
}
}














En yakın zamanda devamı gelecek.........

23 Şubat 2009 Pazartesi

Ubuntu Manual Wired Network Configuration

Ubutu kurulumunu yaptıktan sonra network ayarlarımı manuel olarak yapma:

Bunu yapmamın nedenine gelecek olursak Gnome Network Manager da bulunan bir bug ve bu bug yüzünden System ->> Preferences ->> Network Configuration menüsünden yaptığım ayarların aktif olmamasıdır.

Çözümü basit.

1 ) sudo update-rc.d -f NetworkManager remove
2 ) Bilgisayarı yeniden başlatın.
3 ) sudo nano /etc/network/interfaces
Bu komut ile network ayarlarımızı elle set edeceğiz.Bu komutu çalıştırdıktan sonra ;


auto lo eth0
iface lo inet loopback
iface eth0 inet static
address xxx.xxx.xxx.xxx (ip adresinizi girin )
netmask xxx.xxx.xxx.xxx (netmask ip adresinizi girin)
gateway xxx.xxx.xxx.xxx (gateway ip adresinizi girin)


Değişiklikleri kaydedin

4 ) sudo nano /etc/resolv.conf
Burda DNS ayarlarını set edeceğiz.

# Generated by NetworkManager
nameserver xxx.xxx.xxx.xxx(dns server ip)
nameserver xxx.xxx.xxx.xxx(dns server ip)

Değişiklikleri kaydediyoruz.

5 ) sudo /etc/init.d/networking restart

Yapılan değişikliklerden sonra network arayüzünü yeniden başlatıyoruz.

Yeniden başlattıktan sonra aşağıdaki yazıyı gördüğünüzde herşey tamamdır.
*Reconfiguring network interfaces… [OK]