#眉標=Java #副標=JMS Workflow(1) #大標=Topic應用 #作者=文/歐宣修 ==================== 程式1 /*============================================*/ /* Table: USERACCOUNT */ /*============================================*/ CREATE TABLE IF NOT EXISTS USERACCOUNT ( USERID VARCHAR(10) NOT NULL, PASSWD VARCHAR(10), ROLENAME VARCHAR(20) NOT NULL, PRIMARY KEY (USERID) ); /*=================================================*/ /* Table: ANNOUNCE */ /*=================================================*/ CREATE TABLE IF NOT EXISTS ANNOUNCE ( DOCDATE DATETIME NOT NULL, DOCTITLE VARCHAR(100), DOCCONTENT VARCHAR(255), USERID VARCHAR(10), PRIMARY KEY (DOCDATE) ); ==========<end>================== ============================== 程式2 jboss.mq:service=DestinationManager jboss.mq:service=SecurityManager 此Topic JNDI Name為announceTopic,無權限控管。 ============================ ==========<box>=========== 程式3 /** * 公告存檔 * @param e ActionEvent */ void btAnnSaveActionPerformed(ActionEvent e) { String docdate = tfAnnDate.getText(); String doctitle = tfAnnTitle.getText(); String doccontent = taAnnContent.getText(); String doctitle_iso = ""; String doccontent_iso = ""; try { doctitle_iso = new String(doctitle.getBytes("BIG5"), "ISO-8859-1"); //---------(1) doccontent_iso = new String(doccontent.getBytes("BIG5"), "ISO-8859-1"); } catch (UnsupportedEncodingException ex) { log.error(ex); } String userid = tfAnnUserid.getText(); StringBuffer sql = new StringBuffer(""); sql.append("INSERT INTO announce (docdate, doctitle, doccontent, userid ) VALUES ( "); sql.append("'" + docdate + "', '" + doctitle_iso + "', '" + doccontent_iso + "', '" + userid + "' )"); DAOBean dao = loginFrame.dao; int affect_row = dao.executeUpdate(sql.toString()); if (affect_row <= 0) { JOptionPane.showMessageDialog(this, "存檔失敗!", "錯誤", JOptionPane.ERROR_MESSAGE); return; } //寄送訊息 try { TopicConnection topicConn = sl.getTopicConection(); //---------(2) TopicSession tcSession = topicConn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); Topic topic = sl.getTopic("topic/announceTopic"); //---------(3) TopicPublisher publisher = tcSession.createPublisher(topic); publisher.setDeliveryMode(DeliveryMode.NON_PERSISTENT); MapMessage msg = tcSession.createMapMessage(); //---------(4) msg.setString("docdate", docdate); msg.setString("kind", "公告"); msg.setString("doctitle", doctitle); publisher.publish(msg); //---------(5) tcSession.close(); topicConn.close(); } catch (Exception ex) { log.error(ex); } JOptionPane.showMessageDialog(this, "存檔成功!", "訊息", JOptionPane.INFORMATION_MESSAGE); } ============================ (1)由於MySQL預設編碼為ISO_8859_1,讀者若使用作業系統為Windows預設編碼為Big5,所以在存入資料庫前須先進行轉碼,當然讀取時須做相反動作。 (2)筆者運用Service Locator Design Pattern集中管理TopicConnection,Service Locator透過workflow-config.xml取得JBoss Application Server位址,產生Context物件: =============================== java.util.Hashtable JNDIParm = new java.util.Hashtable(); JNDIParm.put(Context.PROVIDER_URL, url); JNDIParm.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); context = new InitialContext(JNDIParm); ============================== 取得TopicConnection程式碼如程式4。 =============================== 程式4 TopicConnectionFactory tcFactory = (TopicConnectionFactory) context.lookup("UIL2ConnectionFactory"); conn = tcFactory.createTopicConnection(); =========================== ================================ 程式5 /** * 初始查詢 */ public void doQuery() { data.clear(); StringBuffer sql = new StringBuffer("select * from announce order by docdate desc "); HashData hd = dao.executeQuery(sql.toString()); for (int row = 1; row <= hd.getRowcount(); row++) { String docdate = hd.getString(row, "docdate"); docdate = docdate.substring(0, docdate.indexOf(".")); docdate = docdate.replace('-', '/'); String kind = "公告"; String doctitle = hd.getString(row, "doctitle"); try { doctitle = new String(doctitle.getBytes("ISO-8859-1"), "BIG5"); //--------(1) } catch (UnsupportedEncodingException ex) { log.error(ex); } HashMap map = new HashMap(); //--------(2) map.put("docdate", docdate); map.put("kind", kind); map.put("doctitle", doctitle); data.add(map); } this.fireTableChanged(null); //--------(3) } =========<end>===============