Bilgisayarlar ve Akıllı Telefonlar Nasıl Şarj Edilmelidir?

Çoğu kişinin sorunudur kısa sürede ömrü azalan bataryalar. Gelişen teknolojinin son ürünleri olan ve bilgisayar kategorisine dahil edilen akıllı telefonların pil ömürleri de önem kazanmaya başladı. Peki pil ömrünü uzun süre sağlıklı bir şekilde muhafaza etmek için bilgisayarlar, akıllı telefonlar, notebook’lar ve tabletleri şarj ederken nelere dikkat etmeliyiz?. Bu güne kadar uyguladığımız hangi yanlış tekniklerden kaçınmalıyız? Gelin hep birlikte öğrenelim.

Bu tür cihazlar genelde lityum-ion pilleri kullanırlar. Bu bataryalrın şarj yöntemleri için farklı görüşler mevcuttur. Bir kesim bataryaların %40-%80 arasında bir doluluk oranına sahip olması gerektiğini savunurken, bir diğer kesim bataryanın tamamının(%100) doldurulmadan şarj kablosunun çıkarılmaması gerektiğini savunurlar.

linkler

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

JPA and Hibernate with JSP Ajax Example

Nesne – İlişkisel Eşleştirme ve JPA (Java Persistence API)

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

ama stacktrace e dikkatli bak
tam nerede problem oldugunu yaziyordur

o dediğiniz şeye nerden bakacağım =)

tomcat mi kullaniyorsun
application nerede calisiyor
o log yaziyordur bi yere
tomcatse tomcat loglarinda gorursun

 

 

 

 

 

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; }

staj günlüğü

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

postgreSQL bağlantısı ve örnek program

Hazırlayanlar Mustafa Halil YILDIZ , Özgür OKKA Kaynak makaleleri göster

Gelişmiş Konu Örneği

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.

NetBEANS üzerinde Struts ve JPA ‘nın örnek uygulama ile kurulumu ve uygulanışı

Gereksinimler

 

Java JDK 1.6

Tomcat 6.0.14

Netbeans 6.0

PostgreSQL 8.2.6

Struts 2 ve JPA için gerekli kütüphaneler

Bu kaynakları indirdikten sonra başlamaya hazırız.

Örnek Uygulamanın Konusu

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.

Örnek Proje için Kurulum

 

Veri Tabanı

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;

NetBEANS Kurulumu:

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.

Veritabanı Bağlantısı Yaratılması

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.

Proje Ayarlarının Yapılması

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 için Destek Eklenmesi

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.

Veritabanı Sunucusu için Destek Eklenmesi

Ş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.

Varlık Sınıflarının Yaratılması

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:

persistence.xml

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.

Struts 2 için kütüphanelerin eklenmesi

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:

web.xml dosyası

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.

Örnek Projenin Dosyaları

Java Dosyaları

 

Firma.java

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;
    } 

}
FirmaBD.java

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();
    }
}
FirmaDAO.java

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;
    }
}
Firma.java ( Entity Class )

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 + "]";
    }
}

Validation ve JSP Dosyaları

 

Firma-firmaEkle-validation.xml

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>
islemler.jsp

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:

struts.xml

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 Projenin Kodları

Örnek uygulamanın kodlarını burayı tıklayarak indirebilirsiniz…

Referanslar

 

Struts 2

The Java Persistence API – A Simpler Programming Model for Entity Persistence

Apache Struts 2 Documentation: Struts 2 + Spring 2 + JPA + AJAX

GlassFish Project – Java Persistence Example