TimesTen PL / SQL (рдХрд╛рд░реНрдпрд╡рд┐рдзрд┐рдпрд╛рдБ, рдлрд╝рдВрдХреНрд╢рдВрд╕, рдкреИрдХреЗрдЬ рдЖрджрд┐) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЯреНрд░рд┐рдЧрд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЯреНрд░рд┐рдЧрд░ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдкреНрд░рддрд┐рдХреВрд▓ рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдкрдХреЛ рдЯреНрд░рд┐рдЧрд░ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рдЙрддреНрддрд░ рдПрдХ XLA рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдирд╛ рд╣реИред рдЖрдк C рдпрд╛ Java, рдХрд┐рд╕реА рдХреЛ рднреА рдХрд░реАрдм рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдиреАрдЪреЗ рдореИрдВ рдЬрд╛рд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ :)
рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░ рдХреА рдЧрд╛рдЗрдб рдХрд╣рддреА рд╣реИ:
"рдЖрдк TimesTen рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП TimesTen JMS / XLA API (JMS / XLA) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдПрдХ рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рд╕реВрдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред JMS / XLA рдХрд╛ рдПрдХ рдЙрджреНрджреЗрд╢реНрдп рдЯреНрд░рд┐рдЧрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИред "
рдпрд╛рдиреА рдЖрдк рдПрдХ рдЬрд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ TimesTen рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╢ (рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЛрдб рдореЗрдВ) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП JMS / XLA API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред JMS / XLA, XLA рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП JMS рдкреНрд░рдХрд╛рд╢рди-рд╕рджрд╕реНрдпрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдпрд╣рд╛рдБ JMS (http://download.oracle.com/javaee/1.3/jms/tutorial) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдЧрд▓рд╛, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, TimesTen рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВред
[oracle @ tt1 xla] $ ttisql dbxla
рдХреЙрдкреАрд░рд╛рдЗрдЯ 1996-2010, рдУрд░реЗрдХрд▓ред рд╕рднреА рдЕрдзрд┐рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рддред
рдЯрд╛рдЗрдк рдХрд░реЗрдВ? рдпрд╛ "рдорджрдж" рдорджрдж рдХреЗ рд▓рд┐рдП, ttIsql рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП "рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ" рдЯрд╛рдЗрдк рдХрд░реЗрдВред
connect "DSN=dbxla"; Connection successful: DSN=dbxla;UID=oracle;DataStore=/u01/app/oracle/datastore/dbxla;DatabaseCharacterSet=WE8MSWIN1252;ConnectionCharacterSet=US7ASCII;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;PermSize=32;TempSize=50;TypeMode=0;PLSQL=0;CacheGridEnable=0; (Default setting AutoCommit=1) Command> CREATE USER oratt IDENTIFIED BY oracle; User created. Command> grant create session, create table, XLA to oratt; Command> connect "DSN=dbxla;UID=oratt;PWD=oracle;"; Connection successful: DSN=dbxla;UID=oratt;DataStore=/u01/app/oracle/datastore/dbxla;DatabaseCharacterSet=WE8MSWIN1252;ConnectionCharacterSet=US7ASCII;DRIVER=/u01/app/oracle/product/11.2.1/TimesTen/tt1/lib/libtten.so;PermSize=32;TempSize=50;TypeMode=0;PLSQL=0;CacheGridEnable=0; (Default setting AutoCommit=1) con1: Command> create table xlatest ( id NUMBER NOT NULL PRIMARY KEY, > name VARCHAR2(100) ); con1: Command>
рдЕрдм, рдПрдХ рдмреБрдХрдорд╛рд░реНрдХ рдмрдирд╛рдПрдВред рд▓реЗрди-рджреЗрди рд▓реЙрдЧ рдореЗрдВ рдкрдврд╝рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП XLA рдмреБрдХрдорд╛рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдмреБрд▓реЗрдЯ рдмреБрдХрдорд╛рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ xlatest рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВред
con1: рдХрдорд╛рдВрдб> рдХреЙрд▓ ttXlaBookmarkCreate ('рдмреБрдХрдорд╛рд░реНрдХ');
con1: рдХрдорд╛рдВрдб>
рдЕрдЧрд▓рд╛, рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХрд┐рд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВрдЧреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ttXlaSubscribe рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдмреБрдХрдорд╛рд░реНрдХ рдмреБрдХрдорд╛рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП xlatest рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗред
con1: рдХрдорд╛рдВрдб> рдХреЙрд▓ ttXlaSubscribe ('xlatest', 'bookmark');
con1: рдХрдорд╛рдВрдб>
рдЗрд╕рдХреЗ рдмрд╛рдж, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред
XLA рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ JMS рдЯреЙрдкрд┐рдХ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ TimesTen рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╕рдВрдмрджреНрдз рд╣реИред JMS / XLA рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╡рд┐рд╖рдп рдирд╛рдо рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдмреАрдЪ рдПрдХ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджрд┐рдП рдЧрдП рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ jmsxla.xml рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдирд╛рдо рдФрд░ рд╕реНрдерд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдкреНрд░рд▓реЗрдЦрди рджреЗрдЦреЗрдВ)ред
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд jmsxla.xml рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:
<xlaconfig> <topics> <!-- topic for Xla demo --> <topic name="xlademo" connectionString="DSN=dbxla" xlaPrefetch="100" /> </topics> </xlaconfig>
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ xlademo рд╡рд┐рд╖рдп рдХрд╛ рдирд╛рдо dbxla рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЬреЛрдбрд╝рд╛ рд╣реИред
рдЕрдм рд╕реАрдзреЗ java Applications рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╕рдВрджрд░реНрдн рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВред
рд╣реИрд╢рдЯреЗрдмрд▓ env = new Hashtable ();
env.put (Context.INITIAL_CONTEXT_FACTORY, "com.timesten.dataserver.jmsxla.SimpleInitialContextFactory");
рдЗрдирд┐рд╢рд┐рдпрд▓ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ ic = new InitialContext (env);
рдЕрдЧрд▓рд╛, XLA рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП JMS рдХрдиреЗрдХреНрд╢рди рдлрд╝реИрдХреНрдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрд╢рди рдкрд░ рд╕реНрдЯрд╛рд░реНрдЯ () рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдПрдХ рд╕рддреНрд░ рдмрдирд╛рддреЗ рд╣реИрдВред
рдирд┐рдЬреА javax.jms.TopicConnection рдХрдиреЗрдХреНрд╢рди; / ** рдЬреЗрдПрдордПрд╕ рдХрдиреЗрдХреНрд╢рди * /
рдирд┐рдЬреА рд╡рд┐рд╖рдп рд╕рддреНрд░; / ** рдЬреЗрдПрдордПрд╕ рд╕рддреНрд░ * /
...
TopicConnectionFactory connectionFactory = (TopicConnectionFactory) ic.lookup ("рдЯреЙрдкрд┐рдХрдХреЙрдиреНрдлреЗрдХреНрд╢рдирдлреИрдХреНрдЯрд░реА");
рдХрдиреЗрдХреНрд╢рди = connectionFactory.createTopicConnection ();
...
// рд╕рддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
session = connection.createTopicSession (рдЧрд▓рдд, рд╕рддреНрд░ред AUTO_ACKNOWLEDGE);
...
рд╕рд╛рде рд╣реА, рдПрдХ рд╕рддреНрд░ рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рд╕рддреНрд░ рдХреА рд▓реЗрдирджреЗрди рдкреНрд░рдХреГрддрд┐ рдФрд░ рдкрд╛рд╡рддреА рдореЛрдб рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
JMS / XLA рддреАрди рдореЙрдбрд▓ (AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE, CLIENT_ACKNOWLEDGE) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдореЙрдбрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ рдкрд╣рд▓реЗ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд╕рддреНрд░ рдХреА рд▓реЗрди-рджреЗрди рдХреЛ рдЧрд▓рдд рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдирд╛ рд╣реЛрдЧрд╛ред рджреЛ рд╡рд┐рдХрд▓реНрдк рд╕рдВрднрд╡ рд╣реИрдВ: рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдФрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ред
рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рд╕рдВрджреЗрд╢ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ (рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ)ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЬрдмрдХрд┐ рд╕рдВрджреЗрд╢ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рдПрдХ рдФрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдПрдХ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡реЗрд░рд┐рдПрдВрдЯ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрдиреЗрдХреНрд╢рди рдкрд░ рд╕реНрдЯрд╛рд░реНрдЯ () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд░рд┐рдп рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рд╡рд┐рд╖рдп рдмрдирд╛рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдПрдХ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рд╛рдкреНрдд () рдФрд░ getNoWait () рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
connection.start(); Topic topic = session.createTopic(topicName); TopicSubscriber subscriber = session.createDurableSubscriber(topic, bookmark); .. MapMessage message = (MapMessage)subscriber.receive(); ...
рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЛрдб рдореЗрдВ, рдЖрдкрдХреЛ рдПрдХ рд╢реНрд░реЛрддрд╛ рдмрдирд╛рдиреЗ рдФрд░ рдЙрд╕рдореЗрдВ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
MyListener myListener = рдирдпрд╛ MyListener (рдЖрдЙрдЯрд╕реНрдЯреНрд░реАрдо);
рд╡рд┐рд╖рдп xlaTopic = session.createTopic (рд╡рд┐рд╖рдп);
TopicSubscriber рдЧреНрд░рд╛рд╣рдХ = session.createDurableSubscriber (xlaTopic, рдмреБрдХрдорд╛рд░реНрдХ);
...
рд╕рдмреНрд╕реНрдХреНрд░рд╛рдЗрдмрд░.рд╕реЗрдЯрдореИрд╕реЗрдЬ рд▓рд┐рд╕реНрдЯрдирд░ (рдорд╛рдп рд▓рд┐рд╕реНрдЯрдирд░);
рдХрдиреЗрдХреНрд╢рди.рд╕реНрдЯрд╛рд░реНрдЯ ();
...
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЛрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ (рдлрд╝рд╛рдЗрд▓ DemoXLA.java)ред
рдЖрдпрд╛рдд java.util.numeration;
рдЖрдпрд╛рдд java.util.Hashtable;
рдЖрдпрд╛рдд javax.jms.JMSException;
рдЖрдпрд╛рдд javax.jms.apMessage;
рдЖрдпрд╛рдд javax.jms.Session;
рдЖрдпрд╛рдд javax.jms.Topic;
рдЖрдпрд╛рдд javax.jms.TopicConnectionFactory;
рдЖрдпрд╛рдд javax.jms.TopicConnection;
рдЖрдпрд╛рдд javax.jms.TopicSession;
рдЖрдпрд╛рдд javax.jms.TopicSubscriber;
рдЖрдпрд╛рдд javax.naming.Context;
рдЖрдпрд╛рдд javax.naming.InitialContext;
рдЖрдпрд╛рдд javax.naming.NamingException;
public class DemoXLA { private TopicConnectionFactory connectionFactory; private TopicConnection connection; private TopicSession session; private Topic topic; private TopicSubscriber subscriber; public DemoXLA( String cf, String topicName, String selector) throws JMSException, NamingException {String key; Context messaging = getInitialContext();
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрди рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЛрдб (MyListener.java, DemoXLA2.java) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред
MyListener.java
рдЖрдпрд╛рдд java.util.numeration;
рдЖрдпрд╛рдд javax.jms.JMSException;
рдЖрдпрд╛рдд javax.jms.apMessage;
рдЖрдпрд╛рдд javax.jms.Message;
рдЖрдпрд╛рдд javax.jms.MessageListener;
public class MyListener implements MessageListener { public MyListener() {} public void onMessage(Message message) { MapMessage mp = (MapMessage)message; Enumeration e; try { e = mp.getMapNames(); } catch (JMSException s) { e = null; System.out.println("error 1"); } while (e.hasMoreElements()) { String key = (String)e.nextElement(); try { System.out.println("[ " + key + " = " + mp.getObject(key) + " ]"); } catch (JMSException f) { System.out.println("error 2"); } } System.out.println("----------------------------------------"); } }
DemoXLA2.java
рдЖрдпрд╛рдд java.util.Hashtable;
рдЖрдпрд╛рдд javax.jms.JMSException;
рдЖрдпрд╛рдд javax.jms.Session;
рдЖрдпрд╛рдд javax.jms.Topic;
рдЖрдпрд╛рдд javax.jms.TopicConnectionFactory;
рдЖрдпрд╛рдд javax.jms.TopicSession;
рдЖрдпрд╛рдд javax.jms.TopicSubscriber;
рдЖрдпрд╛рдд javax.naming.Context;
рдЖрдпрд╛рдд javax.naming.InitialContext;
рдЖрдпрд╛рдд javax.naming.NamingException;
public class DemoXLA2 { private javax.jms.TopicConnectionFactory connectionFactory; private javax.jms.TopicConnection connection; private TopicSession session; private Topic topic; private TopicSubscriber subscriber; public DemoXLA2( String cf, String topicName, String selector) throws JMSException, NamingException, InterruptedException { Context messaging = getInitialContext(); Object connectionFactoryObject = messaging.lookup(cf); connectionFactory = (TopicConnectionFactory)connectionFactoryObject; connection = connectionFactory.createTopicConnection(); MyListener myListener = new MyListener(); session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); topic = session.createTopic(topicName); subscriber = session.createDurableSubscriber(topic, selector); subscriber.setMessageListener(myListener); connection.start(); Thread.sleep(60000); session.unsubscribe(selector); subscriber.close(); session.close(); connection.stop(); } private Context getInitialContext() throws NamingException { Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.timesten.dataserver.jmsxla.SimpleInitialContextFactory"); InitialContext initialContext = new InitialContext(env); return initialContext; } public static void main(String[] args) throws JMSException, NamingException, InterruptedException { DemoXLA2 demo = new DemoXLA2("TopicConnectionFactory", "xlademo", "bookmark"); } }
рдЕрдЧрд▓рд╛, рдХрд┐рд╕реА рднреА рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЪрд▓рд╛рдПрдВ рдФрд░ xlatest рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдбреЗрдЯрд╛ рдмрдирд╛рдиреЗ, рдмрджрд▓рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
Command> insert into xlatest values (2, 'w'); 1 row inserted. Command> update xlatest set name = 'test' where id=2; 1 row updated. Command> delete from xlatest; 1 row deleted. Command>
рддрджрдиреБрд╕рд╛рд░, рд╣рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЖрд╡реЗрджрди рдореЗрдВ:
[ __TYPE = 10 ] [ __COMMIT = true ] [ __FIRST = true ] [ __NULLS = ] [ __TBLNAME = XLATEST ] [ __TBLOWNER = ORATT ] [ __mver = 5621355056449191939 ] [ __mtyp = null ] [ ID = 2 ] [ NAME = w ] ---------------------------------------- [ __TYPE = 11 ] [ __COMMIT = true ] [ __FIRST = true ] [ __UPDCOLS = NAME ] [ __NULLS = ] [ __TBLNAME = XLATEST ] [ __TBLOWNER = ORATT ] [ __mver = 5621355056449191942 ] [ __mtyp = null ] [ _ID = 2 ] [ ID = 2 ] [ _NAME = w ] [ NAME = test ] ---------------------------------------- [ __TYPE = 12 ] [ __COMMIT = true ] [ __FIRST = true ] [ __NULLS = ] [ __TBLNAME = XLATEST ] [ __TBLOWNER = ORATT ] [ __mver = 5621355056449191945 ] [ __mtyp = D ] [ ID = 2 ] [ NAME = test ] ----------------------------------------
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ xlatest рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реБрдПред
рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рд░реВрдк рд╣реИрдВ:
рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдПрдХ рдбрдмрд▓ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
__TYPE - рдСрдкрд░реЗрд╢рди рдХрд╛ рдкреНрд░рдХрд╛рд░ (рдЗрдиреНрд╕рд░реНрдЯ (10), рдЕрдкрдбреЗрдЯ (11), рдбрд┐рд▓реАрдЯ (12)) рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рднреА рд╕рдВрднрд╡ рд╣реИрдВ (рдкреНрд░рд▓реЗрдЦрди рджреЗрдЦреЗрдВ)ред рдСрдкрд░реЗрд╢рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИрдВред
__COMMIT - рд▓реЗрдирджреЗрди рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ (рдпрджрд┐ рд╕рдЪ рд╣реИ)ред
__FIRST - рд▓реЗрди-рджреЗрди рдореЗрдВ рдкрд╣рд▓рд╛ рдСрдкрд░реЗрд╢рди рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ (рдпрджрд┐ рд╕рдЪ рд╣реИ)ред
__TBLNAME - рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдирд╛рдо
__TBLOWNER - рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рд╕реНрд╡рд╛рдореА
__NULLS - рд╕рдВрдХреЗрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЬрд┐рдирдореЗрдВ рдПрдХ рд╢реВрдиреНрдп рдорд╛рди рд╣реЛрддрд╛ рд╣реИ
__mver рдФрд░ __mtyp рд╕рд┐рд╕реНрдЯрдо рдЧреБрдг рд╣реИрдВред
рдЖрджрд┐ (рдкреНрд░рд▓реЗрдЦрди рджреЗрдЦреЗрдВ)
рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ - рдЯреЗрдмрд▓ рдХреЙрд▓рдо рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореВрд▓реНрдп рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
[рдЖрдИрдбреА = реи]
[NAME = рдкрд░реАрдХреНрд╖рдг]
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЧреБрдг - рдкреБрд░рд╛рдиреЗ рдлрд╝реАрд▓реНрдб рдорд╛рди (рдЕрдкрдбреЗрдЯ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдкреНрд░рдХрдЯ)
[_ID = 2]
[рдЖрдИрдбреА = реи]
[_NAME = w]
[NAME = рдкрд░реАрдХреНрд╖рдг]
рдкрд░рд┐рдгрд╛рдо
рдЗрд╕рд▓рд┐рдП, рдЬрд╛рд╡рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╛рдлреА рд╕рддрд╣реА рдЬреНрдЮрд╛рди рд╣реЛрдиреЗ рдкрд░, рдЖрдк рдПрдХ XLA рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ TimesTen рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╡рд┐рднрд┐рдиреНрди рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, XLA рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЛрдб рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд▓рдЧрднрдЧ Oracle TimesTen рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИред
рд▓реЗрдЦ рд▓реЗрдЦрдХ: рдЧреЗрдиреНрдиреЗрджреА рд╕рд┐рдЧрд╛рд▓рд╛рд╡