23 Temmuz 2008 Çarşamba
Sıcak!
12 Haziran 2008 Perşembe
DynaFaces - Tablo içerisinde kullanılan button gibi ögeler
Örneğin :
form1:table1:tableRowGroup1:tableColumn1:button1 kontrolunu kullanmamız yanlış olur, bunun yerine:
1nci satır için form1:table1:tableRowGroup1:0:tableColumn1:button1
2nci satır için form1:table1:tableRowGroup1:1:tableColumn1:button1
...
olarak kullanmamız gerekir. Dinamik olarak satır numarasını almak için (satır numaraları 0'dan başlar, 0 ilk satırdır, en son satır satır miktarı-1'dir):
(Tablo'nun button OnClick JavaScript kısmına aşağıdaki komutları yazabiliriz.)
DynaFaces.Tx.fire('ajaxTransaction1', 'form1:table1:tableRowGroup1:'+'#{currentRow.tableRow.rowId}'+':tableColumn1:button1');
return false;
Ancak DynaFaces için bu çalışmayacaktır. Burada bir "bug" söz konusu. Ancak "bug" giderilmiş durumda ise kullanabilirsiniz. Ancak eğer kullanamıyorsanız problemin çözümü şu şekilde:
1. tablonun dışında form üzerinde kullanmadığınız bir yere bir textField koyunuz. Button'un action event'i yerine artık textField'in valueChange event'ini kullanacağız. Button için yazdığınız Java kodunu TextField valueChange event Java koduna yerleştiriniz. TextField alanına Button JavaScript'i ile rowId'yi atamak suretiyle değerinin değişmesini ve rowId'nin Java kodumuz içerisinde kullanılmasını sağlayacağız.
2. DynaFaces transaction'ını Button'da kullanmayıp TextField için tanımlayınız (Send input "yes" olacak).
3. Button onClick JavaScript kodu :
document.getElementById('form1:textField1').setProps({value:'#{currentRow.tableRow.rowId}'});
document.getElementById('ajaxTransaction1', 'form1:table1:tableRowGroup1:'+'#{currentRow.tableRow.rowId}'+':tableColumn1:button1').refresh('form1:textField1');
DynaFaces.Tx.fire("ajaxTransaction1", "textField1");
return false;
(Burada dikkatinizi DynaFaces.Tx.fire("ajaxTransaction1", "textField1") komutuna çekmek istiyorum. DynaFaces eylemini button kontrolu içerisinde ve textField1 için başlatıyoruz-ateşliyoruz. Bu sayede TextField onChange JavaScript eventi içerisine bu komutu yazmamız gerekmiyor, zaten TextField onchange eventini çalıştırmamız da gerekmiyor ).
4. TextField kontrolunuzun visible özelliğini "false" yapınız.
10 Haziran 2008 Salı
DynaFaces (Ajax) - Checkbox, radiobutton ögeleri sorununa çare
Bu durum webuijsf (WoodStock-JSF 1.2), ui (JSF 1.1) ve h (html) ögeleri için de geçerlidir.
Problemin yaratılması :
1. Visual JSF projesi yaratınız. (Ben Java EE5 ve dolayısıyla JSF 1.2'yi seçtim).
2. Proje yaratıldıktan sonra açılan Page1.jsf görsel sayfasına bir WoodStock Basic bölümünden bir adet statictext ve bir adet checkbox yerleştiriniz.
3. Projenizin Component Library bölümü üzerine gelip sağ fare butonuna kullanarak DynaFaces Components (0.2)'yi ekleyiniz.
4. Eğer Java EE5 yerine JDK 1.4'ü şeçtiyseniz web.xml dosyasının Faces Servlet kısmı aşağıdaki gibi olmalıdır.
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<init-param>
<param-name>javax.faces.LIFECYCLE_ID</param-name>
<param-value>com.sun.faces.lifecycle.PARTIAL</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
5. DynaFaces paletinden sayfanıza AjaxTransaction'ı sürükleyip bırakınız.
6. CheckBox onclik'e aşağıdaki Java Script kodunu yazınız:
DynaFaces.Tx.fire("ajaxTransaction1", "checkbox1");
7. CheckBox process value change eventi (checkbox üzerine çift tıkladığınızda açılacak olan Java kodu):
public void checkbox1_processValueChange(ValueChangeEvent event)
{
Calendar cal = new GregorianCalendar();
staticText1.setText(cal.getTime());
}
8. checkbox1 üzerinde iken sağ fare butonu ile menüden "Configure Ajax Transactions"ı seçiniz sol üst tarafta checkbox1 olduğundan emin olunuz. Transaction'ın ismi "ajaxTransaction1"dir. "Send Input" kısmını "Yes", "Re-Render" kısmını "No" Yapınız.
9. staticText1 üzerine geliniz, sağ fare butonu ile menüden "Configure Ajax Transactions"ı seçiniz sol üst tarafta staticText1 olduğundan emin olunuz. Transaction'ın ismi "ajaxTransaction1"dir. "Send Input" kısmını "No", "Re-Render" kısmını "Yes" Yapınız.
10. Projenizi çalıştırdığınızda ve Checkbox'a birinci kez tıkladığınızda aşağıdaki gibi görülecektir.
Ancak 2nci kez tıkladığınızda static text te görülmesi istenen zaman bilgisinin değişmediğini ve ilk tıkladığınızdaki tarih ve saatin aynı kaldığını göreceksiniz. Başka bir deyişle tazelenmesi istenen static text alanı tazelenmemektedir.
Çözüm :
1. Visual Web JSF sayfanıza bir buton ekleyiniz.
2. button1 üzerinde iken sağ fare butonu ile menüden "Configure Ajax Transactions"ı seçiniz sol üst tarafta checkbox1 olduğundan emin olunuz. Transaction'ın ismi "ajaxTransaction1"dir. "Send Input" kısmını "Yes", "Re-Render" kısmını "No" Yapınız. (button1'i checkbox1 ile aynı yaptık).
3. button1 action eventi (button1 üzerine çift tıkladığınızda açılacak olan Java kodu):
public void button1_action()
{
Calendar cal = new GregorianCalendar();
staticText1.setText(cal.getTime());
}
4. button1 visible özelliğini false yapınız.
9 Haziran 2008 Pazartesi
DynaFaces Örneği (Netbeans 6.1 - Visual JSF)
2. Projenizin Component Library bölümü üzerine gelip sağ fare butonuna kullanarak DynaFaces Components (0.2)'yi ekleyiniz.

3. Eğer Java EE5 yerine JDK 1.4'ü şeçtiyseniz web.xml dosyasının Faces Servlet kısmı aşağıdaki gibi olmalıdır.

4. DynaFaces paletinden sayfanıza AjaxTransaction'ı sürükleyip bırakınız.

5. Page1.jsf görsel sayfasına bir WoodStock Basic bölümünden bir adet statictext ve bir adet textfield yerleştiriniz.
6. textField1 üzerinde iken sağ fare butonu ile menüden "Configure Ajax Transactions"ı seçiniz sol üst tarafta checkbox1 olduğundan emin olunuz. Transaction'ın ismi "ajaxTransaction1"dir. "Send Input" kısmını "Yes", "Re-Render" kısmını "No" Yapınız.

7. staticText1 üzerine geliniz, sağ fare butonu ile menüden "Configure Ajax Transactions"ı seçiniz sol üst tarafta staticText1 olduğundan emin olunuz. Transaction'ın ismi "ajaxTransaction1"dir. "Send Input" kısmını "No", "Re-Render" kısmını "Yes" Yapınız.

8. textField1 process value change event'i için aşağıdaki Java kodunu yazınız. (textField1 üzerinde iken çift tıkladığınızda açılan Java kod kısmına)
public void textField1_processValueChange(ValueChangeEvent event) {
staticText1.setText(textField1.getText());
}
9. textField1 onclik'e aşağıdaki Java Script kodunu yazınız:
DynaFaces.Tx.fire("ajaxTransaction1", "textField1");
10. Projenizi artık çalıştırabilirsiniz.
Aşağıda örnek projeler bulunmaktadır. İlki JDK 1.4 (JSF 1.1), ikincisi ise Java EE 5 (JSF 1.2) örneğidir.
Dynamic Faces UTF-8 probleminin giderilmesi
Ancak Türkçe dahil uluslararası karakterlerde ufak bir soruna sahiptir. Aşağıda bu sorunun nasıl giderileceği anlatılmaktadır.
JSF/JSP sayfalarınız UTF-8 olsa bile kısmi olarak Ajax cevabı ISO-8859-1 olmaktadır. Halbuki tazelenen öge örneğin bir listbox ise bu listbox içerisindeki karakterlerin de UTF-8 olarak işleme tabi tutulması gerekir.
ISO-8859-1 karakter “encoding” seçilmediği taktirde varsayılan “encoding” tir. O halde biz “encoding”i aşağıdakine benzer olarak yapmalıyız:
context.getExternalContext().setResponseCharacterEncoding("UTF-8");
Değişikliğin yapılması:
1. https://jsf-extensions.dev.java.net/servlets/ProjectDocumentList?folderID=5580&expandFolder=5580&folderID=0 adresinden en son jsf-extensions-dynamic-faces’i indiriniz. İndirdiğiniz hem binary hem de kaynak olmalı.
2. Kaynak kodları olan dosyayı diskinizde bir klasöre açınız.
3. NetBeans’te “Java Project with existing code” ile yeni bir proje yaratınız ve mevcut kaynak kodlar olarak 2nci adımda belirtilen klasördeki jsf-extensions-dynamic-faces kaynak kodlarınız seçiniz. Projenizin adı 1nci adımda indirdiğiniz binary jar dosyasının adı ile aynı olmalıdır (örnek: jsf-extensions-dynamic-faces-0.1)
4. Projenin class path’ine aşağıdaki kitaplık ve jar dosyaları tanımlanmalıdır:
- Kitaplıklar : JSF 1.2, Web UI Components
- Jar dosyaları: el-api.jar, jsp-api.jar, servlet-api.jar, shale-remoting.jar
5. com.sun.faces.extensions.avatar.lifecycle paketindeki AsyncResponse.java dosyasını NetBeans içerisinden açınız ve aşağıdaki metoda kırmızı ile boyan kısmı ekleyiniz.
public void installOnOffResponse(FacesContext context) {
context.getExternalContext().setResponseCharacterEncoding("UTF-8");
origResponse = context.getExternalContext().getResponse();
context.getExternalContext().setResponse(getNoOpResponse(origResponse));
}
6. Projenizi derleyiniz ve dist klasöründeki jar dosyasını
${netbeans_installation_dir}/visualweb1/modules/ext klasörüne koyunuz.
Eğer dilerseniz projenizi derlediğiniz build klasörünün altındaki com.sun.faces.extensions.avatar.lifecycle paketinin altında bulunan class uzantılı dosyaları 1nci adımda indirdiğiniz original binary jar dosyasının ilgili kısmına da kopyalayıp kullanabilirsiniz.
Aşağıda yukarıdaki adımlar uygulanarak sorunun düzeltildiği 2 jar dosyasının bulunduğu zip'li dosya bulunmaktadır, aşağıdaki linkten indirip hemen kullanmaya başlayabilirsiniz.
4 Haziran 2008 Çarşamba
RichFaces/Ajax4JSF ve Netbeans
webuijsf ögelerini peki nasıl kullanırız ?
2 yöntemi var, bunlardan biri WoodStock Ajax'ı kullanmamak, diğeri ise JSF 1.1'i kullanmak. Burada JSF 1.1'i kullanmak anlatılacaktır.
1. Netbeans ile Visual Web JSF projesi yaratmaya başlayın. İlk 2 adımı geçtikten sonra 3ncü adımda (Server and settings) Java EE 5 version bölümünde J2EE JDK 1.4'ü seçiniz ve projenin yaratılmasını tamamlayınız.
2. Proje yaratıldıktan sonra projenizin özelliklerini (Properties) proje adı üzerine gelerek sağ fare butonu ile görünüz. "Sources" bölümünde "Source/Binary format" JDK 1.4 görünüyorsa sunucunıuzdaki JDK sürümüne uygun olarak JDK 5 veya JDK 6 yapınız. Eğer JDK 1.4 olarak kalırsa JAX-WS Web servislerini kullanmanız mümkün olmayacaktır.
30 Mayıs 2008 Cuma
Windows Ortam Değişkenlerini Windows'u Yeniden Başlatmadan Değiştirmek
Zaman zaman kod geliştirirken ortam değişkenlerini ayarlamak ya da değiştirmek gerekiyor. Bunun için bilgisayarım ikonuna sağ tuşla tıklayıp özelliklerden bu değişiklikleri ayarlayabiliyoruz ancak ne yazık ki ayarlarımızın geçerli olması için işletim sisteminin yeniden başlatılması gerekiyor. Bu da zaman ve konsantrasyon kaybına neden oluyor.Bilgisayarcı lisanı ile söylersek "sistemi yeniden başlatmadan environment variable'ları nasıl set edilir" sorusunun basit bir cevabı var:
1. Command line açılır. (Başlat->Çalıştır->cmd)
2. Mesela ayarlanmak istenen değişken TOMCAT_HOME ise;
SET TOMCAT_HOME=C:\TOMCAT5.5
denilerek ayarlanır.
3. Ayarların başarıyla uygulanıp uygulanmadığını anlamak için
echo %TOMCAT_HOME%
yazılır.
Değişkeni set ederken başına ve sonuna hiçbirşey konulmazken, ekrana yazdırırken başına ve sonuna % koyulduğuna dikkat!
Not: Resmin ne alâkası var diye içinden geçirenlere cevap: bir alâkası yok... Öylesine! :-))
28 Mayıs 2008 Çarşamba
Önerileriniz..
27 Mayıs 2008 Salı
JSF Web/Portal Uygulamaları için JasperReports tabanlı raporlama kütüphanesi
JRRaporlama Java Kütüphanesi kaynak kodları:
JRRaporlama.jar dosyası:
Yukarıdaki JRRaporlama kütüphanesi hemen indirip JSF Web uygulamaları veya JSF portletleriniz içerisinde kullanarak
HTML, PDF, Excel, Word gibi formatlarda Web veya portlet uygulamanız içersinde aşağıdaki gibi gösterebilirsiniz.
RaporOlustur metodu:
public java.lang.String RaporOlustur(javax.faces.context.FacesContext fc, int raporTuru, java.lang.String dBDriver, java.lang.String dBConnectString, java.lang.String dBUserName, java.lang.String dBUserPassword, java.lang.String reportFileName, java.lang.String ReportFolderPath, java.lang.Object[][] parameters)RaporOlustur metodu IReport ile olusturulmus olan rapor dosyasini kullanarak istenilen formatta rapor alabilmeyi saglar. Bu metod kendi Web uygulamaniz icerisinde kullanilir.
Alabileceginiz rapor formatlari PDF, Word/RTF, Excel ve Html'dir.
Html biciminde rapor istiyorsaniz kendi Web uygulamanizin web.xml dosyasina asagidaki kismi ekleyiniz.
<servlet>
<servlet-name>ImageServlet</servlet-name>
<servlet-class>jrraporlama.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ImageServlet</servlet-name>
<url-pattern>/image</url-pattern>
</servlet-mapping>
Web uygulamanizda yapmaniz gereken diger islemler:
· JRRaporlama.jar dosyasini uygulamanizin classpath'ine ekleyiniz.
· JasperReports kitapligini http://www.jasperforge.org/ adresinden indiriniz.
Indirdiginiz dosyadan asagidaki kitapliklari uygulamanizin classpath'ine koyabileceginiz gibi Tomcat'in ../common/lib/ext veya ../lib/ext, SunAS icin ise ../domains/{your-domain}/lib klasorune koyabilirsiniz.
jasperreports-2.0.2-javaflow.jar
jasperreports-2.0.2.jar
commons-beanutils-1.7.jar
commons-collections-2.1.jar
commons-digester-1.7.jar
commons-javaflow-20060411.jar
itext-1.3.1.jar
poi-3.0.1-FINAL-20070705.jar
commons-logging-1.0.2.jar
jdt-compiler-3.1.1.jar
groovy-all-1.0.jar
jaxen-1.1.1.jar
jcommon-1.0.0.jar
jfreechart-1.0.0.jar
jpa.jar
poi-3.0.1-FINAL-20070705.jar
Parametreler:
externalContext -
Web uygulamanizdan this.getExternalContext() seklinde bu paramtereyi deger gecirebilirsiniz. Bu paramtre ile Http response ve request'i elde edilir ve Web uygulamanizin Web sayfasina rapor hazirlanarak gonderilir. JRRaporlama kitapligi JSF 1.1 ve JSF 1.2 (WoodStock) kullanilabilinir. Ancak JSF'de rapor sonrasi asagidaki komut olmaldir. this.getFacesContext().responseComplete();
raporTuru - Alinacak raporun turu
Rapor.PDF, Rapor.DOC, Rapor.XLS, Rapor.HTML olabilir.
dBDriver - Veritabani surucusu
MySQL icin: com.mysql.jdbc.Driver, Oracle icin: oracle.jdbc.OracleDriver
dBConnectString - Veritabani baglantisi karakter katari
MySQL icin ornek: jdbc:mysql://localhost:3306/test, Oracle icin ornek: jdbc:oracle:thin:@localhost:1521:test
dBUserName - Veritabani kullanici adi
dBUserPassword - Veritabani kullanicisinin parolasi
reportFileFullPath - Rapor dosyasinin tam yolu ve adi
Örnek : d:/test/test1.jrxml
subReportFolderPath - Raporun alt raporlari var ise alt raporlarin oldugu klasor
Örnek : d:/test/subreports/
parameters - 2 boyutlu Object sınıfında JasperReports sablonuna gecirilecek parametreler
Örnek :
jrraporlama.Rapor rapor = new jrraporlama.Rapor();Object[][] parametreler = new Object[1][2];parametreler[0][0] = "param1";parametreler[0][1] = "deger1";
String sonuc = rapor.RaporOlustur(this.getFacesContext(),
rapor.HTML,
"com.mysql.jdbc.Driver",
"jdbc\:mysql\://localhost/test",
"testuser",
"password",
"test.jrxml",
"c:/test" ,
parametreler);
if (sonuc != null) {
alert1.setType("error");
alert1.setSummary(sonuc);
}
Glassfish JDBC Resources ve Connection Pools
Öncelikle ojdbc14.jar ın /domains/domain1/lib dizininde olup olmadığını kontrol et. Yoksa http://www.oracle.com/ dan indirebilirsiniz.
Resources > JDBC > Connection Pools a tıkla ve New ile yeni bir Connection Pool yarat.
Name: UyePool
ResourceType: javax.sql.DataSource
Vendor Type: Oracle
URL: jdbc:oracle:thin:@10.10.10.20:xxxx:tobb
user: kullanıcıAdı
password: şifre
Daha sonra Ping butonu ile yarattığınız connection pool un çalışıp çalışmadığını test edebilirsiniz.
Başarıyla pool oluşturduktan sonra yeni bir JDBC Resource tanımlayıp ve Pool Name olarak yarattığınız pool u seçebilirsiniz. Oluşturduğumuz resource un adı jdbc/test olsun.
Uygulamadan erişim için:
Connection c = null;
InitialContext ctx = new InitialContext();
javax.sql.DataSource ds = ( javax.sql.DataSource)ctx.lookup("jdbc/test");
c= ds.getConnection();
Web Servis, HTTP Authentication ve LDAP
Öncelikle Glassfish Admin Console ile bir ldap realm tanımlıyoruz.
Admin console da Configuration > Security > Realms de New ile yeni bir Realm tanımla.
Name: ldapRealmName (herhangi birsey olabilir, web.xml de kullanılacak.)
ClassName: com.sun.enterprise.security.auth.realm.ldap.LDAPRealm
ClassName seçilince JAAS context otomatik olarak ldapRealm gelir.
Directory: ldap sunucu adresi
Base DN: cn=Users,dc=xxxx,dc=com,dc=tr
Ek olarak aşağıdakiler tanımlanır.
search-filter: sAMAccountName=%s
group-base-dn: cn=Groups, dc=xxxx,dc=com,dc=tr
search-bind-password: şifre
group-search-filter: member=%d
search-bind-dn: cn:Administrator,cn=Users,dc=xxxx,dc=com,dc=tr
Bu tanımladığımız ldap realm web.xml de login config ayarlarında kullanılacak.
Web servisinin geliştirildiği web uygulamasında yapılması gerekenler:
web.xml üzerinde yapmamız gereken eklemeler:
<display-name>MyConstraint</display-name>
<web-resource-collection>
<web-resource-name>myresource</web-resource-name>
<description/>
<url-pattern>/*</url-pattern>
<http-method>POST</http-method>
<http-method>HEAD</http-method>
<http-method>PUT</http-method>
<http-method>OPTIONS</http-method>
<http-method>TRACE</http-method>
<http-method>DELETE</http-method>
</web-resource-collection>
<auth-constraint>
<description>MyDescription</description>
<role-name>AuthRole </role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>ldapRealmName</realm-name>
</login-config>
<security-role>
<description/>
<role-name>AuthRole</role-name>
</security-role>
sun-web.xml üzerindeki değişiklikler:
<role-name>AuthRole </role-name>
<group-name>User</group-name>
</security-role-mapping>
Buradaki GrupAdı Ldap ta tanımlanan grup adı olmalıdır. Uygulamaya erişim için kullanılacak kullanıcılar bu grup üyesi olarak tanımlanmalıdır.
Bu web servisinin client ını yazarken, tek yapmamız gereken kullanıcı adı ve şifre göndermek. Web servisini çağırdığınız yere aşağıdaki kod parçasını ekleyebilirsiniz.
((BindingProvider)port).getRequestContext().put( BindingProvider.USERNAME_PROPERTY, "kullanıcıAdı
((BindingProvider)port).getRequestContext().put( BindingProvider.PASSWORD_PROPERTY, "şifre");
Java ile Geliştirilen Web Uygulamalarında Ortak Konfigürasyon
Ip adresi, "connection string", kullanıcı adı, Url gibi geliştirilen pek çok Web tabanlı Java uygulamalarında kodun içerisinde yer alan tanımlamalar tembel :) yazılım geliştiriciler tarafından kullanıldığını bilmekteyiz. Konfigürasyonda olabilecek değişiklikler karşısında kabusa varan sorunlar yaşanır. Geliştirilen projelerin iyi dokümante edilmemesi ve geliştirici kılavuzlarının az veya yetersiz olması, zaman içerisinde güncellenmemesi de başlıbaşına bir sorundur. En sık karşılaşılan konfigürasyon problemlerini aşmak ve ortak kültürü yakalayabilmek için jar, war dosyalarının kendi içlerinde "properties" tarzı dosyalarda bu bilgileri tutmak yerine ortak bir konfigürasyon havuzu kullanılması yerinde olacaktır.
TOBBconfigUtil kütüphanesi ResourceBundle sınıfından yararlanır. Bu sınıf ile “bundle” dosyasından istenen bir anahtar kelimeye karşılık gelen değeri okunur ve configGetValue metodu okunan değeri iletir. Konfigürasyon ile ilgili anahtar kelime ve karşılıkları bu kütüphane içerisinde bulunan konfigurasyon.properties dosyasına kaydedilir. Bu sayede her bir uygulamanın içerisinde konfigürasyon verilerini tutmak gerekmez. Örneğin bu jar dosyası Tomcat’in common/lib/ext klasörü veya Sun AS 9.1 (GlassFish) domains/domain1/lib içerisine konulduğu taktirde diğer uygulamaların yapacağı tek şey bu metodu çağırmaktan ibaret olacaktır. Bu kütüpaheyi değişiklik yapmaksızın kullanmak istediğinizde jar dosyasını koyduğunuz yerde TOBBConfig isimli bir klasör yaratmalı ve bu klasörün içerisinde konfigurasyon.properties isimli bir metin tipinde dosya yaratmanız gerekir.
TOBBConfigUtil Java kütüpanesi kaynak kodları:
TOBBConfigUtil.jar dosyası:
TOBBConfigUtil Java kütüpanesinde yer alan configUtils.java dosyası:
package tr.org.tobb.config;
/**
*
* @author Haluk ERYUKSEL
*/
import java.util.ResourceBundle;
public class configUtils{
public configUtils() {
}
public String configGetValue(String key) {
try {
ResourceBundle bundle =ResourceBundle.getBundle("TOBBConfig.konfigurasyon");
return bundle.getString(key);
} catch (Exception e) {
e.printStackTrace(); // sistem loguna yaz.
return "Hata : "+e.getMessage();
}
}
}
TOBBConfigUtil projesi kök dizinindeki MANIFEST.MF dosyası içeriği :
Class-Path: .
Örnek Konfigurasyon.properties dosyası :
MySqlUser=root
MySqlPassword=xxxxx
MySqlDriver=com.mysql.jdbc.Driver
MySqlConnectString=jdbc\:mysql\://localhost/
Konfigurasyon.properties dosyası TOBBconfigUtil.jar dosyasının olduğu yerde TOBBConfig isimli bir klasör içerisinde olmalıdır.
Kullanımı :
Kendi uygulamanız içerisinden bu kütüphaneyi kullanmak için TOBBconfigUtil.jar dosyasını CLASSPATH’e tanımlamanız gerekir. Gerekli tanımlamayı gerçekleştirdikten sonra aşağıdaki gibi kullanabilirsiniz.
configUtils cfg = new configUtil
String driver = cfg.configGetValue("MySqlDriver");
String connectString = cfg.configGetValue("MySqlConnectString");
Glassfish ve JDBC BC
Open-ESB : https://open-esb.dev.java.net/
Netbeans : http://www.netbeans.org/
Sorunu aşağıdaki gibi ortadan kaldırabilir ve JDBC BC'yi BPEL diagramınız içerisinde artık kullanabilirsiniz.
Adım 1:
GlassFish uygulama sunucusu JDBC BC bileşenini aşağıdaki adresten indiriniz. İndireceğiniz dosya jdbcbc.jar olmalıdır.
http://download.java.net/jbi/binaries/open-jbi-components/main/nightly/latest/ojc/
Adım 2:
Services sekmesine geçip GlassFish uygulama sunucusunu başlatınız. Uygulama sunucusu çalışır hale geldikten sonra Services sekmesindeki GlassFish bölümündeki seçenekler görülecektir. Bunlardan JBI üzerine gelip "Binding Components"ı bulunuz. "Sun-jdbc-binding" i görüyorsanız.
Sağ fare butonu ile üzerine geldikten sonra shutdown ve ardından uninstall ile kaldırabilirsiniz. Eski JDBC BC'yi kaldırdıktan sonra yine aynı menüden "install" ile indirdiğinizi kurabilirsiniz.
Adım 3:
http://download.java.net/jbi/binaries/open-esb-full-install/nbm/latest/ adresinden org-netbeans-modules-wsdlextensions-jdbc.nbm isimli dosyayı indiniz. Netbeans Tools->Plugins menüsünü kullanarak kurunuz.
Böylece artık JDBC BC ile çalışmaya hazır hale geldiniz.
21 Mayıs 2008 Çarşamba
* Netbeans 6.1 portlet desteği ile Visual portlet geliştirdiğimizde, aşağıda belirtilen kısmı web.xml dosyasından silmez isek "deploy" aşamasında aşağıdaki hata Glassfish server.log dosyasında görülecektir.
Error loading deployment descriptors for module [portlet1] Line 132 Column 11 -- Deployment descriptor file WEB-INF/web.xml in archive [portlet1]. cvc-complex-type.2.4.a: Invalid content was found starting with element 'taglib'. One of '{"http://java.sun.com/xml/ns/javaee":jsp-property-group}' is expected.;_RequestID=80651ab6-2ae1-4e3d-a686-a1eeec206d84;"DPL8011: autodeployment failure while deploying the application : Error loading deployment descriptors for module [portlet1] Line 132 Column 11 -- Deployment descriptor file WEB-INF/web.xml in archive [portlet1]. cvc-complex-type.2.4.a: Invalid content was found starting with element 'taglib'. One of '{"http://java.sun.com/xml/ns/javaee":jsp-property-group}' is exected.
Bu hatayı ortadan kaldırmak için web.xml dosyasından aşağıdaki kısmı siliniz.
<jsp-config>
<jsp-property-group>
<url-pattern>*.jspf</url-pattern>
<is-xml>true</is-xml>
</jsp-property-group>
</jsp-config>
* Portletiniz doğru bir şekilde "deploy" edilmiş olsa bile örneğin bir butona bastığınızda sayfa tazelenecek ancak butona bağlamış olduğunuz kod çalışmayacaktır. Aşağıdaki bölümü portlet.xml dosyasına ekleyiniz (hemen </portlet-app>'den önce)
<container-runtime-option>
<name>javax.portlet.escapeXml</name>
<value>false</value>
</container-runtime-option>
I18N için properties dosyaları oluşturmak
https://prbeditor.dev.java.net/
Blogspot'ta xml'li tag'li kodlar yayınlamak
20 Mayıs 2008 Salı
.properties Dosyaları ile Çalışma
private Properties readFromPropertiesFile() {
// Read properties file.
Properties prop = new Properties();
try {
prop.load(new FileInputStream("data.properties"));
} catch (IOException e) {
}
return prop;
}
private void writeToPropertiesFile(Properties prop) {
// Write properties file.
try {
prop.store(new FileOutputStream("data.properties"), null);
} catch (IOException e) {
}
}
private String readKey(Properties prop, String key)
{
return prop.getProperty(key);
}
private void writeKey(Properties prop, String key, String value)
{
prop.setProperty(key, value);
}
JSF 1.1 (JDK 1.4) Web Uygulamalarının veya Portletlerin JSF 1.2 (Java EE 5)'ye Dönüştürülmesi

Winston Prakash'ın blogu aşağıdaki adrestedir:
http://blogs.sun.com/winston/entry/vwpprojectconverter
Ayrıca Prakash'ın geliştirdiği plugin'deki pek çok hata da giderilmiştir.
Netbeans 6.x plugini (NBM dosyası)
Kaynak kodu:






