Dimasukkan oleh:
|
Topik: COM
Marshaling |
tukangtaip
Ahli Setia |  |
dimasukkan pada:
14 Okt 2000 01:14:23
Soalan melalui e-mail:
i;m having problem
understanding marshalling data betw. > component. >
here's the scenario: > i have 2 components which are :
> > Business Logic and Data Tier > > i
used ADO 2.1 as a middleware to ''talk' to Database . >
> OK, on the presentation layer i passed one command to
search > from the DB whether user "max" is exist or not in
the dB to Business > Layer > . Business Layer know it
was asked to to the task. Then, it'll pass > the >
parameter to Data Tier and Data Tier will do the task. > OK,
lets';s say user "max" was exist, Data Tier will pass the parameter
> back to Business Layer and then pass back to the user .
> WOW !! i can imagine how many data round trips there !!
> so, can u brief (analogy really appreciated !!) how can
this data marshaling > occur ?
¤º°`°º¤ø,¸¸,ø¤º°`°º¤øø¤º°`° tukangtaip ¤º°`°º¤ø,¸¸
IP:
136.1.1.33 |
tukangtaip
Ahli Setia |  |
dimasukkan pada:
14 Okt 2000 01:32:48
Well, if the two layers exist in separate processes
(i.e. the component being called is packaged in an exe, not dll),
then marshaling will definitely take place during the method call.
In fact, in your case, it occurs twice. First, when the
DataComponent's method is called by GUIComponent. And then, when the
method returns with the result.
In a normal, intra-process
call (when the client and the server are in the same process space),
no marshaling needs to occur. This is because, being in the same
memory space, the client has direct access to the server.
However, when the call needs to cross process boundaries,
trouble starts happening. Each process has its own memory space.
Address $0101 in process A, for instance, physically points to a
different section than the same address ($0101) in process B.
That's where marshaling comes in. Marshaling takes care of
translating things like this so that clients and servers belonging
to different processes can seamlessly communicate with each other as
if they're in the same process.
Marshaling involves copying
memory contents from the source process into a new memory area in
the destination process. And presenting a pointer to this new memory
to the destination instead of the original memory.
And in
the case of DCOM, marshaling also takes care of disassembling the
memory contents into network packets, and at the destination,
reassembling them.
If you're concerned about the amount of
processing and time that's taken by marshaling, I can assure you
that in most cases, it's negligible. Naturally, it's not as fast as
a non-marshaled method call, but it will hardly bog the system down.
Network speed does sometimes become a bottleneck, especially
when the client and server are far apart. If you're developing for
DCOM, you will want to take this into consideration.
The
best strategy to minimize the marshaling overhead is by avoiding
making frequent, small calls. You're better off lumping together
small calls into one big call.
¤º°`°º¤ø,¸¸,ø¤º°`°º¤øø¤º°`° tukangtaip ¤º°`°º¤ø,¸¸
IP:
136.1.1.33 |
hamdi
Ahli Setia  |
dimasukkan pada:
14 Okt 2000 08:48:25
Thanks tukangtaip, for the info.
IP:
161.142.78.83 |
gunx
Ahli Setia |  |
dimasukkan pada:
16 Okt 2000 20:58:30
tq for the answer tukangtaip, sebulan ini saya
tidak berbuat apa-apa lagi utk pilot-phased saya. Saya hanya m'baca
buku2 yg berkaitan dgn COM/DCOM/COM+ sahaja. U mungkin dapat
bayangkan bagaimana wajah Boss saya sekarang apabila tiada progress
yg saya tunjukkan. Boleh saya kategorikan sbg intangible
progress
cabaran besar saya sekarang ialah hendak
hantar/terima data drpd Spatial Database(database yg menyimpan data
geografi). Jika data berbentuk text, saya rasa banyak resources yg
boleh dirujuk. semua business logic, saya hendak pindahkan ke
MTS.
so, drpd penerangan u, data marshalling antara COM ini
sangat lambat ttp cukup flexible.
powered by Black Ball with a green cross !!
IP:
202.188.127.2 |
tukangtaip
Ahli Setia |  |
dimasukkan pada:
17 Okt 2000 01:23:42
GunX,
In a way, what you're doing is right.
Apa yang anda sedang pelajari ini kebanyakannya merupakan idea-idea
yang abstrak, yang perlukan pemahaman yang solid sebelum memulakan
langkah pertama. Especially when your first step is for a commercial
project.
Macam masa tukangtaip mula-mula belajar C++ dulu
(dari C), ENAM bulan tukangtaip tak buat apa-apa. Baca buku, faham
betul-betul, bertapa kat 'bilik termenung', round USM 1000 kali
dengan motor jipang (harga - RM 850.00) tukangtaip. Bila sudah
faham, sudah sebati dalam fikiran baru tukangtaip cuba buat program
untuk IBM (masa tu tukangtaip sedang practical training).
Sama juga, masa belajar COM dulu, tukangtaip rasa selama
SETAHUN tukangtaip cuma baca, garu kepala, baca lagi, termenung.
Tukangtaip mula belajar COM sejak tahun 1997-8 lagi. Tapi hanya
pertengahan tahun 1999 baru tukangtaip berjaya buat projek komersil
yang pertama.
Dan bukan tukangtaip sorang saja yang kata
macam ni. Dalam sebuah buku ActiveX (anak buah COM) keluaran
Microsoft, penulis buku itu sendiri mengaku, "masa saya belajar COM,
selama 9 bulan saya berada di dalam satu alam kayangan yang penuh
dengan asap. Tiba-tiba, satu hari, semua asap itu hilang begitu
saja.".
So proses yang anda lalui merupakan proses yang
semua orang lalui. Kerapkali bila orang masuk ke 'alam berasap' ini,
contohnya bila student2 baru mula belajar programming, orang tak
tahu bahawa, jika mereka sabar sikit, sekejap lagi asap itu akan
hilang tanpa kita sangka-sangka. Kalau cakap orang putih, benda ini
dipanggil "epiphany". Kalau cakap orang kita, ia dipanggil
"hidayah".
Tapi berbalik ke alam nyata, dalam mana-mana
projek komersil memanglah ada sorang-dua 'penunggu' yang sentiasa
tak sabar untuk lihat hasil.
Masalahnya, orang penunggu ini
tak sedar bahawa benda yang cuba dicapai tidak setara dengan
pengetahuan sedia ada programmer-programmer dia. Of course, kalau
dalam syarikat anda sudah ada COM expert, projek ini seminggu pun
boleh disiapkan.
Tapi masalahnya, di Malaysia itu sendiri
sekalipun, COM masih merupakan sesuatu yang baru. So kalau buat
projek COM, mereka kenalah faham akan limitasi yang ada. Berpijak di
bumi nyata. Benda ini bukan salah GunX, tetapi salah orang yang reti
nak faham akan kompleksiti ini.
Dan ini merupakan masalah
yang kerap wujud, especially disebabkan ramai boss-boss besar tidak
mempunyai latarbelakang komputer yang cukup mantap.
Pernah
tukangtaip consult untuk sebuah syarikat ternama di Malaysia (head
office dia 30 tingkat). Boss besar nak buat projek (RM puluh-puluh
juta), dan nak gunakan C++. Tapi tak ada orang yang tahu C++.
Kebanyakan programmer mempunyai latarbelakang COBOL dan yang sewaktu
dengannya. Habih camno? Maka pihak management pun jemputlah seorang
lecturer dari Singapore untuk memberi kelas selama SEMINGGU. Dalam
seminggu tu, nak kena belajar object-oriented programming, nak
belajar C++, nak belajar Windows programming.
Naturally,
selepas seminggu, haruslah tak dapat walaupun 10% dari matlamat asal
kelas ini. Bukan salah programmer, bukan salah lecturer. Tetapi
salah pihak management yang mempunyai pandangan yang terlalu optimis
sehingga tidak realistik langsung.
Masalah ini bukan masalah
yang unik. Di US pun terjadi juga, tetapi especially di Malaysia
kerana orang lebih sensitif terhadap kos sesuatu projek. Setiap
minggu masa terbazir bermakna beribu-ribu ringgit terpaksa
dibelanjakan untuk membayar gaji programmer. Namun yang tidak
disedari ialah, jika program ini terus ditulis juga tanpa
pengetahuan yang solid, program ini akan kehilangan kestabilan.
Selepas release nanti, akan kerap rosak. Dan kos untuk membetulkan
program ini akan lebih mahal lagi dari kos menulisnya dulu. Mana
lebih senang buat? Tulis program atau betulkan program orang lain?
Buku bertajuk DEATH MARCH menceritakan tentang ini dan
faktor-faktor lain yang menyebabkan projek-projek tak jadi. Tak tahu
di Malaysia ada jual atau tidak.
Sebenarnya, pilihan untuk
menggunakan teknologi-teknologi baru sepatutnya dijadikan satu
rancangan jangkamasa panjang oleh syarikat-syarikat. Mereka patut
memberi masa yang secukupnya kepada programmer untuk belajar
masak-masak dulu tentang teknologi ini sebelum mula
mengimplementasikannya. Sementara menunggu masa itu tiba, sepatutnya
gunakan dulu mana-mana teknologi sedia ada yang mampu melakukan
kerja yang sama.
¤º°`°º¤ø,¸¸,ø¤º°`°º¤øø¤º°`° tukangtaip ¤º°`°º¤ø,¸¸
IP:
136.1.1.33 |
gunx
Ahli Setia |  |
dimasukkan pada:
17 Okt 2000 12:08:20
arrghhhh..at last ada juga tempat nak meluahkan
perasaan yg terbuku nih.
yup! my boss is very optimistic.
Cuba bayangkan prototype yg saya buat hendak dipindahkan ke
pilot-phased dlm masa 3 bulan dgn pengetahuan programmer di tempat
saya dlm COM hanya 30% sahaja.(drpd pemerhatian saya.)Sehingga
sekarang saya sudah habis membaca 3 naskah buku COM dan saya masih
lagi berada dlm alam khayalan/berasap. Frankly, saya masih blur
lagi dgn COM nih. Projek hendak siap cepat. Memang boleh saya
siapkan dlm masa 3 bulan, ttp sebulan selepas itu mungkin kena
'bedah' semula. arrghh... saya mesti kena ambil tahu semua aspek
termasuk memory management, multithreading, fault tolerance etc.
Saya sudah 'warning' boss saya , pilih antara 2:
1-system cepat siap, pastuh kene debug 2-lambat siap ttp
stabil ::signed off
powered by Black Ball with a green cross !!
IP:
202.188.127.2 |
gunx
Ahli Setia |  |
dimasukkan pada:
17 Okt 2000 15:47:27
saudara tukangtaip ada recommend satu buku
berkaitan dgn COM bertajuk Inside COM adakah buku ini ?
powered by Black Ball with a green cross !!
IP:
202.188.127.2 |
gunx
Ahli Setia |  |
dimasukkan pada:
17 Okt 2000 17:28:20
tolong betulkan saya jika salah, konsep
object pooling pada pemahaman saya... katakan ada 5 object
utk cari data kat db. setiap object yg berada dlm pool tuh dah
siap-siap ada connection ngan database. pastuh user 1-5 telah
m'gunakan kesemua object yg berada dlm pool tu. tiba-tiba datang
user ke-6 nak guna object. So, tak boleh dia (user ke 6) kena tunggu
sehingga ada ada object yg telah direlease ke dlm pool tsbt.
so...kita dah jimat overhead utk kerja upkan connection ke db
dan tutup connection. apa pendapat U ?
powered by Black Ball with a green cross !!
IP:
202.188.127.2 |
maTRixx
Ahli Setia |  |
dimasukkan pada:
18 Okt 2000 01:43:18
Assalamualaikum,
Hmmm.. Dah agak lama
maTRixx tak masuk sembang dan bersembang seprti kawan2 yang lain..
bukan apa , kadang2 tertlalu banyak kerja yang dekat dengan due date
so kena rush siapkan ... masuk2 balik sembang.com , banyak topic
yang baru2 yang tak tau hujung pangkalnya ... cepatnya berkembang !!
Anyway , maTRixx memang cukup tertarik dengan perbincangan
ni..... pasal maTRixx rasa tak ramai yang betul2 implement COM nie
.... yang tambah sedih tu , tak ramai yang boleh berbicara 'same
languange' dengan tukangtaip atau gunx .... hmm .. at least ada
jugak org tau benda nie ye tak ?? Jarang org bincang topic nie
secara terperinci ..kali terakhir maTRixx join berbincang waktu
maTRixx ikut training MCSD dulu ... tapi sekarang dah lupa..
Itulah masalah dia .. blaja teori jer ..kadang2 maTRixx rasa
faham jugak apa yang tukangtaip dengan gunx tulis .. tapi kadang2
jadik blurrr... tapi seronok pasal maTRixx rasa boleh le tambahkan
pengetahuan maTRixx... Company maTRixx sekarnag nie sedang
develop software ( gunx mungkin maklum !) .. yang guna cara yg
orthodox .. maksudnya takder COM so on ... cuma lately boss maTRixx
ada cakap yang dia agak interested ngan COM impelemnetation ni ...
iskk nie yang buat rasa nak stay kat company lama nie ( maTRixx dah
tender resignation ) !!!.. Cuma maTRixx nak tanya pendapat , macam
mana nak convert sumer code tu dan implement using component etc??
Kena buat from ground up ker ?? Then satu lagi maTRixx tengok susah
sangat nak develop since tak org yang really having a hands on
experience ... mcm mana nak grow tu ??
~ TimE tO GeT RouGH !! ~
IP:
161.142.78.83 |
gunx
Ahli Setia |  |
dimasukkan pada:
18 Okt 2000 12:19:47
maTRixx : terima kasih krn memberi saya
semangat. "Rome bukan dibina dlm masa sehari"
OK,
berbalik pada topik COM ini, saya masih kabur dgn Versioning.
Salah satu drpd kebaikan COM ialah apa-apa perubahan yg kita buat
pada COM server (business logix atau Data Tiers), pihak client tidak
perlu menerima perubahan tsbt. ttp client pertama tidak dapat
m'gunakan version terbaru tsbt dan user terbaru dapat m'gunakannya.
saya confuse! OK . drpd pemahaman saya, jika kita rebuilt COM
kita, VB akan generate CLSID dan IID yg baru utk membolehkan SCM
(Services Control Manager) menghantar maklumat ke cliet/server.
Saya setkan Version Compatibility sbg Binary
Compatibilty. Adakah ia masih generate CLSID dan IID yg
berlainan ? terima kasih cikgu...
powered by Black Ball with a green cross !!
IP:
202.188.127.2 |
tukangtaip
Ahli Setia |  |
dimasukkan pada:
18 Okt 2000 13:36:45
Well, tukangtaip tak tahu jawapannya kerana ini
merupakan sesuatu yang spesifik terhadap Visual Basic. Tapi ya,
kalau client lama tak boleh guna dan client baru boleh guna, ada 2
masalah yang mungkin:
1. CLSID dan/atau Interface ID sudah
bertukar. (Client lama masih mencari ID yang lama).
2. Anda
telah melakukan perubahan kepada interface / method melampaui
perubahan yang dibenarkan. Secara pendeknya, sekali satu komponen
sudah di publish (sudah mula digunakan oleh sesuatu client), anda
tidak boleh:
- menambah/membuang mana-mana method dalam
interface. Kalau perlu gunakan method baru, anda kena buat interface
baru dalam komponen yang sama.
- menukar deklarasi untuk
method, contohnya menambah parameter input.
¤º°`°º¤ø,¸¸,ø¤º°`°º¤øø¤º°`° tukangtaip ¤º°`°º¤ø,¸¸
IP:
209.252.122.220 |
gunx
Ahli Setia |  |
dimasukkan pada:
18 Okt 2000 23:57:35
katakan i buat design cam ni,
ada 2 pekej
yg saya buat dlm MTS yg mana :
Pekej 1->Component A
Pekej 2->Component B
Apabila Com A dipanggil oleh
user, saya programkan spy Com B juga turut dipanggil. tujuan
saya pisahkan 2 Com ini, spy apabila Com A gagal menjalakan sesuatu
transaksi, Com B tidak gagal sama.
Adakah praktikal
design sebegini?
powered by Black Ball with a green cross !!
IP:
202.188.127.2 |
gunx
Ahli Setia |  |
dimasukkan pada:
19 Okt 2000 14:04:33
drpd pembacaan saya, salah satu teknik nka debug
COM ialah dgn testkan diluar drpd environment MTS. so , jika
saya debug diluar MTS, saya tidak m'gunakan interface Object
Control(Object Context), so, saya terpaksa buat kerja 2 kali.
iaitu jika saya dapati COM tuh dah tak de bugs, saya masukkan ke
MTS, kena tambah interface Object Context, tiba-tiba tengah dok run,
ada pula bugs baru, kena buang balik Object Context, keluarkan drpd
MTS dan test! apa pendapat U ? terima kasih...
powered by Black Ball with a green cross !!
IP:
202.188.127.2 |
gunx
Ahli Setia |  |
dimasukkan pada:
20 Okt 2000 19:22:56
saudara tukangtaip,
adakah saudara dgn buku
ini?
berbaloi tak kalau beli?
powered by Black Ball with a green cross !!
IP:
202.188.127.2 |
jembalang
Ahli Setia |  |
dimasukkan pada:
21 Okt 2000 03:51:12
i want to learn COM/DCOM/COM+...
where to
learn?? buku sini mahal uhuk.. ada tak source from internet??
jEmBaLanG
IP:
202.151.192.112 |
tukangtaip
Ahli Setia |  |
dimasukkan pada:
22 Okt 2000 19:53:47
GunX,
You're asking questions too rapidly.
I can't keep up. Soalan-soalan payah pulak tu.
Soalan:
drpd pembacaan saya, salah satu teknik nka debug COM ialah dgn
testkan diluar drpd environment MTS. So , jika saya debug diluar
MTS, saya tidak m'gunakan interface Object Control(Object Context),
so, saya terpaksa buat kerja 2 kali. iaitu jika saya dapati COM tuh
dah tak de bugs, saya masukkan ke MTS, kena tambah interface Object
Context, tiba-tiba tengah dok run, ada pula bugs baru, kena buang
balik Object Context, keluarkan drpd MTS dan test! apa pendapat
U ?
Jawapan: That's true, kena buat kerja 2 kali. But
banyaknya kerja yang terpaksa dibuat 2 kali itu bergantung kepada
bagaimana kita design class kita. Cadangan tukangtaip ialah supaya
anda ikut arkitektur macam ni:
class CEngine {
public: void Run();
protected: void Func1();
void Func2(); void Func3(); }
void
CEngine::Run() { Func1(); Func2(); Func3(); }
Gunakan class yang sama dalam test client serta COM object.
Test environment:
void main() { CEngine
obj; obj.Run(); }
COM Object:
class
CMyObject { void Run(); };
void CMyObject::Run()
{ CEngine engine; Engine.Run(); }
Pastikan
test client dan COM object menggunakan source files yang sama untuk
CEngine.
Lain kali kalau ada kesilapan dalam Func1, Func2,
anda boleh lakukan pembetulan dalam test client, dan cuma
'recompile' saja COM Object anda.
¤º°`°º¤ø,¸¸,ø¤º°`°º¤øø¤º°`° tukangtaip ¤º°`°º¤ø,¸¸
IP:
209.252.121.156 |
tukangtaip
Ahli Setia |  |
dimasukkan pada:
22 Okt 2000 19:57:13
Soalan:
ada 2 pekej yg saya buat dlm MTS yg
mana :
Pekej 1->Component A Pekej 2->Component B
Apabila Com A dipanggil oleh user, saya programkan spy Com B
juga turut dipanggil. tujuan saya pisahkan 2 Com ini, spy
apabila Com A gagal menjalakan sesuatu transaksi, Com B tidak gagal
sama.
Adakah praktikal design sebegini?
Jawapan:
Boleh tu memang boleh, tapi mungkin tak perlu. Tukangtaip rasa
anda boleh letakkan kedua2 komponen dalam satu pakej, tapi pastikan
configure B sebagai "does not support transactions." Rasanya gitulah
kot.
¤º°`°º¤ø,¸¸,ø¤º°`°º¤øø¤º°`° tukangtaip ¤º°`°º¤ø,¸¸
IP:
209.252.121.156 |
tukangtaip
Ahli Setia |  |
dimasukkan pada:
22 Okt 2000 19:59:36
Soalan: Buku Death March.
Jawapan:
Ha itulah bukunya. Well, it's a fun book tapi kalau budget
terhad, tak beli pun tak apa. Instead, tukangtaip nak rekomen satu
buku: Code Complete terbitan Microsoft Press. It teaches you good
programming practice.
¤º°`°º¤ø,¸¸,ø¤º°`°º¤øø¤º°`° tukangtaip ¤º°`°º¤ø,¸¸
IP:
209.252.121.156 |
gunx
Ahli Setia |  |
dimasukkan pada:
23 Okt 2000 10:53:05
saudara tukangtaip, minta maaf krn menanyakan
soalan yg mengarut nih style saya,
jika dah baca satu line, saya berangan dan visualize macam mana
bende tuh berlaku? Contohnya, bagaimana Proxy dan Stub di bind ?
Indah sungguh...cuba bayangkan kesemua Component ini bercerai-berai
pada mulanya, ttp jika diperintah berbuat sesuatu, ia mula bersatu
dan bekerjasama menjalankan perintah dan kemudiannya bercerai semula
apabila selesai. ohhh....chewahhh..macam orang bercinta pulak
note:saya nak tengok buku Death March kat MPH, kalau rasa
contentnya berkaitan, apa salahnya melabur !
powered by Black Ball with a green cross !!
IP:
202.188.127.2 |
gunx
Ahli Setia |  |
dimasukkan pada:
23 Okt 2000 19:26:20
cikgu COM : Ya, murid-murid, ada sebarang soalan?
gunx : sssaaya cikgu... *gunx mengangkat tangan*, Pernah tak
cikgu buat Connection Pooling?
powered by Black Ball with a green cross !!
IP:
202.188.127.2 |
gunx
Ahli Setia |  |
dimasukkan pada:
24 Okt 2000 00:04:07
Screenshot buku yg direkomen oleh TukangTaip.
powered by Black Ball with a green cross !!
IP:
202.188.127.2 |
tukangtaip
Ahli Setia |  |
dimasukkan pada:
24 Okt 2000 01:35:48
GunX, sebenarnya banyak konsep COM taklah sesusah
mana, tapi syaratnya anda kena faham dan biasa dengan C++. Malahan,
jika anda baca buku INSIDE COM (Microsoft Press), anda akan melihat
bagaimana sebuah COM component dibuat 'from scratch' menggunakan C++
dan memanipulasikan registry.
Sistem yang sedang tukangtaip
tulis sekarang menggunakan MSMQ (gunakan API, bukan menggunakan MSMQ
ActiveX Control).
¤º°`°º¤ø,¸¸,ø¤º°`°º¤øø¤º°`° tukangtaip ¤º°`°º¤ø,¸¸
IP:
136.1.1.33 |
gunx
Ahli Setia |  |
dimasukkan pada:
27 Okt 2000 12:02:12
err...dah lama tak jenguk sembang ...
Sistem yang sedang tukangtaip tulis sekarang menggunakan
MSMQ (gunakan API, bukan menggunakan MSMQ ActiveX Control).
qouted from TT
saya tak faham apa maksud
saudara, boleh tak saudara TT perjelaskan sikit. Biar semua dapat
gambaran kasar. Pada fahaman saya, saudara tidak m'gunakan utiliti
MSMQ yg disediakan oleh Microsoft, sebaliknya saudara membuat coding
sendiri utk membuat direct-call. Adakah betul? Saya masih lagi
mempelajari architecture MTS, dan jika kita tidak mahu menggunakan
khidmat MTS utk m'hubungkan base client dgn COM kita, kita boleh
membuat low-level coding yg membuat direct call. So , saya anggap
saudara m'aplikasikan konsep tsbt kpd MSMQ !
powered by Black Ball with a green cross !!
IP:
202.188.127.2 |
gunx
Ahli Setia |  |
dimasukkan pada:
27 Okt 2000 17:24:00
saya baru saja cover topik deadlock. Utk
pengetahuan semua, deadlock terjadi apabila transaksi A sudah setkan
write-lock kpd data X dan cuba utk m'dapatkan write-lock kpd data Y.
Transaksi B pula sudah setkan write-lock kpd data Y dan cuba utk
dapatkan write-lock utk data X. so. dah stuck transaksi!. Bende
ini selalu terjadi kpd high volume of user melakukan transaksi
serentak pada satu masa. so, utk dunia programming, pelbagai
kaedah boleh diaplikasikan utk m'atasi masalah di atas. so, saya
nak tanya kpd cikgu, apakah kaedah yg cukup berkesan utk atasi
masalah ini ?
note: Topik ini saya akan masukkan ke dlm
arkib siri 3 kelas vb/COM.
powered by Black Ball with a green cross !!
IP:
202.188.127.2 |
tukangtaip
Ahli Setia |  |
dimasukkan pada:
28 Okt 2000 05:33:51
Gunx:
Abaikan jawapan tukangtaip tentang
MSMQ tu. Sebenarnya tukangtaip salah faham soalan anda. Tukangtaip
confused tentang 'connection pooling'. Baru tukangtaip tersedar yang
anda sedang bercakap tentang database connections.
Jawapan
ringkas kepada soalan anda: tidak, tukangtaip tak pernah gunakan
connection pooling. Pertama sekali program tukangtaip sekarang tidak
menggunakan OLEDB/ADO/ODBC, sebaliknya menggunakan direct call
melalui Pro*C. (Database = Oracle 8). Jadi kalau nak buat connection
pooling, terpaksa tulis connection manager sendiri untuk mencipta
connection2 dan mengagih-agihkannya kepada client-client.
Walau bagaimanapun, my team member (a Vietnamese guy) ada
buat connection manager tersebut, kerana service/daemon yang dia
tulis itu menerima permintaan-permintaan dari laman ASP.
So
bila program itu dimulakan (program itu merupakan satu service yang
berjalan tanpa henti), dia akan establish beberapa database
connection, dan menyimpan connection-connection ini di dalam
ingatannya (using an array).
Kemudian bila satu permintaan
diterima, dia akan cuba cari dari array tersebut satu connection
yang tidak digunakan. Kalau jumpa, dia akan beri connection
(actually connection pointer/handle) tersebut kepada thread yang
memproses permintaan itu.
Untuk service yang tukangtaip
tulis, keperluan ini tidak ada, jadi tukangtaip buka connection
on-the-fly (bila perlu) dan tutup kembali bila sudah tidak
digunakan.
By the way, screenshot ini merupakan satu test
client yang tukangtaip tulis bagi menguji service tukangtaip.
(Service itu dilarikan di sebuah komputer lain).
Ingat apa
yang tukangtaip cakap tentang mengasingkan business logic ke dalam
class2 yang asing dari class2 GUI/COM? Tukangtaip mempraktiskannya
dalam aplikasi ini.
Service yang tukangtaip tulis ini
berfungsi lebih-kurang sama seperti MTS, iaitu mengendalikan
transaksi-transaksi yang datang dari luar. Cuma bezanya dengan MTS
(yang mengagih2 kan transaksi ini kepada komponen-komponen), service
tukangtaip mengagihkan transaksi2 ini kepada service-service lain,
dan menggunakan MSMQ sebagai jambatan penghubung. Lagi satu bezanya,
kerana sistem ini tidak menggunakan OLEDB, maka commit/rollback
terpaksa dikendalikan secara berlainan, bukan automatik.
Aplikasi test client tukangtaip membolehkan seseorang
melihat secara real-time apa yang sedang dilakukan oleh remote
service tersebut.
Dalam kotak sebelah atas itu ialah
mesej-mesej yang terdapat dalam queue (belum diproses). Dalam kotak
bawah ialah mesej-mesej yang sudah/sedang diproses. Kelihatan
semuanya sudah time-out (mati) kerana service yang sepatutnya
memproses mesej ini masih belum disiapkan lagi (programmer lain yang
tulis).
Bila satu transaksi tak menjadi (akibat tak mendapat
jawapan, terjadi ralat), service tukangtaip akan menyuruh semua
service-service yang mengambil bahagian dalam transaksi ini supaya
'rollback'.
¤º°`°º¤ø,¸¸,ø¤º°`°º¤øø¤º°`° tukangtaip ¤º°`°º¤ø,¸¸
*mesej ini telah dikemaskini oleh tukangtaip pada 28 Okt 2000
04:35:28*
IP:
136.1.1.33 |
|