-jpa nedir?
Android Oyun & Uygulama Geliştirme
-jpa nedir?
http://bilside.com/php-asp-c-c-pascel-delphi-yazilim-programlama/html-dersleri/436-url-nedir.html
http://www.webteders.com/dersler/ders/jQuery-Ajax-Metodu-ile-Veri-Eklemek/410
http://www.alixcan.net/jquery-ajax/jquery-ile-sqlden-veri-cekmek.html
Tamamladık : Ajax tabanlı Java Web uygulamaları uzaktan eğitimi (ücretsiz)
http://www.seo.gen.tr/google-map-e-turk-rakip/#comment-59722
SQL Server “Saving changes is not permitted” Hatasının Çözümü
http://www.webmaster.gen.tr/2010/11/google-buyuyor/
http://www.gokhansabir.net/
http://www.ubenzer.com/ruyamda-tayyip-erdogan-i-gordum/
http://forum.ceviz.net/members/37749/zangetsu.html
http://forum.ceviz.net/java-jsp-jsf/79091-pojo-nedir.html
http://acikfikir.org/2010/12/jdbc-1-java-database-connectivity/
http://www.uludagsozluk.com/k/s%C3%B6zl%C3%BCk-format%C4%B1/&p=23
http://www.serdarkocabas.com/yazilar/jquery/jquery-ile-formdan-veri-alma/67
http://akilligelisim.com/blogunuzu-akilligelisim-comda-tanitmak-ister-misiniz/
http://forum.maxiasp.com/soru.asp?is=oku&sno=20631
http://tympanus.net/codrops/ ********************
http://tympanus.net/Tutorials/ThumbnailsNavigationGallery/
http://user.siteadvisor.com/forums/websiteOwnerVerification.php?domain=serefakyuz.com#top
http://website.informer.com/visit?domain=serefakyuz.com&url=http://serefakyuz.com
http://www.srro.net/yazi/mcafee-siteadvisor-ile-guvenli-sorf
SEO
http://googlewebmastercentral.blogspot.com/
http://www.google.com.tr/support/forum/p/webmasters?hl=tr
https://www.google.com/support/webmasters/bin/topic.py?hl=tr&topic=28807 **********************
http://www.asp.net/mvc/tutorials/mvc-music-store-part-1
http://www.gencmuhendisler.net/wordpress-sayfa-acilislarini-gzip-ile-hizlandirma/
http://www.selmanay.com/?p=137 ********* css sprite tekniği
http://www.dleturk.com/dle_eklenti/1440-google-1-butonu.html *********** +1
http://www.seohocasi.com/anahtar-kelime-yogunlugu/comment-page-2/#comment-12188
http://www.hazirprogram.com/programlama/36-java/240-java-ile-mysql-baglantisi-devam-ogrenci-veritabani-projesi.html#CommentForm********************************************takip et***************************
http://www.omerekinci.com/universitelilerealtin-degerinde-bir-yaz-tatili-gecirmenin-20-altin-kurali/#comments
http://getitandroid.com/
http://findicons.com/
http://magazine.joomla.org/component/k2/item/395
http://www.12parmak.com/314-css-sprite-nedir-nasil-kullanilir/comment-page-1/#comment-4088
http://code.google.com/p/andengineexamples/
http://code.google.com/p/andengineexamples/source/browse/src/org/anddev/andengine/examples/MovingBallExample.java
Bu hatanın çözümü ise oldukça basittir. Yapılması gereken; Tools>Options>Designers>Table and Database Designers kısmından Prevent saving changes that require table re-creation checkbox’ındaki işareti kaldırmaktır. Bu sayede SQL Server artık tablo tasarım değişikliği yapmak isterseniz sizi bu hatayla rahatsız edemeyecektir.
refresh yapmadan sql den veri çekme
<script type="text/javascript" language="javascript">
var http_request = false;
function makePOSTRequest(url, parameters) {
http_request = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
// set type accordingly to anticipated content type
//http_request.overrideMimeType('text/xml');
http_request.overrideMimeType('text/html');
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!http_request) {
alert('Cannot create XMLHTTP instance');
return false;
}
http_request.onreadystatechange = alertContents;
http_request.open('POST', url, true);
http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http_request.setRequestHeader("Content-length", parameters.length);
http_request.setRequestHeader("Connection", "close");
http_request.send(parameters);
}
function alertContents() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
//alert(http_request.responseText);
result = http_request.responseText;
document.getElementById('myspan').innerHTML = result;
} else {
alert('There was a problem with the request.');
}
}
}
function get(obj) {
var poststr = "mytextarea1=" + encodeURI( document.getElementById("mytextarea1").value ) +
"&mytextarea2=" + encodeURI( document.getElementById("mytextarea2").value );
makePOSTRequest('gonderildi.php', poststr);
}
</script>
<form action="javascript:get(document.getElementById('myform'));" name="myform" id="myform">
<textarea id="mytextarea1">my test
1
2
3
</textarea>
<textarea id="mytextarea2">my test2
4
5
6</textarea>
<br>
<input type="button" name="button" value="Submit"
onclick="javascript:get(this.parentNode);">
<input type="submit" name="button" value="Normal Submit Button">
</form>
<br><br>
Server-Response:<br>
<hr>
<span name="myspan" id="myspan"></span>
<hr>
Bu tutorial makalemizin ve makalemizin kapsamı çerçevesinde gerçekleştirdiğimiz projemiz “Yemek Sepeti” nin kısa bir özeti şeklindedir
Makalemizin tamamına burayı tıklayarak ulaşabilirsiniz.
Projemizin tamamına burayı tıklayarak ulaşabilirsiniz.
Struts 2 ve JPA için gerekli kütüphaneler
Bu kaynakları indirdikten sonra başlamaya hazırız.
Bu uygulamada kullanıcı sisteme, firma adı ve firmanın bulunduğu şehir bilgilerini girerek bir firma ekleyebilmektedir. Eklenen firma aynı sayfada bir liste halinde gözükmektedir.Eğer kullanıcı bir firmayı silmek isterse listenin kenarındaki sil linkine tıklamaktadır.Firma listesi boş ise sayfada “Şu anda sisteme kayıtlı bir firma yoktur” yazısı çıkmaktadır.Kullanıcı sisteme firma eklerken firmanın adını mutlaka girmek zorundadır.Aksi halde bir hata mesajı ile karşılasmakta ve firmayı sisteme ekleyememektedir.Olası ekran görüntüleri islemler.jsp’nin anlatılığı yerde verilmiştir.
Veri tabanımızda “id” ve “isim” bilgileri “null” olamayan,birincil anahtarı “id” olan bir firma nesnesi yaratalım:
CREATE TABLE "public"."firma" ( "id" INTEGER NOT NULL, "isim" VARCHAR(50) NOT NULL, "sehir" VARCHAR(50), CONSTRAINT "firma_pkey" PRIMARY KEY("id") ) WITH OIDS;
Uygulamayı yaratmadan önce IDE’de veritabanına bağlantısının doğru çalıştığından ve IDE yazılımının dogru konfigüre edildiğinden emin olmak için aşağıdakiler yapılmalıdır :
• IDE’nin Java platformunun JDK 1.6 ‘e kurulduğunun doğrulanması
• Tomcat web sunucusu için Java platformunun JDK 1.6’e kurulduğunun doğrulanması
Gerekmektedir. Bunun için aşağıdaki adımlar takip edilir.
1. Ana menüden Tools > Java Platform Manager seçilir
2. Java Platform Manager dialog box içinde , JDK 1.6 ‘ın default platform ‘a kurulu olduğundan emin olunur ve kapatmak için Close tıklanır.
3. Ana menüden Tools > Servers seçilir.
4. Servers penceresinden Tomcat 6.0 seçilir ve Platform tıklanır.
5. Seçilen Java Platformunun JDK 1.6 olduğundan emin olunur.
6. Close tıklanır.
Bu örnekte kurulumu yapılmış postgresql 8.2.6 sürümü kullanıldı, ancak JDBC diriver kullanan herhangi bir veritabanı kullanılabilmektedir. IDE postgresql veritabanı bağlantısıyla gelmediği için Runtime penceresinden bu bağlantının oluşturulması gerekir. Postgresql veritabanına bağlantı yaratmak için postgresql JDBC sürücüsüne ihtiyaç duyarız. Eğer hiç postgresql JDBC yoksa eklememiz gerekir.
1. IDE’nin Runtime penceresinde Databases altında Drivers seçilir. Eğer postgresql sürücüsü listelenmezse sağ tıklanarak New Driver seçilir.
• Burada customize denilerek JDBC driver database’e göre konumlandırılır ve eklemek için Add tıklanır.
• Postgresql için bu ayar C:\Program Files\PostgreSQL\8.2\jdbc\postgresql-8.2-506.jdbc3.jar seçilmesiyle olur.
2. JDBC driver ayarı yapıldıktan sonra eklenen driver, Driver altında çıkar ve yeni bir veritabanı bağlantısı açmak için buna sağ tıklanarak Connect Using seçilir , New Database Connection penceresi açılır.
3. New Database Connection penceresinde, URL, username ve password veritabanına göre doldurulur, Advanced alanından public seçilir ve OK tıklanır.
• OK tıklandığında yeni veritabanı bağlantısı Databases altında görülür. Bu andan sonra web uygulaması yaratımına geçilebilir.
1. İlk adım File > New Project (Ctrl-Shift-N).Web kategorisinden Web Application seçilir ve Next’e basılır.
2. Proje adı verilir.. (Bu örnek için ismini “OrnekUygulama” verdik.)
3. Server Tomcat 6.0 sunucusu olarak kurulur..
4. Projenin yeri belirtilir..
5. Java EE versiyonu JAVA EE 5 olarak kurulur..
6. Next tıklanır.
6. Finish tıklanır.
Java persistence desteği TopLink Essentials kütüphanesinin projenin classpath’ine eklenmesiyle sağlanır.
TopLink essentials kütüphanesi IDE içinde \enterprise3\modules\ext\toplink konumunda bulunmaktadır. IDE’nin kurulumunun yapıldığı dizindir.
1. Projects penceresinde yeni açılanörnek web uygulaması OrnekUygulama altındaki Libraries (kütüphaneler) modülü seçilip sağ tıklanarak Add Library seçilir.
2. Add Library dialog kutusunda ToplLink Essentials seçilir ve Add Library tıklanır.
Not: Eğer TopLink Essentials kütüphanesi listede yoksa Manage Libraries tıklanarak Library Manager açılır ve kütüphane toplink-essentials.jar kullanılarak yaratılır ve kütüphane projeye eklenir.
Şimdi Veritabananı sürücüsü için classpath’e Jar arşivi eklenmelidir.
1. Projects penceresinde newWebApplicationName altındaki Libraries sağ tıklanarak Add Jar/Folder seçilir.
2. Add Jar/Folder dialog kutusunda veritabanı için sürücüsü postgresql-8.2-506.jdbc3.jar olarak belirlenir ve open tıklanır.
Bu bölümde veri tabanındaki tablolara ilişkin varlık sınıflarının yaratılması anlatılacaktır. Varlık sınıflarının kalıcılığını sağlayabilmek ve varlıkların yaşam döngüsünü yöneten varlık yöneticisisi(entity manager) için veri kaynağını(datasource) belirleyen bir kalıcılık birimine(persistence unit) ihtiyaç vardır. Tomcat sunucusu kap tabanlı kalıcılığı (container-managed persistence) desteklemediğinden uygulama tabanlı varlık yönetici (application –managed entity manager) kullanılacaktır. Uygulamaya ilişkin kalıcılık birmini yaratmak için şu adımlar izlenir:
1. OrnekUygulama projesine sağ tıklanır ve New > File/Folder seçilir.
2. Persistence Kategorisinden, öncelikle projemiz için gerekli kalıcılık birimini yaratmak için persistence unit seçilir
3. New Persistence Unit dialog kutusunda, kalıcılık birimi için varsayılan(default) adı kullanılır ve Persistence Kütüphanesinin TopLink Essentials olduğundan emin olunur.
4. Database Connection alanında PostgreSQL veri tabanı bağlantısı seçilir.
5. Table Generation Strategy kesimi Create ‘ e kurulur ve Finish tıklanır
Varlık sınıfları veri tabanında bulunan tablolara karşılık gelir. Kalıcılık birimini oluşturduktan sonra ilgili veri tabanına ilişkin varlık sınıflarını yaratmak için şu adımlar izlenir:
1. newWebApplicationName projesine sağ tıklanır ve New > File/Folder seçilir.
2. Persistence Kategorisinden, Entity Classes from Database seçilir ve Next tıklanır
3. New Entity Classes from Database dialog kutusunda Database Connection kesiminde ilgili veri tabanı bağlantısı seçildikten sonra Available Tables kesiminde Tablolar görünür.
4. Add ya da Add All butonları kullanılarak istenen tablolar seçilir ve Next tıklanır.
5. Bundan sonra varlık sınıflarının yer alacağı paket adı yazılır ve Finish tıklanır
• Varlık sınıfları uygulama içinde aşağıda görüldüğü gibi ilgili paket altında oluşturulmuş olur:
Yukarıdaki işlemler yapıldıktan sonra beklenen persistence.xml dosyasının içeriği aşağıdaki gibidir:
<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd "/> <persistence-unit name="OrnekUygulamaPU" transaction-type="JTA"> <provider>oracle.toplink.essentials.PersistenceProvider</provider> <jta-data-source>postgresql</jta-data-source> <properties> <property name="toplink.ddl-generation" value="create-tables"/> </properties> </persistence-unit> </persistence>
Burda veri tabanına bağlantı için elle ayarlarını yaptığımız “postgresql” isimli veri kaynağının kullanıldığı söylenmektedir.”OrnekUygulamaPU” ise bizim için bu ayarlara dolayısı ile veri tabanına erişmemize olanak sağlayacak anahtar olacaktır.
![]() |
Bazı durumlarda provider elle yazılmak zorunda kalınabilir.Bu durumda xml şuna benzeyecektir: |
<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd "/> <persistence-unit name="OrnekUygulamaPU" transaction-type="RESOURCE_LOCAL"> <provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider> <class>JPA.Firma</class> <properties> <property name="toplink.jdbc.url" value="jdbc:postgresql://localhost:5432/ornek_database"/> <property name="toplink.jdbc.user" value="mhy"> <property name="toplink.jdbc.driver" value="org.postgresql.Driver"> <property name="toplink.jdbc.password" value="123456"> </properties> </persistence-unit> </persistence>
Fakat böyle yazıldığında provider kısmındaki “oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider” için sisteme kütüphane eklenmelidir. Normalde toplink kütüphanesi ile beraber gelsede bazı durumlarda sisteme eklenmemiş olabilir.
Bu persistence.xml dosyasında yukarıdakinden farklı olarak veri tabanı ile olan bağlantıyı elle atamış olduk.
• “url” kısmına veri tabanına nasıl erişeceğimiz bilgisini,
• “user” kısmına hangi kullanıcı olarak veri tabanına bağlanmak istediğimiz bilgisini,
• “driver” kısmına hangi sürücüyü kullanarak veri tabanına erişeceğimiz bilgisini,
• “password” kısmına ise veri tabanına bağlanmak için girdiğimiz kullanıcı adına ait şifre bilgisini,
girmemiz gerekmektedir.Ayrıca “provider” kısmına bu dosyada veri kaynağı belirtmediğimiz için bize verdiğimiz bilgilere uygun bir kaynak oluşturabilmesi için oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider servis sağlayıcını ekledik.
Daha sonrada sistemdeki java persistence object varlık sınıflarını xml dosyasına hangi paketlere bağlı olduğunu vererek yazdık.
Bu işlemi yapmak için gereksinimler kısmındaki kütüphaneleri yada Struts‘ın resmi sitesindeki ilgili kütüphaneleri kullanabilirsiniz.
Struts’ın projemizde ihtiyaç duyduğu kütüphaneler:
• commons-logging-1.1.jar
• freemarker-2.3.8.jar
• ognl-2.6.11.jar
• struts2-core-2.0.6.jar
• struts2tutorial.jar
• xwork-2.0.1.jar
![]() |
Bunların dışında kendi ihtiyaçlarınıza göre de kütüphaneler ekleyebilirsiniz. |
Gerekli kütüphaneler eklendikten sonraki görünüm şu şekilde olmalıdır:
Sisteme Struts 2’yi kurmak için web.xml dosyasının aşağıdaki gibi olması ve sistemde kaynak kodların olduğu yerde struts.xml adlı bir struts dosyasının olması yeterlidir.
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd "/> <display-name>Struts</display-name> <session-config> </session-timeout> 30 </session-timeout> </session-config> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
Burdaki “welcome-file” sistem ilk açıldığında hangi sayfanın gösterileceği bilgisidir.
Sistem kullanıcıya 30 saniye içerisinde yanıt verememesi halinde session-timeout oluşmasını sağlar.
Diğer bilgiler struts yapılandırması içindir.
Bu sınıf struts için yaratılmış olup struts.xml deki ekle ve sil action’larını gerçekleştirir.Sistem ilk açıldığında Firma nesnesinin execute fonksiyonunu çağırır (struts.xml’deki yapılanmadan dolayı).Burası eğer veri tabanına daha önce eklenmiş bri firma varsa olan firmaları listeye koyarak görüntülenmesi için SUCCESS döner ve struts ilgili adrese yönlendirmeyi yapar. Herhangi bir hatalı durumun oluşması durumunda dönülen değer ERROR’dur.
• firmaEkle adından da anlaşılacağı gibi sisteme firma ekler.Bu işi islemler.jsp dosyasında submit denildikten sonra struts’ın yönlendirmesi ile gelen form bilgilerini alarak ve projenin iş katmanına ekleme talebini göndererek yapar.
• firmaSil benzer şekilde talebini projenin iş katmanına gönderir.
• Ekleme yada silme talepleri değerlendirildikten sonra firma_listesi güncellenerek ilgili sayfaya gönderilir.
• Bu sayfadaki get ve set methodları jsp dosyalarından erişim için çok önemlidir ve kullanılmak istenen bir değişken için mutlaka “public” olarak tanımlanmalıdır.
package src; import com.opensymphony.xwork2.ActionSupport; import java.util.ArrayList; import java.util.List; public class Firma extends ActionSupport { private String isim = null; private int id = -1; private String sehir = null; private List firma_listesi = null; @Override public String execute() throws Exception{ try{ FirmaBD bd = new FirmaBD(); firma_listesi = bd.bulHepsini(); if(firma_listesi==null) firma_listesi = new ArrayList(); return SUCCESS; } catch(Exception e){ return ERROR; } } public String firmaEkle () { try{ FirmaBD bd = new FirmaBD(); bd.firmaEkle(isim, sehir); firma_listesi = bd.bulHepsini(); if(firma_listesi==null) firma_listesi = new ArrayList(); return SUCCESS; } catch(Exception e){ return ERROR; } } public String firmaSil () { try{ FirmaBD bd = new FirmaBD(); bd.firmaSil(id); firma_listesi = bd.bulHepsini(); if(firma_listesi==null) firma_listesi = new ArrayList(); return SUCCESS; } catch(Exception e){ return ERROR; } } public String getSehir() { return sehir; } public void setSehir(String sehir) { this.sehir = sehir; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getIsim() { return isim; } public void setIsim(String isim) { this.isim = isim; } public List getFirma_listesi() { return firma_listesi; } public void setFirma_listesi(List firma_listesi) { this.firma_listesi = firma_listesi; } }
Bu sınıf iş mantığının olduğu sınıftır.Bir üst katman olan firma dosyasından gelen talepleri veri tabanına iletir ve sonuç dönmesi gerekiyorsa bunu DAO nesnesi (yada nesneleri) olarak döner.
package src; import java.util.List; public class FirmaBD { public void firmaEkle(String isim,String sehir) throws Exception{ FirmaDAO dao = new FirmaDAO( -1 , isim, sehir); dao.kaydet(); } public void firmaSil(int id) throws Exception{ FirmaDAO dao = new FirmaDAO( ); dao.sil(id); } public List bulHepsini(){ FirmaDAO dao = new FirmaDAO( ); return dao.bulHepsini(); } }
Veri tabanı ile iletişim halinde olan yani JPA’yı kullanan sınıftır.
Veri tabanı üzerinde yapacağı işleri genelde sahip olduğu varlık yöneticisi entity manager üzerinden gerçekleştirir.(Sorgu cümlecikleri dışında)
Varlık yöneticisini kullanabilmesi için varlık yönetici fabrikası olan EntityManagerFactory’ye ihtiyaç duyar.Bu fabrikaya persistence.xml dosyasında “persistence-unit name” kısmına verdiğimiz değer parametre olarak geçilerek bize uygun bir varlık yöneticisi dönmesi beklenir.
Eğer firma eklenmek için yaratılmak isteniyorsa bu durumda iş mantığı dao’ya parametre olarak id,isim ve şehir bilgilerini id’si “-1” olacak şekilde verir. Bu durumda id bilgisi biricik olduğundan veri tabanından bir sonraki id bilgisinin çekilmesi gerekir.Bunu da veri tabanında bulunan en büyük id’ye 1 ekleyerek yaptık. ( Normalde bu iş için veri tabanında trigger yada herhangi bir fonksiyon kullanabiliyor olsak da bunun yazılım ile nasıl yapıldığını göstermek istedik.)
Bu örnekte kaydetmek için “persist”,güncellemek için “merge”,silmek için “remove” ve bir adet NamedQuery ile bir adet JPQL örneğini görüyoruz. Ayrıntılı kullanım şekillerine makalemizden ulaşabilirsiniz.
package src; import javax.persistence.Persistence; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.PersistenceContext; import javax.persistence.PersistenceUnit; import JPA.Firma; import java.util.ArrayList; import java.util.List; import javax.persistence.Query; public class FirmaDAO { @PersistenceUnit private EntityManagerFactory emf; @PersistenceContext private EntityManager em; private EntityTransaction transaction; private String isim = null; private Integer id = -1; private String sehir = null; private Firma jpa_firma = null; public FirmaDAO() { emf = Persistence.createEntityManagerFactory("OrnekUygulamaPU"); em = emf.createEntityManager(); } public FirmaDAO(Firma f) { emf = Persistence.createEntityManagerFactory("OrnekUygulamaPU"); em = emf.createEntityManager(); isim = f.getIsim(); id = f.getId(); sehir = f.getSehir(); jpa_firma = f; } public FirmaDAO(int _id, String _isim, String _adres) throws Exception { emf = Persistence.createEntityManagerFactory("OrnekUygulamaPU"); em = emf.createEntityManager(); isim = _isim; id = _id; sehir = _adres; try { if (id == -1) { //eklemek icin yaratılıyorsa id biricik oldugu icin cakismayi onlememiz lazim Query query = getEntityManager().createQuery("select max(f.id) FROM Firma f"); if (query.getSingleResult() == null) { id = -1; } else { id = (Integer) query.getSingleResult(); } jpa_firma = new Firma(id + 1, isim); } else { //diger islemler icin yaratılıyorsa jpa_firma = new Firma(id, isim); } jpa_firma.setSehir(sehir); } catch (Exception ex) { System.out.println(ex.getMessage()); throw new Exception(); } } public void baslatTransaction() { transaction = getEntityManager().getTransaction(); transaction.begin(); } public void bitirTransaction() { transaction.commit(); } public void kaydet() throws Exception { try { baslatTransaction(); if (jpa_firma != null) { getEntityManager().persist(jpa_firma); } bitirTransaction(); } catch (Exception ex) { bitirTransaction(); System.out.println(ex.getMessage()); throw new Exception(); } } public void guncelle() throws Exception { try { baslatTransaction(); if (jpa_firma != null) { getEntityManager().merge(jpa_firma); } bitirTransaction(); } catch (Exception ex) { bitirTransaction(); System.out.println(ex.getMessage()); throw new Exception(); } } public void sil(int id) throws Exception { try { baslatTransaction(); jpa_firma = bulIDyeGore(id); if (jpa_firma != null) { getEntityManager().remove(jpa_firma); } bitirTransaction(); } catch (Exception ex) { bitirTransaction(); System.out.println(ex.getMessage()); throw new Exception(); } } public Firma bulIDyeGore(int id) { return getEntityManager().find(Firma.class, id); } public List bulIsimeGore(String isim) { // NamedQuery ornegi: try { Query query = getEntityManager().createNamedQuery("Firma.findByIsim"); query.setParameter("isim", isim); List gecici_list = query.getResultList(); ArrayList sonuc_listesi = new ArrayList(); for (int i = 0; i < gecici_list.size(); i++) { sonuc_listesi.add(new FirmaDAO(gecici_list.get(i))); } return sonuc_listesi; } catch (Exception ex) { System.out.println(ex.getMessage()); return null; } } public List bulHepsini() { //JPQL ornegi try { Query query = getEntityManager().createQuery("select f FROM Firma f"); List gecici_list = query.getResultList(); ArrayList sonuc_listesi = new ArrayList(); for (int i = 0; i < gecici_list.size(); i++) { sonuc_listesi.add(new FirmaDAO(gecici_list.get(i))); } return sonuc_listesi; } catch (Exception ex) { System.out.println(ex.getMessage()); return null; } } @PersistenceContext public void setEntityManager(EntityManager em) { this.em = em; } @PersistenceContext public EntityManager getEntityManager() { return em; } public String getSehir() { return sehir; } public void setSehir(String sehir) { this.sehir = sehir; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getIsim() { return isim; } public void setIsim(String isim) { this.isim = isim; } }
Bu sınıfımız bir Java Persistence Entity sınıfı olup “Varlık Sınıflarının Yaratılması” konusunda anlatılanlar yapıldığında belirtilen klasöre otomatik olarak oluşturulmaktadır. Artık bu sınıfın yaratılmasından sonra veri tabanındaki tablolar tamamen unutulmalı, DAO’larda yazılacak olan sorgu cümlecikleri tamamen bu sınıflar üzerinden olmalıdır. Ayrıntılı bilgi için makalemize bakabilirsiniz.
package JPA; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; @Entity @Table(name = "firma") @NamedQueries({ @NamedQuery(name = "Firma.findById", query = "SELECT f FROM Firma f WHERE f.id = :id"), @NamedQuery(name = "Firma.findByIsim", query = "SELECT f FROM Firma f WHERE f.isim = :isim"), @NamedQuery(name = "Firma.findBySehir", query = "SELECT f FROM Firma f WHERE f.sehir = :sehir") }) public class Firma implements Serializable { private static final long serialVersionUID = 1L; @Id @Column(name = "id", nullable = false) private Integer id; @Column(name = "isim", nullable = false) private String isim; @Column(name = "sehir") private String sehir; public Firma() { } public Firma(Integer id) { this.id = id; } public Firma(Integer id, String isim) { this.id = id; this.isim = isim; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getIsim() { return isim; } public void setIsim(String isim) { this.isim = isim; } public String getSehir() { return sehir; } public void setSehir(String sehir) { this.sehir = sehir; } @Override public int hashCode() { int hash = 0; hash += (id != null ? id.hashCode() : 0); return hash; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof Firma)) { return false; } Firma other = (Firma) object; if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { return false; } return true; } @Override public String toString() { return "JPA.Firma[id=" + id + "]"; } }
Struts 2’nin bir özelliği olan validation dosyaları bize kullanım kolaylıkları sağlamaktadır.Bu örneğimizde firma Ekleme formundaki isim kısmının boş kalmaması sağlanmaktadır.
Validation hakkında ayrıntılı bilgi için tıklayınız…
<!DOCTYPE validators PUBLIC"!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> <field name="isim"> <field-validator type="requiredstring"> <message>İsim kısmı boş bırakılamaz</message> </field-validator> </field> </validators>
Bu sayfa bizim örnek uygulamamızdaki işlemlerimizi gerçekleştireceğimiz sayfadır.Sistem çalıştığında ilk önce “sisteme giriş yapın.” gibi bir yazı çıkar daha sonra ordaki link’e tıklandığında bu sayfa açılır ve eğer firma listesi dolu ise yeni kayıt formunun altında bu liste gösterilir. Listedeki her bir firmanın yanında “sil” tuşu vardır.Eğer burası tıklanırsa seçilen firma sistemden( dolayısıyla veri tabanından ) çıkarılmış olur.Burda kullanılan “if” yapısı struts 2’nin sağladığı bir özelliktir.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <title>Firma Ekle - Listele - Sil</title> <link href=""rel="stylesheet"type="text/css"> <s:head theme="xhtml"> </head> <body> <s:form action="firmaEkle" method="POST"> <tr> <td colspan="2" align="center"> <font color="#000080"/><h2>Yeni Firma Kaydı</h2></td></font> </tr> <tr> <s:textfield name="isim"label="Firmanın Adı"value=""""> <s:textfield name="sehir"label="Firmanın Bulunduğu Şehir"value=""""> </tr> <s:submit value="Kaydet"/> </s:form> <s:set name="d"value="%{firma_listesi}"> <s:if test="%{#d.size()!= 0 }"/> <font color="#000080"/><h1>Firma Listesi:</h1></font> <table width="80%"border="1"align="center"> <tr bgcolor="#99C68E"/> <td><b><s:text name="Firmanın Adı"/></b></td> <td><b><s:text name="Firmanın Bulunduğu Şehir"/></b></td> <td></b><s:text name="Firmayı Sil"/></b></td> </tr> <s:iterator value="id"status="status"> <tr bgcolor="#C3FDB8"/> <td><s:property value="%isim"/></td> <td><s:property value="%sehir"/></td> <s:url action="firmaSil"id="url_sil"> <s:param name="id"value="id"> </s:url> <s:a href="%{url_sil}"/>Sil</s:a> <s:a href="%{url_sil}"/> </tr> </s:iterator> </table> </s:if> <s:else> <font color="#000080"/> <font color="#000080"/><h2>Şu anda sistemde kayıtlı bir firma yoktur</h2></font> </s:else> </body> </html>
Bu sayfanın görünüşü şu şekildedir:
Ya da:
Firma Adının girilmediği durumda:
Bu xml dosyasında action’lar yer almaktadır.
Örneğin firmaEkle action’ına baktığımızda bunun Firma adlı sınıfın firmaEkle fonksiyonunu kullandığını ve bunu kullanmadan önce “/WEB-INF/islemler.jsp” sayfasındaki formun verilerini bu Firma dosyasındaki ilgili değişkenlerine işlediğini (örneğin formda isim textbox’ı , Firmada da isim değişkeni var,Firmadaki isim değişkenin değeri bu formdan gelen değer ile güncellenir.) görüyoruz.Bunu yapmasını input tag’i söylemektedir.
Firma sınıfındaki ekleFirma fonksiyonun doğru çalışması halinde sonuç sayfası olarak “/WEB-INF/islemler.jsp” sayfasına ( bunu yapmasını result tag’i söylemektedir ), hatalı çalışması durumunda ise “/WEB-INF/hata.html” sayfasına dönüleceği( bunu yapmasını ise error tag’i söylemektedir) de bu action’ın içinde yazılmıştır.
<?xml version="1.0" encoding="UTF-8"> <!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false"> <constant name="struts.devMode" value="true"> <package name="genel" extends="struts-default"> <action name="girisSayfaGoster" class="src.Firma"> <result>/WEB-INF/jsp/islemler.jsp<result> </action> <action name="firmaEkle" class="src.Firma" method="firmaEkle"> <result name="input">/WEB-INF/islemler.jsp</result> <result name="error">/WEB-INF/hata.html</result> <result>/WEB-INF/islemler.jsp<result> </action> <action name="firmaSil" class="src.Firma" method="firmaSil"> <result name="error">/WEB-INF/hata.html</result> <result>/WEB-INF/islemler.jsp<result> </action> </package> </struts>
Örnek uygulamanın kodlarını burayı tıklayarak indirebilirsiniz…
The Java Persistence API – A Simpler Programming Model for Entity Persistence
Apache Struts 2 Documentation: Struts 2 + Spring 2 + JPA + AJAX
1.gün
– Donanım Envanteri (asset management) for wiki track
2. gün
-web framework (php veya java)
–>veritabanı bağlantısı olacak
–> admin panel sistemi olacak
==>tablo yapısı kurulacak
—>veri girişi(ekleme, güncelleme, silme)
3. gün
– Java struts web framework buldum.
– xampp kurup gerekli ayarlamaları yaptım.
– struts uygulamasının çalıştırılması için gerekli araştırmaları yaptım
4. gün
java uygulamaları için gerekli olan tomcat server ın kurulumu için gerekli olan java jdk1.6.0_25 ve jre6 bileşenlerini indirdim.
tomcat kurulumunu ve gerekli ayarlamaları yaptım(ortam değişkenleri)
—————–servlet nedir——————
struts framework uygulamaları olan war dosyalarını tomcat a yükledim ve uygulamaları çalıştırdım.
5. gün
kod düzenlemeleri için Netbeans konfigürasyonunu yaptım
netbeans’ in struts2 yi görmesi için gerekli eklentileri indirip yükledim.
6. Gün
Netbeans ile war dosyaları oluşturdum. Tomcat ile localhostta ilk java web programını çalıştırdım.
postgreSQL veritabanı ile netbeans bağlantısını kurdum
7. Gün
http://www.bilgisayardershanesi.com/bilgisayar_dersleri/ajax-dersleri.html
Java web app ile oluşturacağım sayfalarda kullanmak üzere javascript, ajax öğrendim
http://www.phpr.org/etiket/php-ajax-ornekleri/
8.gün
9.gün
Java web app ile struts üzerine sayfalar oluşturdum
xml dosyasında bağlantıları gerçekleştirdim
http://www.markosweb.com/www/serefakyuz.com/
http://scripts.downloadroute.com/PHP/
http://www.frmtr.com/muhendislik-mimarlik-peyzaj-mimarligi/4079433-php-ile-wiki-track-yapimi-icin-web-framework-ariyorum.html#post38505587
http://forum.iyinet.com/phpbb/168012-php-ile-wiki-track-yapimi-icin-web-framework-ariyorum.html
son wikiphp: http://sourceforge.net/projects/phpwiki/
http://en.wikipedia.org/wiki/Comparison_of_Web_application_frameworks // Sling, strust http://www.jsptr.net/
php dökümanları http://projects.apache.org/
———————————
http://www.vaannila.com/struts-2/struts-2-example/struts-2-hello-world-example-1.html http://struts.apache.org/2.x/docs/tutorials.html
http://struts.apache.org/2.x/docs/faqs.html http://struts.apache.org/2.x/docs/application-servers.html
http://struts.apache.org/2.x/index.html
http://struts.apache.org/index.html
http://struts.apache.org/kickstart.html http://ftp.itu.edu.tr/Mirror/Apache/tomcat/tomcat-7/v7.0.14/README.html
http://tomcat.apache.org/download-70.cgi
———————————–
http://www.jguru.com/faq/view.jsp?EID=123229 ——> DEPLOY THE WAR FILES TO TOMCAT ————————————
http://erenbasaran.wordpress.com/2010/01/29/tomcat-kurulumu-win/
http://www.yazilimakademi.com/makale_detay.aspx?id=151&title=Tomcat%20Kurulumu !!!!!!!!!!!!!en son önemli
http://stackoverflow.com/questions/4088063/netbeans-support-for-struts-2 http://plugins.netbeans.org/plugin/23467 yorumu takip et
Java: Install struts2 plugin on netbeans 6.8
http://devtalks.blogspot.com/2009/07/create-struts2-project-in-netbeans.html evdeeeeeeeee bak
http://www.roseindia.net/programming-tutorial/Struts-Tutorials Struts applications
http://belgeler.cs.hacettepe.edu.tr/yayinlar/konular/jpa/001/index.html Postgresql veritabanı bağlantısı
http://waytoj2ee.blogspot.com/2010/07/struts2-mysql.html http://www.roseindia.net/struts/struts2/struts-2-mysql.shtml
7. Gün
———————————————————————-
Struts2 examples http://www.roseindia.net/programming-tutorial/Struts-Tutorials/struts2-tutorials/TutorialListingPage23
8. Gün :
————————————————————-
http://www.mesutaydin.org/jsp-bean-kullanimi/#more-95 http://www.mesutaydin.org/jsp-giris-1/
http://www.gorseldersler.net/kategori;web-tasarim-programlama.html
http://www.problemcocuk.com/10-adet-javascript-ajax-tab/ ajax tabs
http://www.webteders.com/dersler/ders/jQuery-Ajax-Metodu-ile-Veri-Eklemek/410 veri ekleme
http://www.ajaxrain.com/search ajax scriptlerrrrrrrrrrrrrrrrrrr
http://www.w3schools.com/js/tryit.asp?filename=tryjs_function1
http://www.sevdam.hostwq.net/Program/Javascript_Buton.html buton rengi değiştirme
9. Gün
https://cwiki.apache.org/S2WIKI/home.html http://www.roseindia.net/struts/struts2/
10. Gün
11. Gün
http://www.struts2nedir.org/ http://struts.apache.org/2.x/docs/validation.html
http://www.vaannila.com/struts-2/struts-2-example/struts-2-example.html
http://java.dzone.com/articles/struts2-tutorial-part-37 validatorsssssssssssssssssssss
http://www.mkyong.com/tutorials/struts-2-tutorials/
——————————————————————————–
http://www.koodla.com/2008/02/24/ajax-ile-veritabanina-veri-ekleme/
http://www.google.com.tr/search?q=struts++postgreSQL+save+data&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:tr:official&client=firefox-a struts postgreSQL save data
12. Gün
http://viralpatel.net/blogs/2010/01/struts-2-ajax-tutorial-example-drop-down.html
Tutorial:Combos dependientes con JSP, Ajax y Postgresql en Netbeans
http://developerhelpway.com/framework/jpahibernate/jpa-insert-data-into-database.php
13. Gün
http://struts.apache.org/2.x/docs/struts-2-spring-2-jpa-ajax.html
14. Gün
http://www.javaworld.com/javaworld/jw-08-2007/jw-08-ajaxtables.html?page=5
http://sites.google.com/site/halilagin/projelerim/struts2-dokumanlar ////////////////////////////// ///// jpa-persist method, jsf/////
http://www.selimgoktas.com.tr/post/SERVLET-JSF-JPA-POJO-SEAM-nedir-.aspx
http://www.objectdb.com/java/jpa/persistence/store
15. Gün
http://www.javaworld.com/javaworld/jw-01-2008/jw-01-jpa1.html?page=3 persistence.createentitymanagerfactory returns null
16. Gün
http://www.ethemsulan.com/2010/10/hibernate-ajax-jspjavaserver-pages.html ****************
17. Gün
http://swdevnotes.blogspot.com/2010/07/add-values-to-combo-box-dynamically.html
http://www.tek-tips.com/viewthread.cfm?qid=1205838&page=9 veritabanından combobox a veri çekme
http://www.webdevelopersnotes.com/tips/html/finding_the_value_of_a_radio_button.php3
http://www.bilgisayardershanesi.com/bilgisayar_dersleri/eyceks-kutuphanesi-ve-ornek-bir-uygulama.html
http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/Servlet-Tutorial-Form-Data.html HANDLING FORM DATA
18. Gün
http://www.devsphere.com/mapping/docs/guide/simple.html http://ubuntuforums.org/showthread.php?t=565819 // Accessing a java class
19. Gün
http://www.tutorialspoint.com/ajax/ajax_in_action.htm
http://java.sun.com/developer/technicalArticles/J2EE/AJAX/RealtimeValidation/
20. Gün
http://directwebremoting.org/dwr/introduction/getting-started.html
http://www.javadb.com/get-request-parameters-in-a-servlet
21. Gün
http://www.ajaxprojects.com/ajax/tutorialdetails.php?itemid=222 ******from ajax to class******
http://jspdersi.wordpress.com/2007/01/26/jsp-mysql-islemleri/ *****MYSQL Tomcat bağlantısı*****
http://www.java2s.com/Code/Java/JSP/UsingaJavaBeanJsp.htm
http://struts.1045723.n5.nabble.com/Error-2-1-6-index-td3491280.html ***delete struts2-rest-plugin.jar****
http://www.google.com.tr/search?q=removing+the+%40Transactional+annotations&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:tr:official&client=firefox-a
http://blogs.oracle.com/divas/entry/the_server_encountered_an_error ******To find Problem******
22. Gün
***********TOMCAT+APACHE***********
http://www.godoro.com/Divisions/Ehil/Mahzen/Java/TomcatAndWebServer/txt/html/document_TomcatAndApache.html
***********TOMCAT+APACHE***********
https://cwiki.apache.org/GMOxDOC11/configure-apache-httpd-with-jakarta-tomcat-connector-modjk.html ***********TOMCAT+APACHE***********
http://www.cyber-warrior.org/Forum/xmlhttprequest-nedir-nasil-kullanilir_343516,0.cwx ******************
*********************************************************************************************************
************ http://javabuzzu.blogspot.com/2010/12/ajax-with-jsp-and-servlet-example.html ******************
*********************************************************************************************************
http://www.fiftyfoureleven.com/resources/programming/xmlhttprequest/examples
http://www.coderanch.com/t/469356/Servlets/java/Servlet-return-value-JQuery-Ajax
http://tekne-techne.blogspot.com/2011/02/jquery-how-to-pass-data-to-servlet-on.html
http://www.codewalkers.com/c/a/XML-Tutorials/Handling-Data-for-Ajax-with-JSON/ ***************************
23. Gün
mediawiki2tracwiki
http://trac.edgewall.org/wiki/TracFaq
http://consense-project.com/blog/mediawiki_export_to_trac-wiki#DirectSolution *** Direct Solution
http://consense-project.com/blog/mediawiki_export_to_trac-wiki **** Indirect Solution
http://trac.edgewall.org/ticket/5241 ******************* lots of converters
https://studio.plugins.atlassian.com/wiki/display/UWC/UWC+Quick+Start
24. Gün
http://eclipsesourcecode.appspot.com/jsrcs/org.eclipse.mylyn/sandbox/org.eclipse.mylyn.trac.wiki/src/org/eclipse/mylyn/internal/trac/wiki/editor/TracWikiPageEditor.java.html**********java code for wiki trac page editor********
http://trac-hacks.org/wiki/TracWysiwygPlugin ****download plugin****
http://trac-hacks.org/wiki/Install *********setup plugin*************
java rich faces
primefaces framework
104 mühendis 15 bilgisayar mühendisi 67 elektronik mühendisi 116 teknik eleman
https://cwiki.apache.org/confluence/users/viewfollow.action?username=serefakyuz58 moryazilim.com Ust Bilgi – Alt Bilgi Eklemek foreach (Microsoft.Office.Interop.Word.Section wd in this.dosyaac.Sections) { wd.Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Font.ColorIndex = WdColorIndex.wdDarkRed; wd.Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Font.Size = 20; wd.Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Text = “ABC YAZILIM A.Ş”; wd.Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter; wd.Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Font.ColorIndex = WdColorIndex.wdDarkRed; wd.Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Font.Size = 20; wd.Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Text = “ABC YAZILIM A.Ş”; wd.Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter; }