Bu bölüm, isterseniz kurup adım adım deneyebileceğiniz ayrı bir uygulamadır. Kendi veritabanınızla çalışmak için bu tabloları oluşturmanız gerekmez; genel veritabanı rehberinden ilerleyebilirsiniz.
Bu uygulamada müşterinin siparişlerini bulacak, yeni sipariş kaydedecek, bir siparişi iptal edecek ve stok ayırarak onaylayacaksınız. Stok yetmediğinde veya işlem yarıda hata verdiğinde değişikliklerin geri alındığını da göreceksiniz. Bütün kayıtlar örnektir.
Temel SQL ve JSON bilgisi yeterlidir. Bağlantı, mesaj gövdesi, parametre, transaction ve tekrar deneme kavramları ihtiyaç duyduğunuz adımda açıklanır.
| Yapacağınız iş | Devam edeceğiniz rehber |
|---|---|
| Veritabanını, Secret’ı ve projeyi hazırlamak | Bu sayfa |
| Müşterinin siparişlerini ve tek bir kaydı okumak | Siparişleri bulun |
| Kayıt eklemek ve eski veriyi ezmeden güncellemek | Sipariş kaydedin ve iptal edin |
| Sipariş ve stoğu birlikte değiştirmek; hata halinde geri almak | Onay, transaction ve rollback |
| Tekrar denemeye karar vermek ve hatayı araştırmak | Tekrar deneme ve hata teşhisi |
1. Gerekli erişimleri hazırlayın
Lunex’te proje düzenleme ve Run yetkisi gerekir. Veritabanını hazırlayan kişi tablo/kullanıcı oluşturabilmeli; Secret’ı hazırlayan kişi System kaynaklarını yönetebilmelidir. Bu kişiler aynı olmak zorunda değildir. Hazır bir bağlantı verildiyse yöneticinizden aşağıdaki bilgileri alın.
| Bilgi | Bu örnekteki değer |
|---|---|
| Veritabanı | help_order_lab |
| Uygulama kullanıcısı | help_order_lab_app |
| Secret | help-order-lab-db, anahtarlar: username, password |
| Bağlantı adı | ordersDb |
| Proje kimliği | help-order-lab |
| JDBC adresi | jdbc:postgresql://SUNUCU:5432/help_order_lab |
Örnek PostgreSQL kullanır. Sunucu adresi entegrasyonun çalıştığı ortamdan erişilebilir olmalıdır. Tarayıcınızın bağlanabilmesi yeterli değildir; runtime içindeki localhost o container’ı gösterir. Paket içindeki postgres.lunex.svc.cluster.local adresi yalnızca bu servis ve namespace adlarına sahip kurulumlar içindir.
2. Ayrı deneme veritabanını oluşturun
Veritabanı yöneticisi, mevcut sunucuda ayrı bir veritabanı ve uygulama kullanıcısı oluşturur. Aşağıdaki komutlar psql içindir; yönetici hesabıyla bağlıyken çalıştırılır. \password parolayı gizli istemde alır; SQL dosyasına gerçek parola yazmayın.
CREATE ROLE help_order_lab_app LOGIN;
\password help_order_lab_app
CREATE DATABASE help_order_lab;
REVOKE ALL ON DATABASE help_order_lab FROM PUBLIC;
\connect help_order_lab
Yeni ve boş help_order_lab içinde aşağıdaki tablo ve örnek kayıtları oluşturun. Bu adımı var olan iş tablolarınızda çalıştırmayın.
-- Run once in the dedicated help_order_lab database as its owner.
CREATE TABLE products (
sku text PRIMARY KEY,
name text NOT NULL,
available integer NOT NULL CHECK (available >= 0)
);
CREATE TABLE orders (
order_id text PRIMARY KEY,
customer_id text NOT NULL,
sku text NOT NULL REFERENCES products(sku),
quantity integer NOT NULL CHECK (quantity > 0),
status text NOT NULL DEFAULT 'NEW' CHECK (status IN ('NEW', 'APPROVED', 'CANCELLED')),
version integer NOT NULL DEFAULT 0
);
CREATE INDEX orders_customer_id ON orders(customer_id, order_id);
INSERT INTO products(sku, name, available) VALUES
('TEA-01', 'Tea', 20),
('COFFEE-01', 'Coffee', 8);
INSERT INTO orders(order_id, customer_id, sku, quantity) VALUES
('ORD-1001', 'C-100', 'TEA-01', 2),
('ORD-1002', 'C-200', 'COFFEE-01', 3),
('ORD-1003', 'C-100', 'TEA-01', 1);
GRANT CONNECT ON DATABASE help_order_lab TO help_order_lab_app;
GRANT USAGE ON SCHEMA public TO help_order_lab_app;
GRANT SELECT, INSERT, UPDATE ON orders TO help_order_lab_app;
GRANT SELECT, UPDATE ON products TO help_order_lab_app;
Başlangıçta çay stoğu 20, kahve stoğu 8 adettir. C-100 müşterisinin iki, C-200 müşterisinin bir siparişi vardır; hepsi NEW durumundadır. version, kaydın kaç kez değiştirildiğini izler. Sipariş oluşturmak stok ayırmaz; stok onay sırasında düşer.
Uygulama hesabı yalnızca gereken okuma/yazma izinlerini alır. Tablo oluşturma ve silme, kullanıcı yönetme veya diğer uygulamaların veritabanlarına erişme iznine ihtiyaç duymaz. PRIMARY KEY, CHECK ve REFERENCES kuralları yanlış veriye karşı veritabanında da kontrol sağlar.
3. Parolayı Secret’a koyun
- System → Secrets → Create secret ile
help-order-lab-dboluşturun. - Add key ile
usernameanahtarınahelp_order_lab_appyazın. passwordanahtarına veritabanında belirlediğiniz parolayı ekleyin.- Secret’ın runtime ile aynı namespace’te bulunduğunu ortam yöneticinizle doğrulayın. Geliştirme runtime’ının ve paketli entegrasyonların
lunex-integrationservis hesabı bu namespace’teki Secret’ları okuyabilir.

Ayrıntılı yetki, kaynak ve referans adımları için Secret yönetimini kullanın. Proje ZIP’i Secret değerlerini taşımaz. Başka ortama geçerken aynı referansı o ortamın kendi bağlantı bilgileriyle hazırlayın.
4. Örnek projeyi içe alın
Sipariş veritabanı örnek projesini indirin.
- Projects → Import project seçin; indirdiğiniz ZIP’i yükleyip Import project düğmesine basın.
help-order-labprojesini açın. Aynı kimlikte bir proje zaten varsa onu kullanın; import mevcut projeyi güncellemez. Ayrı kopya için ZIP’tekiapplication.propertiesdosyasındacamel.main.namevecamel.jbang.gaviçindeki proje kimliğini;deployment.jkube.yamliçindeki ad ve proje etiketlerini de değiştirip dosyaları yeniden ZIP’leyin.- Source → Files → application.properties açın.
orders.jdbc.urldeğerini kendi sunucunuza göre düzenleyin; diğer runtime ayarlarını koruyun. - API design → API access içinde API exposure = Disabled olmalıdır. Bu rehberde istekler geliştiriciye açık Running project hedefinden gönderilir.
ZIP bağlantıyı, altı API işlemini ve akışları içerir. Veritabanını ve Secret’ı oluşturmaz; kendiliğinden çalışmaz veya API yayımlamaz.
| Dosya | Görevi |
|---|---|
application.properties | Proje kimliği, runtime bağımlılıkları ve veritabanı adresi |
database.camel.yaml | Ortak bağlantı ve transaction ayarı |
read.camel.yaml | Sipariş arama, tek sipariş ve stok okuma |
write.camel.yaml | Sipariş ekleme ve sürüm kontrollü iptal |
approve.camel.yaml | Sipariş onayı ve stok güncellemesi |
openapi.json | İşlemler, girdiler ve yanıt sözleşmeleri |
api-publishing.yaml | Dış API erişiminin kapalı olması |
deployment.jkube.yaml | Paketleme için proje dağıtım şablonu |
5. Bağlantının neyi paylaştığını inceleyin
Source içinden database.camel.yaml dosyasını açın. Designer → Beans görünümündeki ordersDb, SQL adımlarının kullandığı adlandırılmış bağlantıdır. Sıfırdan oluştururken Architecture → More create options → Bean → Type → Database yolunu kullanabilirsiniz; örnek projede hazırdır.

Bağlantının temel kısmı şöyledir:
- beans:
- name: ordersDb
type: '#class:org.apache.commons.dbcp2.BasicDataSource'
properties:
driverClassName: org.postgresql.Driver
url: '{{orders.jdbc.url}}'
username: '{{secret:help-order-lab-db/username}}'
password: '{{secret:help-order-lab-db/password}}'
maxTotal: 4
maxWaitMillis: 5000
validationQuery: SELECT 1
ordersDb adını birden çok akış kullanır; her adıma yeniden parola girmezsiniz. Bağlantı havuzu en fazla dört fiziksel bağlantı tutar. maxWaitMillis, havuzdan boş bağlantı bekleme sınırıdır; SQL sorgusunun veya ağın zaman aşımı değildir. İş hacminize göre bu süreleri ayrıca değerlendirin.
{{orders.jdbc.url}} proje ayarını, {{secret:…}} gizli değeri okur. ${body} veya ${header.customerId} ise o anki mesajı okur. Bu iki ifade türü farklı amaçlara hizmet eder.
Örnek projenin bağımlılık listesi SQL, JSON, transaction, Secret desteği, JDBC sürücüsü ve bağlantı havuzunu içerir:
camel.jbang.dependencies=camel-console,camel-sql,camel-jackson,camel-spring,camel-kubernetes,mvn:org.postgresql:postgresql:42.7.13,mvn:org.apache.commons:commons-dbcp2:2.14.0
Mevcut bir projeye uyarlarken gereken değerleri kendi listenize ekleyin. Bağımlılık veya bağlantının başlangıç ayarlarını değiştirdiyseniz runtime’ı yeniden başlatın; yalnızca dosyayı kaydetmek çalışan bağlantıyı yeniden kurmaz.
6. İlk gerçek bağlantıyı doğrulayın
- Projede Run kullanın. Log içinde eksik sürücü, Secret veya bağlantı hatası olmadığını kontrol edin.
- API design → getStock → Try it açın.
- Target → Running project, sku = COFFEE-01 seçin. Response content type (Accept) için No preference kullanın.
- Send ile
200veavailable: 8bekleyin.
{"sku":"COFFEE-01","name":"Coffee","available":8}
Bu sonuç gerçek veritabanını okur. Mock sözleşmeden örnek üretir; Simulate dış alıcı için verdiğiniz örnek yanıtı kullanır. Bu iki işlem bağlantının, SQL yetkisinin veya rollback’in çalıştığını kanıtlamaz.
Sonraki adım: Müşterinin siparişlerini bulun ve sonucu kullanın.
Denemeyi yeniden başlatma
Örnek tabloları yeniden başlangıç durumuna getirmek isterseniz önce devam eden istek olmadığını ve bağlantınızın yalnız bu iş için ayırdığınız help_order_lab veritabanı olduğunu doğrulayın. Aşağıdaki SQL bu iki tablodaki bütün deneme kayıtlarını siler. Entegrasyon hesabına bu sıfırlama yetkisi verilmediği için yönetici hesabını kullanın.
BEGIN;
TRUNCATE TABLE orders, products;
INSERT INTO products(sku, name, available) VALUES
('TEA-01', 'Tea', 20), ('COFFEE-01', 'Coffee', 8);
INSERT INTO orders(order_id, customer_id, sku, quantity) VALUES
('ORD-1001', 'C-100', 'TEA-01', 2),
('ORD-1002', 'C-200', 'COFFEE-01', 3),
('ORD-1003', 'C-100', 'TEA-01', 1);
COMMIT;
Runtime’ı durdurmak veritabanı kayıtlarını silmez. Örneği bitirdiğinizde Kubernetes ortamında proje başlığındaki Delete container ile yalnız bu projenin geliştirme runtime’ını kaldırabilirsiniz; proje dosyaları ve veritabanı kalır.