Java web uygulamalarında Spring framework xml dosyası olarak kullanılmaktadır.
Spring'in işlevi tomcat v.b sunucularda uygulama başlarken sistemde kullanılan
nesnelerin konfigürasyonunu sağlar. Hibernate sunucu ile konfigürasyonu
yapılması gereken bir iş çatısıdır. Dolayısıyla Spring dosyasında
hibernate tanımı yapmak uygulama açısından daha performanslı olacaktır.
Spring kullanmak için jar kütüphanelerini indirmeniz gerekmektedir.
http://repo.springsource.org/libs-milestone-local/org/springframework/spring/4.0.0.M3/spring-framework-4.0.0.M3-dist.zip
adresinden indirebilirsiniz. İndirdiğiniz jar dosyalarını WebRoot-->WEB-INF-->lib
klasörü altına kopyalayın. Bu klasör web uygulamasında her zaman kütüphane yeridir.
Java web uygulamalarında Spring dosyası
WebRoot-->WEB-INF klasörü altında bulunur.
Spring dosya ismi genellikle applicationContext.xml olarak tanımlanır.
Spring tamamladıktan sonra Hibernate için kütüphane indirmemiz gerekiyor.
http://www.hibernate.org/subprojects/ogm/download.html
adresinden indirebilirsiniz.
İndirilen hibernate kütüphaneleri lib klasörü altına kopyalanır.
Spring - Hibernate entegrasyonu sağlayan applicationContext.xml dosyası
aşağıdaki gibi olacaktır.
-------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="iso-8859-9"?>
<!DOCTYPE beans PUBLIC
"-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${hibernate.connection.driver_class}" />
<property name="url" value="${hibernate.connection.url}" />
<property name="username" value="${hibernate.connection.username}" />
<property name="password" value="${hibernate.connection.password}" />
</bean>
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>WEB-INF/conn.properties</value>
</list>
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource" />
</property>
<property name="mappingLocations">
<list>
<value>classpath*:hibernate/*.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=${hibernate.dialect}
hibernate.hbm2ddl.auto=update
</value>
</property>
<property name="lobHandler">
<bean class="org.springframework.jdbc.support.lob.DefaultLobHandler" />
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="dao" class="Dao">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="service" class="Service">
<property name="dao" ref="dao" />
</bean>
<bean id="serviceBean"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="target">
<ref bean="service" />
</property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
</beans>
-------------------------------------------------------------------------------------------------------
Xml dosyasında tanımladığımız değişkenler bulunmaktadır. Bu değişkenler aşağıdaki adımlarla
göstereceğiz.
Java modellemede bir üst sınıf kullanacağız. Veri aktarımında kullanacağımız nesneleri bu
üst sınıftan kalıtım veya interface yaparak işlem gerçekleştirilecektir. (src dosyası altında oluşturuyoruz.)
Üst sınıf
----------------------------------------------
public class BaseModel{
}
Örnek bir işlem için bir model sınıf oluşturalım. (src dosyası altında oluşturuyoruz.)
--------------------------------------------------------
import java.io.Serializable;
public class GenelModel extends BaseModel implements Serializable{
private String LABEL;
private String VALUE;
public GenelModel() {
super();
}
public GenelModel(String id, String ad) {
this.LABEL=id;
this.VALUE=ad;
}
public String getLABEL() {
return LABEL;
}
public void setLABEL(String label) {
LABEL = label;
}
public String getVALUE() {
return VALUE;
}
public void setVALUE(String value) {
VALUE = value;
}
}
Spring Xml dosyasında Dao ve Service java nesnelerinin değişkenlerini kullandık. src klasörü altında bu java sınıflarını
tanımlamamız gerekiyor. Sınıfların tanımı aşağıdaki gibidir.
Servis.java
import java.util.HashMap;
public class Service {
private Dao dao;
public Dao getDao() {
return dao;
}
public void setDao(Dao dao{
this.dao = dao;
}
public ArrayList getTestList(HashMap params) throws Exception {
// TODO Auto-generated method stub
return dao.getTestList();
}
public void savaModel(BaseModel model) throws Exception {
// TODO Auto-generated method stub
dao.save(model);
}
}
Dao.java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import net.sf.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.SessionFactoryUtils;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class Dao extends HibernateDaoSupport{
public Session openSession() {
return (Session) SessionFactoryUtils.getSession(getSessionFactory(), false);
}
public Query getQuery(String query) throws HibernateException {
Session session = this.openSession();
return (Query) session.createQuery(query);
}
public void CloseSession(){
openSession().close();
}
public ArrayList getTestList(HashMap params) throws Exception {
Criteria criteria = openSession().createCriteria(BaseModel.class);
return (ArrayList) criteria.list();
}
public void savaModel(BaseModel model) throws Exception {
// TODO Auto-generated method stub
openSession().save(model);
}
}
Hibernate iş çatısında her tabloya karşılık bir java nesnesi bulunmaktadır.
Java modellerini ve tablolarını ilişkilendiren hbm.xml dosyalarıdır. Yukarıdaki
Spring xml dosyasında hbm.xml dosyalarının buluanacağı dizin tanımı var.
Classpath olarak hibernate olarak tanımlanmış. Yani src/hibernate klasörünü oluşturuyoruz.
Tanımladığımız GenelModel java sınıfına karşılık gelen bir tablo olsun.
Tablo ismi GENEL dir. Tablo ile GenelModel java sınıfını birleştiren
hibernate hbm.xml dosyasını src klasörü altına oluşturalım.
Dosya ismi
Genel.hbm.xml dir.
-----------------------------------------------------------------------------------------------------
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping auto-import="true" default-access="field">
<class name="GenelModel" table="GENEL" lazy="false">
<id name="VALUE" column="VALUE">
<generator class="native"/>
</id>
<property name="LABEL" column="LABEL" />
</class>
</hibernate-mapping>
-----------------------------------------------------------------------------------------------------
Spring Xml dosyasında conn.properties dosya tanımı bulunuyor. Bu dosyayı da oluşturuyoruz.
Dosya oluşturulma yeri WEB-INF klasörü altında conn.properties olacaktır. İçeriği aşağıdaki gibidir.
----------------------------------------------------------------------------------------------------
hibernate.connection.driver_class = org.gjt.mm.mysql.Driver
hibernate.connection.username = root
hibernate.connection.password = root
hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
hibernate.connection.url = jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=UTF-8
----------------------------------------------------------------------------------------------------
Örneğimizde mysql veritabanı kullandık. Mysql kütüphanesini Spring ve Hibernate benzer olarak indirip tanımlamanız gerekmektedir.
Burdan indirebilirsiniz http://www.java2s.com/Code/Jar/m/Downloadmysqljar.htm
Tekrar hatırlatalım java web uygulamalarındaki kütüphane yeri WEB-INF/lib klasörüdür.
En son olarak tanımladığımı Spring xml dosyasını (applicationContext.xml) web.xml'de tanımlamamız gerekir.
web.xml dosyası WEB-INF klasörü altındadır ve aşağıdaki gibidir.
---------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>ASTIDEN07092011</display-name>
<!--
<icon> <small-icon></small-icon> <large-icon></large-icon> </icon>
-->
<!-- Spring ApplicationContext -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>
</web-app>
---------------------------------------------------------------------------------------------------------
Tüm tanımları yaptıktan sonra Web uygulamanızda kullanacağınız framework e göre aşağıdaki
java metodunu kullanabiliriz.
public testMetod() throws Exception {
Service service= (Service) getBean("serviceBean");
// veri getirme örneği. Veritabanında GENEL tablosunda veri olduğunu varsayıyoruz.
HashMap params=new HashMap();
ArrayList<GenelModel> liste=service.getTestList(params);
for(GenelModel model:liste){
System.out.println(model.getLABEL);
}
//veri kayıt örneği.
//saveModel metodunda BaseModel tanımlanmıştı.
//Ama GenelModel nesnesini ekledik. Bu hataya neden olmaz. Çünkü BaseModel, GenelModel'in üst sınıfıdır.
//Bu şekildeki bir kullanım programa esneklik sağlar.
GenelModel model2=new GenelModel();
model2.setLABEL("test değer");
service.savaModel(model2);
//setVALUE kullanmadık. Nedeni ise hbm.xml dosyasında tabloda bu sütün otomatik artan değer almaktadır.
//Bu yüzden değer set etmeye gerek yoktur.
}
Not:Yukarıdaki metodu web uygulamasında bir butona click event olarak tanımlayabilirsiniz.
Örnekte basit bir model olan GenelModel kullandık.
Bu modellerin üst sınıfı BaseModel dir. Üst sınıf kullanmamızın nedeni uygulamaya esneklik
kazandırmak. Çünkü bir model daha oluşturduğumuzda ve bu modele ait veri getiren veya veri kaydeden metodlar, dao ve servis
sınıflarında tekrar yazılması gerekebilirdi.(ör:saveModel metodu tüm kayıt işlemlerinde kullanılabilir.)
Halbuki işlem gören metodda yani testMetod'da liste getirilirken Arraylist generic olarak
BaseModel'den kalıtım yapmış bir model sınıfı kullanılmaktadır.
(Örnekte standart metodumuz getTestList kullandık.)
İsteğinize bağlı olarak
Birden fazla java modeli tanımlayabilirsiniz. Buna bağlı olarak hbm.xml dosyalarını da oluşturmanız gerekir.
Bazı modeller birbirine many to one veya one to many olarak gerçekleşebilir.
Örneğin ders modeli ve öğrenci modeli olsun. Öğrenci modeli içerisinde ders modeli listesi bulunabilir.
Öğrenci modeli için hbm.xml dosyasında Ders modeli için one to many xml tag'ini kullanmanız gerekir.
Spring ve hibernate entegrasyonu sağlayan yapı temel olarak yukarıdaki adımlardan oluşur.
Umarım yararlı bir bilgi olur.
30 Ağustos 2013 Cuma
5 Ağustos 2013 Pazartesi
Liferay Weblogic Kurulumu
Weblogic download linki
war dosyası download linki
ek kütüphaneler linki
Gerekli dökümanlar indirildikten sonra Weblogic kurulumu yapılır.
Weblogic nasıl kurulur linki
1. Weblogic kurulduktan sonra Liferay için datasource oluşturulur.
Weblogic girişi yapıldıktan sonra Services->Data Sources ekranı açılır.
Ekranda New butonuna tıkladıktan sonra Generic Data Source seçiyorsunuz.
Database Type seçildikten sonra
JNDI Name : jdbc/LiferayPool yapıyoruz.
Sonraki adımlarda kurduğunuz veritabanı ile ilgili işlemleri tamamladıktan sonra datasource işlemi
bitmiş olacaktır. Oluşturulan Datasource üzerine tıkladıktan sonra target sekmesinde bir server’e
hedef olarak ekleyin. Örneğin AdminServer olabilir.
Not: Mail sunucunuz varsa Services-> Mail Sessions kısmında mail işlemini gerçekleştirebilirsiniz.
2. İndirdiğiniz weblogic war dosyasını winrar veya başka programlarla bir dosyaya extract edin.
Dosya ismi Liferay olsun. Dosya belirli bir dizinde olması gerekir. Örneğin c:/Liferay şeklinde.
Sıkıştırma dosyası açıldıktan sonra portal-ext.properties dosyasını oluşturuyorsunuz. Dosyanın
içine
jdbc.default.jndi.name=jdbc/LiferayPool
yazıp kaydediyorsunuz. Eğer mail sunucu işlemini gerçekleştirmiş iseniz yukarıdaki tanım altına
mail.session.jndi.name=mail/MailSession
yazıp tekrar kaydediyorsunuz.
Kaydedilen portal-ext.properties dosyası Liferay dizini altına kopyalıyorsunuz.
3. Liferay dizini ->WEB-INF klasörü içinde weblogic.xml dosyası bulunmaktadır.
Weblogic.xml dosyasını metin editörü ile açtıktan sonra
<weblogic-web-app> arasına aşağıdaki xml kodu ekliyorsunuz.
<library-ref>
<library-name>jsf</library-name>
<specification-version>1.2</specification-version>
<implementation-version>1.2</implementation-version>
<exact-match>false</exact-match>
</library-ref>
Kaydediyoruz.
4. Liferay dizini ->WEB-INF->lib klasörüne ek kütüphane jar dosyalarını kopyalıyoruz. (Yukarıdaki
linkten ek kütüphaneleri indirmiştik)
Oracle veritabanı kullanıyorsanız ayrıca ojdbc.jar kütüphanesini de kopyalamanız gerekmektedir.
İndirme Linki= Ojdbc6.jar
5. Liferay deploy edilmeden once bir kaç war dosyası Weblogic’e deploy edilmesi gerekiyor.
Deployment sekmesine tıklıyorsunuz.
Install butonuna tıkladıktan sonra Weblogic kurduğunuz dizini altında
../Middleware/wlserver_10.3/common/deployable-libraries/jsf-1.2.war
Dosyasını seçip deploy ediyoruz.
Aynı işlemi jstl-12.war dosyasını için gerçekleştiriyoruz.
Deployment sekmesine tıkladığımızda hedef serverda çalışan 2 tane deploy uygulaması olması
gerekir. Jsp,jstl
6. Liferay dosyası artık deployment için hazır hale getirildi.
Sırasıyla Deployment->Install -> Liferay dizini (Liferay dosyasını seçiyorsunuz) sonra next işlemleri
tamamlandıktan sonra Liferay weblogic’te kurulmuş olacaktır.
Uygulama arayüzü http://localhost:WeblogicServerPortu.
Uygulamanın tekrar yüklenmemesi için daha once oluşturduğumuz portal-ext.properties
dosyasına aşağıdaki komutu ekleyebilirsiniz.
setup.wizard.enabled=false
war dosyası download linki
ek kütüphaneler linki
Gerekli dökümanlar indirildikten sonra Weblogic kurulumu yapılır.
Weblogic nasıl kurulur linki
1. Weblogic kurulduktan sonra Liferay için datasource oluşturulur.
Weblogic girişi yapıldıktan sonra Services->Data Sources ekranı açılır.
Ekranda New butonuna tıkladıktan sonra Generic Data Source seçiyorsunuz.
Database Type seçildikten sonra
JNDI Name : jdbc/LiferayPool yapıyoruz.
Sonraki adımlarda kurduğunuz veritabanı ile ilgili işlemleri tamamladıktan sonra datasource işlemi
bitmiş olacaktır. Oluşturulan Datasource üzerine tıkladıktan sonra target sekmesinde bir server’e
hedef olarak ekleyin. Örneğin AdminServer olabilir.
Not: Mail sunucunuz varsa Services-> Mail Sessions kısmında mail işlemini gerçekleştirebilirsiniz.
2. İndirdiğiniz weblogic war dosyasını winrar veya başka programlarla bir dosyaya extract edin.
Dosya ismi Liferay olsun. Dosya belirli bir dizinde olması gerekir. Örneğin c:/Liferay şeklinde.
Sıkıştırma dosyası açıldıktan sonra portal-ext.properties dosyasını oluşturuyorsunuz. Dosyanın
içine
jdbc.default.jndi.name=jdbc/LiferayPool
yazıp kaydediyorsunuz. Eğer mail sunucu işlemini gerçekleştirmiş iseniz yukarıdaki tanım altına
mail.session.jndi.name=mail/MailSession
yazıp tekrar kaydediyorsunuz.
Kaydedilen portal-ext.properties dosyası Liferay dizini altına kopyalıyorsunuz.
3. Liferay dizini ->WEB-INF klasörü içinde weblogic.xml dosyası bulunmaktadır.
Weblogic.xml dosyasını metin editörü ile açtıktan sonra
<weblogic-web-app> arasına aşağıdaki xml kodu ekliyorsunuz.
<library-ref>
<library-name>jsf</library-name>
<specification-version>1.2</specification-version>
<implementation-version>1.2</implementation-version>
<exact-match>false</exact-match>
</library-ref>
Kaydediyoruz.
4. Liferay dizini ->WEB-INF->lib klasörüne ek kütüphane jar dosyalarını kopyalıyoruz. (Yukarıdaki
linkten ek kütüphaneleri indirmiştik)
Oracle veritabanı kullanıyorsanız ayrıca ojdbc.jar kütüphanesini de kopyalamanız gerekmektedir.
İndirme Linki= Ojdbc6.jar
5. Liferay deploy edilmeden once bir kaç war dosyası Weblogic’e deploy edilmesi gerekiyor.
Deployment sekmesine tıklıyorsunuz.
Install butonuna tıkladıktan sonra Weblogic kurduğunuz dizini altında
../Middleware/wlserver_10.3/common/deployable-libraries/jsf-1.2.war
Dosyasını seçip deploy ediyoruz.
Aynı işlemi jstl-12.war dosyasını için gerçekleştiriyoruz.
Deployment sekmesine tıkladığımızda hedef serverda çalışan 2 tane deploy uygulaması olması
gerekir. Jsp,jstl
6. Liferay dosyası artık deployment için hazır hale getirildi.
Sırasıyla Deployment->Install -> Liferay dizini (Liferay dosyasını seçiyorsunuz) sonra next işlemleri
tamamlandıktan sonra Liferay weblogic’te kurulmuş olacaktır.
Uygulama arayüzü http://localhost:WeblogicServerPortu.
Uygulamanın tekrar yüklenmemesi için daha once oluşturduğumuz portal-ext.properties
dosyasına aşağıdaki komutu ekleyebilirsiniz.
setup.wizard.enabled=false
3 Ağustos 2013 Cumartesi
ORA-01950 Hata Çözümü
Hata nedeni
----------------------------------
Açık kaynak yazılımların çoğu altyapısında hibernate kullanılmaktadır.
Hibernate sizin verdiğiniz veritabanı bilgilerine
göre uygulama tablolarını oluşturur ve yazılım tarafından verilerle yüklenir.
Veritabanı kurulumu yapılırken
Oracle TableSpace'lere yeterli alan mount edilemiyor olabilir
ve tablespaceler üzerinde yetkisi bulunmamaktadır.
ve tablespaceler üzerinde yetkisi bulunmamaktadır.
Ekrana bu hata düşer veya loglara yazılır.
Çözümü
------------------------------------
Çözüm aslında kolay bir şekilde halledilir.
Bilgisayarınıza kurduğunuz veritabanına sys kullanıcısı ile bağlanın.
(Komut satırı= sqlplus sys / sysdba)
Bağlandıktan sonra aşağıdaki sql'leri sırasıyla çalıştırın.
ALTER USER <username> QUOTA 100M ON <tablespace name> ;
GRANT UNLIMITED TABLESPACE TO <username>;
username=Uygulama için oluşturduğunuz oracle useri
tablespace name=oracle useri için kullandığınız tablespace. (Varsayılan olarak users kullanılıyor.)
3 Haziran 2013 Pazartesi
IMP-00013 Hata Çözümü
Hata Nedeni
---------------------------------------
Veritabanını export ederken, export ettiğiniz kullanıcı DBA yetkisine sahiptir. Bu yüzden
import işlemini yaptığınızda, import ettiğiniz kullanıcının DBA yetkisine sahip olması gerekir.
Çözüm:
import ettiğiniz kullanıcıya DBA yetkisini verdiğinizde bu hatayı çözmüş oluruz.
Yetki verilme adımları
1.Sys kullanıcısı ile bağlanıyorsunuz. Komut satırından C:\users\testKullanici> sqlplus as / sysdba
2.Sql komutuna---> grant DBA to impUser;
3.import işlemi gerçekleştirilebilir. C:\users\testKullanici> imp impUser/password file=c:/exp.dmp full=y
ORA-00001 Hata Çözümü
Hata nedeni
------------------------------------
Bir tabloda kısıt ihlalıdır.
Kısıtlar Primary Key (Birincil Anahtar),Unique (Benzersiz)
gibi kurallara uyulmamasından kaynaklanan hatadır.
Örneğin bir tabloda id kolon Primary Key veya Unique olsun.
id'si 1 olan bir kaydın var tabloda.
başka bir kayıt için id =1 olarak eklersek bu hatayı alırız.
Çözüm:
Primary Key ve Unique kurallarını dikkate alıp veriyi o şekilde eklememiz gerekir.
31 Mayıs 2013 Cuma
ORA-28547 Hata Çözümü
Hata nedeni
------------------------------------
Windows 7 veya Xp işletim sistemlerinde oracle veritabanına bağlanırken yaşanan sorunlardan biridir.
Windows varsayılan kullanıcılarında Oracle Hizmetleri başarısız oluyor.
Çözüm 1:
Oracle servisini durdurduktan sonra
sqlnet.ora dosyasındaki SQLNET.AUTHENTICATION_SERVICES (NTS) tanımını
SQLNET.AUTHENTICATION_SERVICES (NONE). şekinde değiştirin.
Sonra Oracle servisini tekrar başlatın.
Oracle Servisine aşağıdaki gibi ulaşabilirsiniz.
- Bilgisayarınızda Başlat butonundan Çalıştır ekranını açıyorsunuz.(Kısayol Klavyede Başlat Düğmesi + R)
- Çalıştır ekranında "services.msc" yazıyorsunuz. Açılan pencerede OracleServiceORCL servisini bulup sağ tıkladıktan sonra "Durdur" diyorsunuz.
Not : OracleServiceORCL servisi sondaki ORCL değişkeni değişebilir.Bilgisayarızda Oracle Yüklenirken tanımladığınız servis ismidir.Oracle Express Edition
kurarsanız servisi ismi OracleServiceXE olacaktır.
Çözüm 2:
Oracle Servisini başlatan kullanıcının değişmesi gerekir.Genellikle bilgisayarınız açılırken giriş yaptığınız Kullanıcı yetkilidir.Kullanıcı Hesaplarında
başka bir kullanıcı tanımı yapınız. Örneğin X kullanıcısı.
Bunu yapmak için
1. Çözüm 1'de tanımladığımız şekilde oracle servisine ulaşıyorsunuz. (OracleServiceORCL)
2.Servise sağ tıkladıktan sonra Oturum Açma sekmesini seçiyorsunuz.
Ekran "Aşağıdaki Hesap" seçeneğini seçiyorsunuz. Tanımladığınız X kullanıcısı seçip ona ait parolayı giriniz
ve tamam deyiniz.
3.Veritabanını durdurun. Aşağıdaki komut satırı gibi
C:\Users\Administrator> sqlplus / as sysdba
SQL> SHUTDOWN NORMAL
SQL> STARTUP
Sonra Oracle servisi durdurup tekrar başlatabiliriz.
29 Mayıs 2013 Çarşamba
ROWNUM kullanarak ORDER BY ile bir tablo sütunu güncelleme
update table outer
set outer.sira_id = (
select sira from (
select rowid as id, row_number() over (order by TARIH) sira
from table
) inner
where inner.id = outer.rowid);
27 Mayıs 2013 Pazartesi
web.xml cluster ayarı
Web uygulamasını Proxy uygulama olarak kullanmak için , kendi web uygulamanızda web.xml içerisinde aşağıdaki gibi tanım yapabilirsiniz.
sunucu1:port =Yönlendirilecek 1.sunucu
sunucu2:port =Yönlendirilecek 2.sunucu
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/j2ee" >
<servlet>
<servlet-name>HttpClusterServlet</servlet-name>
<servlet-class>weblogic.servlet.proxy.HttpClusterServlet</servlet-class>
<init-param>
<param-name>WebLogicCluster</param-name>
<param-value>sunucu1:port|sunucu2:port</param-value>
</init-param>
<init-param>
<param-name>verbose</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>DebugConfigInfo</param-name>
<param-value>ON</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>HttpClusterServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HttpClusterServlet</servlet-name>
<url-pattern>/*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HttpClusterServlet</servlet-name>
<url-pattern>/.htm</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HttpClusterServlet</servlet-name>
<url-pattern>/.html</url-pattern>
</servlet-mapping>
</web-app>
sunucu1:port =Yönlendirilecek 1.sunucu
sunucu2:port =Yönlendirilecek 2.sunucu
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/j2ee" >
<servlet>
<servlet-name>HttpClusterServlet</servlet-name>
<servlet-class>weblogic.servlet.proxy.HttpClusterServlet</servlet-class>
<init-param>
<param-name>WebLogicCluster</param-name>
<param-value>sunucu1:port|sunucu2:port</param-value>
</init-param>
<init-param>
<param-name>verbose</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>DebugConfigInfo</param-name>
<param-value>ON</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>HttpClusterServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HttpClusterServlet</servlet-name>
<url-pattern>/*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HttpClusterServlet</servlet-name>
<url-pattern>/.htm</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HttpClusterServlet</servlet-name>
<url-pattern>/.html</url-pattern>
</servlet-mapping>
</web-app>
26 Mayıs 2013 Pazar
ORA-02289 Hata Çözümü
ORA-02289 ---> Sequence bulunmadı hatasıdır.
Veya sequence ' i bulunduran şemada diğer
şemalara erişim hakkı verilmelidir.
Çözüm 1 : CREATE SEQUENCE testSequence
START WITH 1
MAXVALUE 999999999999999999999999999
MINVALUE 1
NOCYCLE
NOCACHE
NOORDER;
Çözüm 2 : GRANT SELECT ON semaismi.testSequence to baskasema;
25 Mayıs 2013 Cumartesi
1 Mayıs 2013 Çarşamba
Veri içeren tabloda kolon veri türünü değiştirmek
Aşağıdaki gibi bir tablo tanımı olsun.
create table test1
(
no number,
ad varchar2(20),
sira varchar2(100)
);
İçindeki değerler
no ad sira
1 deger1 3
2 deger2 1
3 deger3 2
Tablonun içinde yukarıdaki gibi değerler mevcut ise
ve 'sira' kolonunun veri türünü 'number'
olarak değiştirilirse
"ORA-01439: column to be modified must be empty to change datatype"
gibi hata alır.
Aşağıdaki sql sırası çalıştırılırsa sorun çözülür.
ALTER TABLE test1
ADD (sira2 NUMBER);
UPDATE test1
set sira2=sira;
ALTER TABLE test1 DROP COLUMN sira;
ALTER TABLE test1
RENAME COLUMN sira2 TO sira;
17 Nisan 2013 Çarşamba
Adobe Flex Pdf çıktısı oluşturmak
Aşağıdaki linklerden kütüphaneyi indiriyorsunuz.
Link1= http://dfiles.eu/files/78m582ipy
veya
Link2= http://www.2shared.com/file/xuj8yEVL/org.html
Kütüphaneleri indirdikten sonra Flex projenizin src dosyasına altına kopyalayın.
Aşağıdaki kod parçasını Script olarak çalıştırabilirsiniz.
protected function ozgecmisCikti(event:MouseEvent):void
{
var myPDFEncoder:PDF = new PDF (Orientation.LANDSCAPE, Unit.MM);
myPDFEncoder.setDisplayMode(Display.FULL_PAGE);
myPDFEncoder.addPage();
myPDFEncoder.addImage(personelBilgiPanel,null,0,0,myPDFEncoder.getMargins().w idth,myPDFEncoder.getMargins().height);
myPDFEncoder.addPage();
myPDFEncoder.addImage(PANELID,null,0,0,myPDFEncoder.getMargins().width,myPDFEncoder.getMargins().height);
var bytes:ByteArray = myPDFEncoder.save(Method.LOCAL);
var fx:FileReference = new FileReference();
fx.save(bytes,"test.pdf");
}
Yukarıda PANELID yazan yere herhangi bir panelinize ait idsini yazdığınızda panelin tamamı pdf'e aktrılır.
Panel herhangi bir flex tag'i olabilir. Örneğin : <s:Panel/> , <s:NavigatorContent/>
Metodu herhangi bir butona veya başka birşeye click event olarak eklerseniz "test.pdf" çıktısını üretmiş olacaktır.
Link1= http://dfiles.eu/files/78m582ipy
veya
Link2= http://www.2shared.com/file/xuj8yEVL/org.html
Kütüphaneleri indirdikten sonra Flex projenizin src dosyasına altına kopyalayın.
Aşağıdaki kod parçasını Script olarak çalıştırabilirsiniz.
protected function ozgecmisCikti(event:MouseEvent):void
{
var myPDFEncoder:PDF = new PDF (Orientation.LANDSCAPE, Unit.MM);
myPDFEncoder.setDisplayMode(Display.FULL_PAGE);
myPDFEncoder.addPage();
myPDFEncoder.addImage(personelBilgiPanel,null,0,0,myPDFEncoder.getMargins().w idth,myPDFEncoder.getMargins().height);
myPDFEncoder.addPage();
myPDFEncoder.addImage(PANELID,null,0,0,myPDFEncoder.getMargins().width,myPDFEncoder.getMargins().height);
var bytes:ByteArray = myPDFEncoder.save(Method.LOCAL);
var fx:FileReference = new FileReference();
fx.save(bytes,"test.pdf");
}
Yukarıda PANELID yazan yere herhangi bir panelinize ait idsini yazdığınızda panelin tamamı pdf'e aktrılır.
Panel herhangi bir flex tag'i olabilir. Örneğin : <s:Panel/> , <s:NavigatorContent/>
Metodu herhangi bir butona veya başka birşeye click event olarak eklerseniz "test.pdf" çıktısını üretmiş olacaktır.
1 Mart 2013 Cuma
Java String değişken ismi ile değerini elde etmek
Bir Java sınıfında kendi içerisinde tanımlanmış
String değişkenlerin ismi ile değerini elde eden kod parçası
import java.lang.reflect.Field;
public class test {
private static test instance = null;
public static test getInstance(){
if(instance==null){
instance=new test();
}
return instance;
}
public static String getData1 = "MERHABA DÜNYA";
public static void main(String[] args) throws Exception {
test t=test.getInstance();
System.out.println(t.getSqlStringByName("getData1"));
}
public String getSqlStringByName(String param) throws Exception{
String value="";
for (Field f : this.getClass().getFields()) {
if(param.equals(f.getName())){
value=f.get(this).toString();
break;
}
}
return value;
}
}
String değişkenlerin ismi ile değerini elde eden kod parçası
import java.lang.reflect.Field;
public class test {
private static test instance = null;
public static test getInstance(){
if(instance==null){
instance=new test();
}
return instance;
}
public static String getData1 = "MERHABA DÜNYA";
public static void main(String[] args) throws Exception {
test t=test.getInstance();
System.out.println(t.getSqlStringByName("getData1"));
}
public String getSqlStringByName(String param) throws Exception{
String value="";
for (Field f : this.getClass().getFields()) {
if(param.equals(f.getName())){
value=f.get(this).toString();
break;
}
}
return value;
}
}
27 Şubat 2013 Çarşamba
Oracle sql with kullanımı
Oracle sql with kullanımı
With kullanımı Prosedürlerdeki cursor gibi düşünebiliriz.
Bir örnek üzerinde gerçekleştirelim.
Öğrenci tablosu (OGRENCI)
OGRENCI_ID OGRENCI_ADI
1
Ahmet
2
Ayşe
3
Hasan
Ders tablosu (DERS)
DERS_ID DERS_ADI
1
Matematik
2
Tarih
3
Türkçe
Bir dersi alan Öğrenci tablosu (OGRENC_DERS)
DERS_ID OGRENCI_ID
1 1
1 2
1 3
2 1
2 3
3 2
3 3
Ders alan öğrencilerin sql’ini yazalım.
Select od.OGRENCI_ID,d.DERS_ADI,
d. DERS_ID
From OGRENCI_DERS od
,DERS d
Where od.DERS_ID=d.DERS_ID
Öğrenci numaralarıyla ders isimlerini listeledik. Bizim
buradaki isteğimiz bir öğrenciye ait
ders bilgilerini alt alta getirmek yerine yan yana getirmeyi sağlamak
olacaktır. Yukarıdaki sql cümleciğini with aralığına alacağız.
Son sql hali
With tablo
as
(
Select od.OGRENCI_ID,d.DERS_ADI,d. DERS_ID
From OGRENCI_DERS od ,DERS d
Where od.DERS_ID=d.DERS_ID
)
Select o.OGRENCI_ADI,
(select t.DERS_ADI
from tablo t where tablo t. OGRENCI_ID=o. OGRENCI_ID and o.DERS_ID =1) as DERS1,
(select t.DERS_ADI
from tablo t where tablo t. OGRENCI_ID=o. OGRENCI_ID and o.DERS_ID =2) as DERS2,
(select t.DERS_ADI
from tablo t where tablo t. OGRENCI_ID=o. OGRENCI_ID and o.DERS_ID =3) as DERS3,
From OGRENCI
o
Sql Sonucu
OGRENCI_ADI DERS1 DERS2 DERS3
AHMET MATEMATİK TARİH NULL
AYŞE MATEMATİK NULL TÜRKÇE
HASAN MATEMATİK TARİH TÜRKÇE
24 Şubat 2013 Pazar
Java Adaptör Tasarım Deseni Örneği
Date(tarih) değerini göndererek bize formatını getiren Adapter tasarım deseni örneğini yapacağız.
Bu örnekte Date değerinin Web Servis,Veritabanı vb. yoluyla gelen bir değer olarak düşünebiliriz.
Gelen date değerinin formatı elde edebiliriz.
Nesnelerimiz SimpleDateFormat nesnelerinin aldığı constructor parametresiyle oluşturduk.
Örneğin
-1.nesne dd.MM.yyyy parametreli
-2.nesne dd/MM/yyyy parametreli
-3.nesne dd:MM:yyyy parametreli
import java.util.Date;
import java.text.SimpleDateFormat;
class DateFormatAdapter{
private SimpleDateFormat dt=null;
private String format1="dd.MM.yyyy";
private String format2="dd/MM/yyyy";
private String format3="dd:MM:yyyy";
public String getFormat(Date d){
try {
dt=new SimpleDateFormat(format1);
dt.format(d);
return format1;
} catch (Exception e) {
try {
dt=new SimpleDateFormat(format2);
dt.format(d);
return format2;
} catch (Exception e2) {
try {
dt=new SimpleDateFormat(format3);
dt.format(d);
return format3;
} catch (Exception e3) {
return "";
}
}
}
}
}
class DateFormatAdapter{
private SimpleDateFormat dt=null;
private String format1="dd.MM.yyyy";
private String format2="dd/MM/yyyy";
private String format3="dd:MM:yyyy";
public String getFormat(Date d){
try {
dt=new SimpleDateFormat(format1);
dt.format(d);
return format1;
} catch (Exception e) {
try {
dt=new SimpleDateFormat(format2);
dt.format(d);
return format2;
} catch (Exception e2) {
try {
dt=new SimpleDateFormat(format3);
dt.format(d);
return format3;
} catch (Exception e3) {
return "";
}
}
}
}
}
Adapter nesnemizin testi aşağıdaki gibidir.
import java.util.Date;
import java.text.SimpleDateFormat;
public class TestClass {
public static void main(String[] args) throws Exception{
DateFormatAdapter adapter=new DateFormatAdapter();
Date d=new Date(); //Tarihi elle tanımladığımızda varsayılan formatı ekranı yazdıracaktır.
//Format dd.MM.yyyy olacaktır.
System.out.println(adapter.getFormat(d));
}
}
21 Şubat 2013 Perşembe
Oracle tablo döndüren fonksiyon
Aşağıdaki adımları sırayla uygulayacağız.
1.Oracle Type oluşturma
3.Fonksiyon oluşturma
4.Oluşturulan tabloyu sql içerisinde kullanmak
sql sonucu
1 Ahmet
2 Ayşe
3 Hasan
Fonksiyonun parametreli hali.Fonksiyona kaydın id’si parametre ile verilerek kaydın getirilmesi
1.Oracle Type oluşturma
create or replace type ornekType as object (
i number,
n varchar2(30)
);
2.Oracle Nested Type oluşturmai number,
n varchar2(30)
);
create or replace type Ornek_nested_table as table of ornekType;
create or replace function ornekFonksiyon return Ornek_nested_table as
temp_tab Ornek_nested_table;
begin
temp_tab:= Ornek_nested_table();
temp_tab.extend;
temp_tab (temp_tab.count) := ornekType(1, 'Ahmet');
temp_tab.extend;
temp_tab (temp_tab.count) := ornekType(2, 'Ayşe');
temp_tab.extend;
temp_tab (temp_tab.count) := ornekType(3, 'Hasan');
return temp_tab;
end ornekFonksiyon;
select * from table(ornekFonksiyon);
1 Ahmet
2 Ayşe
3 Hasan
Fonksiyonun parametreli hali.Fonksiyona kaydın id’si parametre ile verilerek kaydın getirilmesi
create or replace function ornekFonksiyon2(
personel_id in number
)
return Ornek_nested_table as
temp_tab Ornek_nested_table;
begin
select
cast(
multiset(
select
id, name
from
personel
where id= personel_id)
into
temp_tab
from
dual;
return temp_tab;
end ornekFonksiyon2;
Sql'i bu şekilde olur.Sonucu "1 Ahmet"
select * from table(ornekFonksiyon2(1));
15 Şubat 2013 Cuma
Veritabanından Blob veya Clob Veri Türlerini Java ile okutmak
Veritabanınlarıda veri tipi Blob veya Clob olan
datayı aşağıdaki metodlara parametre olarak
gönderip Metin olarak elde edebiliriz.
Clob için
----------------------------------------------------------------
public String readClob(Clob data) throws Exception
{
StringBuilder sb = new StringBuilder();
try {
Reader reader = data.getCharacterStream();
BufferedReader br = new BufferedReader(reader);
String line;
while(null != (line = br.readLine())) {
sb.append(line);
}
br.close();
} catch (SQLException e) {
// handle this exception
} catch (IOException e) {
// handle this exception
}
return sb.toString();
}
public String readBlob(Object clob1) throws Exception
{
Blob clob=(Blob) clob1;
InputStream is = clob.getBinaryStream();
StringBuffer sb = new StringBuffer();
int readedBytes;
int bufferSize = 4096;
do {
byte[] bytes = new byte[bufferSize];
readedBytes = is.read(bytes);
if (readedBytes > 0) {
String readed = new String(bytes, 0, readedBytes, "UTF-16");
sb.append(readed);
}
} while (readedBytes == bufferSize);
is.close();
return sb.toString();
}
Blob için
----------------------------------------------------------------
public String readBlob(Object clob1) throws Exception
{
Blob clob=(Blob) clob1;
InputStream is = clob.getBinaryStream();
StringBuffer sb = new StringBuffer();
int readedBytes;
int bufferSize = 4096;
do {
byte[] bytes = new byte[bufferSize];
readedBytes = is.read(bytes);
if (readedBytes > 0) {
String readed = new String(bytes, 0, readedBytes, "UTF-16");
sb.append(readed);
}
} while (readedBytes == bufferSize);
is.close();
return sb.toString();
}
13 Şubat 2013 Çarşamba
Oracle sql sorgusunu xml e çevirmek
Veritabanı tablolarımızda bazen hiyerarşik veriye ihtiyaç duyarız.
Aşağıda daha önce verdiğim bir örnek üzerinde gidelim.
----------------------------------
Örnek Tablo=Personel
tablo sütunları sırasıyla
Personel_id,Personel_adi,Bagli_Personel_id
Veriler
-------------------------------------------------------------
0 'Üst personel' -1
1 'Murat' 0
2 'Ahmet' 1
3 'Mehmet' 1
4 'Duygu' 1
5 'Ayşe' 4
6 'Ali' 4
Bu tablodan da gördüğümüz gibi Murat personeline bağlı 3 personel var.Bu 3 personelden Duygu ya bağlı 2 personel var.Bu bilgileri hiyerarşik olarak getirmek
istiyorsanız aşağıdaki oracle sql yazıyoruz.
select Personel_adi
from personel start with personel_id=1
connect by prior personel_id=Bagli_Personel_id
Sqlden gelen sonucu xml le çevirmek istiyorsak aşağıdaki gibi yazabilirsiniz.
select xmlelement("PERSONEL_LISTESI",
(select dbms_xmlgen.getxmltype(dbms_xmlgen.newcontextFromHierarchy('
select LEVEL,xmlelement("Personel_adi",xmlelement("Personel_adi",Personel_adi ))
from personel start with personel_id=1
connect by prior personel_id=Bagli_Personel_id
order siblings by Personel_adi
'))
from dual)
) xmldoc
from dual
10 Şubat 2013 Pazar
Java Tabanlı Web Uygulamaların Genel Mantığı
Java Tabanlı Web Uygulamaların Genel Mantığı
Java web uygulamalarında genel olarak 2 dizin mevcuttur.Dizinler
*.Src
*.WebContent
1.Src dizininde java kaynak kodları bulunmaktadır. Bu dizinde yazılan kodlar mevcuttur.
Dilerseniz dizin altında farklı dizinler oluşturabilirsiniz. Farklı dizinler projenin kaynak kodlarının düzenli olmasını sağlar.
2. WebContent dizini sunucu tarafında çalışan kısımdır. Bu dizin altında standard olarak WEB-INF dizini mevcuttur. WEB-INF dizini altında sabit olarak oluşan dizinler ve dosyalar mevcuttur.
-classes dizini
Src dizini altında yazdığınız kodların derlenmiş dosyaları oluşur.Yani uzantısı java olan her sınıfın
bu dizin altında class uzantısı oluşur. Src dizini altında yazdığınız kodların derlenmiş kodları oluşmamış ise programı oluşturduğunuz ortamda derlemeniz gerekmektedir.Örneğin Eclipse ortamında Project—>Build All şeklinde yapabilirsiniz.
-lib dizini
Bu dizin altında farklı frameworkler(Spring vb.) kullanmış veya 3.parti uygulama kullanıyor iseniz kütüphanelerini burada tutabilirsiniz. Kütüphaneler jar uzantılıdır. Uygulama ile gelen kütüphaneler mevcuttur ve bu kütüphanelerin jar dosyalarını bulundurmanız gerekmeyebilir.Ör:jre
-web.xml dizini
Java web uygulamalarında olması gereken bir dosyadır. Sunucu uygulamalarınızı çalıştırdığında bu kısımdaki adımları çalıştırır.
Bu dosya içeriğinde genel olarak aşağıdaki aşamalar mevcuttur.
**Servletler
**Welcome page (Açılacak ilk sayfayı belirtiyorsunuz)
**Context içerik(Sunucu ile başlaması gereken java nesnelerinin konfigürasyonu yapar.)
**Filter içerik(Servletlerin filtrelemesini sağlar.Örneğin login olmamış kullanıcının belli dosyalara erişmesine izin verilmesi)
**Listener içerik (Sayfanızı dinler.Örneğin oturum düşmüşse başka sayfa yönlendir.)
**Servletlerin destekleği uzantılar.(Servlet Mapping Ör: .html,.jsp vb.)
**Servletlerin destekleyebileceği uzantılar.(Mime Mapping Örneğin uzantısı doc dosyaları indirmek)
Java tabanlı Web uygulamaların içeriği genel olarak bu şekildedir. İyi günler dilerim.
Kaydol:
Kayıtlar (Atom)