- 讓我們設定db的外部連結名稱為dbname. 則在hibernate.cfg.xml誘惑是hibernate.properties檔案中的database 名稱就是dbname.
- 在db當中的每一個table都對應有一個javaBean.hbm.xml, 這樣一個檔案會對應到一個原始檔為javaBean.java的class. 簡單來說, 就是每個table都有一個mapping file及一個bean來對應他.
table <--> javaBean.hbm.xml <--> javaBean.java
- hibernate.cfg.xml及hibernate.properties可以則一使用. 當兩者都存在的時候, 前者會覆蓋後者. 他們的功能就是設定連線時所需要的一些information, 像是db位置名稱, 帳號, 密碼, 所使用的sqlDialet...等
- 請加入log4j.properites用來輸出相關的logs
- Sessin Factory是利用configuration file(一般命名為hibernate.cfg.xml)來建立的. 若在此檔案中沒有給factory一個名稱, 則無須bind JNDI.
- 整體簡單來說, 所需要的file有以下這些: javaBean.java, javaBean.hbm.xml, hibernate.cfg.xml/hibernate.properties, log4j.properties
Thursday, November 01, 2007
Hibernate Implement Tips
Difference/Relation between Transaction and Session
- 當client連結到DB, 通過驗證之後, 就會建立一個session. 這樣的一個session則可以包含許多個transaction.
- Transaction本身的定義是an indivisible unit of work, 及表明他是數個連續的動作且不可切割的. 故一個transaction下的資料庫更新要麼全部都成功了, 要麼就是rollback了. 預設的commit方式大多為auto commit, 所以每一個SQL statement都是一個transaction; 又假若設定commit的方式為manual commit, 則transaction的界線就由commit或者是rollback來劃分了.
Monday, October 29, 2007
Use the manifest file to specify that a JAR file can reference another JAR file.
Standalone EJBs cannot use the Manifest Class-Path. It is only supported for
components that are deployed within an EAR file. The clients should reference
the client.jar in the classpath entry of the manifest file.
真讓我感到傷心, 原來是因為這樣, 不過超神奇的還是weblogic如果直接選原本的檔案, 卻又活的好好的, 讓我感到很迷惘阿.
雖然可以找到的解法很多, 像是直接把classpath塞到weblogic的classpath裡面, 但是想說不要動server的設定比較好, 結果就讓我耗了一天了!! 可惡~~
Friday, October 26, 2007
web.xml的內容
1. Head: 檔案的開頭必定為xml head, 大多為:
2. DOCTYPE: 告訴server servlet的版本(是2.2或是2.3)<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" http://java.sun.com/dtd/web-app_2_3.dtd>>3. Root: 必定為<web-app> 且一定為小寫. 如:
<web-app>4. Elements: 順序必定為以下順序:
<!-- Other elements go here. All are optional. -->
</web-app>
- icon
- display-name
- description
- distributable
- context-param
- filter
- filter-mapping
- listener
- servlet
- servlet-mapping
- session-config
- mine-mapping
- welcome-file-list
- error-page
- taglib
- resource-env-ref
- resource-ref
- security-constraint
- login-config
- security-role
- env-entry
- ejb-ref
- ejb-local-ref
詳細內容可以參考dtd的定義, 下面指列出一些我常用的elements以及一些注意事項.
1. servlet: 常用servlet-name以及servlet-class這兩個subelements. servlet-name一定要先出現, 才能出現servlet-class. 它的影響有兩個a). initialization parameters, custom URL patterns, and other customizations refer to the servlet by the registered name, not by the class name. b). the name can be used in the URL instead of the class name. 也就是我可以用http://host/webAppPrefix/servlet/xxx代替http://host/webAppPrefix/servlet/package.yyyServlet來連結, 其中xxx是設定的servlet-name, package.yyyServlet是servlet的class. 另外, 若是此servlet為一個jsp檔案的時候, 請改用jsp-file這個tag去代替servlet-class, 因為我們無法得知jsp被編譯之後的class名稱為何. 而一個container當中可以有很多個servlet, 所以在web.xml當中也可以同時定義很多個servlet.
2. servlet-mapping: 用於客制化URL, 一般結構為:
<servlet-mapping> <servlet-name>name</servlet-name> <url-pattern>url</url-pattern> </servlet-mapping>其中name就是在servlet中所定義的servlet-name, 而url則為一個pattern,大致有下面幾種形式
a).路徑映射: 以/開頭或是以/*結尾
b).擴展映射: 以前綴*.開頭
c).default servlet映射: 使用/
d).詳細映射: 如ab/tt/cc.action
因此定義/*.action會出錯的原因,是由於同時有路徑mapping也有擴展的mapping, 所以container無法判斷
3. 使用servlet的initialization parameters. 一般型態為類似於下面的格式:
<servlet>Initialization parameters are only available whenservlets are accessed by means of their registered names or throughcustom URL patterns associated with their registered names. Initialization parameters are not available in servlets that are accessedby their default URL. 而自己撰寫servlet的
<servlet-name>InitTest</servlet-name>
<servlet-class>myPackage.InitServlet</servlet-class>
<init-param>
<param-name>param1</param-name>
<param-value>Value 1</param-value>
</init-param>
</servlet>
init()
時可以利用getServletConfig().getInitParameter("...")
來取得type為String的parameter. 4.context-param可以設定提供給整個system, 裡面包含的subelement為context-name以及context-value.
5.若要將servlet在system啟動時就load進來, 可以使用load-on-starup這個tag
6.Welcome page的設定是透過welcome-file-list這個element來達到, 而放置於當中的welcome-file是有順序可言的, 若是第一個找不到, 則會找第二個, 以此類推, 直到沒有則使用server所設定的.
7.
當Spring碰上EJB
記得第一個碰到的是怎麼利用spring去config EJB. 方法有很多種, 在此簡單寫一下我的做法.
在Spring當中, 它提供三種abstract class, 形同EJB的bean class.
In Spring | EJB |
AbstractStatelessSessionBean | Stateless Session Bean |
AbstractStatefulSessionBean | Stateful Session Bean |
AbstractMessageDrivenBean | Message Driven Bean |
以上皆源自於AbstractEnterpriseBean
需要的步驟如下:
1. BeanFactoryLocator: 他是個interface, 必須有Function:
BeanFactoryReference userBeanFactory (String factoryKey) throws BeansException;
2. ServiceInterface以及他的implementation
3. EJBObject的Interface要extends
ServiceInterface
和EJBObject
4. EJBHome: 要extends
EJBHome
,要記得function
create()
要return 3的type5. Bean: 根據需求, extends上表當中的class, 最重要的事情是要有
onEjbCreate() throws CreateException
這個function.6. Finally, 要在deployment descriptor當中(也就是ejb-jar.xml檔案)當中加入
<env-entry>
<env-entry-name>ejb/BeanFactoryPath</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>spring-config.xml</env-entry-value>
</env-entry>
Tuesday, October 09, 2007
ClassNotFoundException: org.hibernate.hql.ast.HqlToken解决之道
拥有Hibernate3.jar的应用,被部署到weblogic8.1上后,抛出异常 CharScanner; panic: ClassNotFoundException: org.hibernate.hql.ast.HqlToken。 解决方法:在hibernate.properties上,或是在spring的conext xml中,加上一个属性hibernate.query.factory_class,值为org.hibernate.hql.classic.ClassicQueryTranslatorFactory。
原因:从网上获知,weblogic.jar中已经有了一个antlr.jar的版本,导致应用中hibernate3.jar中用到的antlr.jar不能找到,导致异常。
Tuesday, May 01, 2007
Control LED
clipped from www.parallax.com
Stock#: BASIC Stamp 2 Module |
Tuesday, April 24, 2007
SVM v2 result
t c=32.0, g=0.125 CV rate=94.8725
Training...
Output model: F_v1.v2.Train.model
Scaling testing data...
Testing...
Accuracy = 46.9498% (1647/3508) (classification)
Output prediction: F_v1.v2.Test.predict
answer
H, A, S, F, P |Predict
48 69 103 27 264 |0
9 7 2 63 78 |1
0 24 46 3 7 |2
6 7 15 46 77 |3
287 187 184 449 1500 |4
=============
F0_.v1.v2.Test
t c=32.0, g=0.125 CV rate=94.7875
Training...
Output model: F0_v1.v2.Train.model
Scaling testing data...
Testing...
Accuracy = 52.1095% (1828/3508) (classification)
Output prediction: F0_v1.v2.Test.predict
answer
H, A, S, F, P |Predict
47 44 50 1 159 |0
8 2 0 46 56 |1
0 23 72 24 12 |2
1 5 12 26 18 |3
294 220 216 491 1681 |4
J48 v1 result
=== Run information ===
Scheme: weka.classifiers.trees.J48 -C 0.25 -M 2
Relation: F_v1
Instances: 6274
Attributes: 103
[list of attributes omitted]
Test mode: 10-fold cross-validation
=== Classifier model (full training set) ===
=== Summary ===
Correctly Classified Instances 5823 92.8116 %
Incorrectly Classified Instances 451 7.1884 %
Kappa statistic 0.8832
K&B Relative Info Score 552448.6144 %
K&B Information Score 9940.3112 bits 1.5844 bits/instance
Class complexity | order 0 11285.6028 bits 1.7988 bits/instance
Class complexity | scheme 327256.4897 bits 52.1607 bits/instance
Complexity improvement (Sf) -315970.8869 bits -50.362 bits/instance
Mean absolute error 0.0316
Root mean squared error 0.1657
Relative absolute error 12.8354 %
Root relative squared error 47.2221 %
Total Number of Instances 6274
=== Detailed Accuracy By Class ===
TP Rate FP Rate Precision Recall F-Measure Class
0.923 0.006 0.942 0.923 0.933 _S
0.845 0.012 0.851 0.845 0.848 _A
0.941 0.013 0.925 0.941 0.933 _F
0.861 0.017 0.856 0.861 0.858 _H
0.948 0.07 0.949 0.948 0.949 _P
=== Confusion Matrix ===
a b c d e <-- classified as
553 4 14 1 27 | a = _S
8 382 7 8 47 | b = _A
1 15 859 5 33 | c = _F
1 6 8 570 77 | d = _H
24 42 41 82 3459 | e = _P
Number of Leaves : 278
Size of the tree : 555
================
F0_v1.csv (10 CV)
=== Run information ===
Scheme: weka.classifiers.trees.J48 -C 0.25 -M 2
Relation: F0_v1
Instances: 6274
Attributes: 103
[list of attributes omitted]
Test mode: 10-fold cross-validation
=== Classifier model (full training set) ===
Number of Leaves : 262
Size of the tree : 523
Time taken to build model: 34.48 seconds
=== Stratified cross-validation ===
=== Summary ===
Correctly Classified Instances 5742 91.5206 %
Incorrectly Classified Instances 532 8.4794 %
Kappa statistic 0.8615
Mean absolute error 0.0364
Root mean squared error 0.1782
Relative absolute error 14.7968 %
Root relative squared error 50.7918 %
Total Number of Instances 6274
=== Detailed Accuracy By Class ===
TP Rate FP Rate Precision Recall F-Measure Class
0.93 0.008 0.922 0.93 0.926 _S
0.812 0.012 0.838 0.812 0.825 _A
0.92 0.015 0.911 0.92 0.916 _F
0.802 0.016 0.854 0.802 0.827 _H
0.945 0.092 0.935 0.945 0.94 _P
=== Confusion Matrix ===
a b c d e <-- classified as
557 7 10 1 24 | a = _S
9 367 16 8 52 | b = _A
5 12 840 5 51 | c = _F
1 8 8 531 114 | d = _H
32 44 48 77 3447 | e = _P
SVM v1 result
Best c=128.0, g=0.5 CV rate=93.2173
Training...
Output model: F_v1.train.5.model
Scaling testing data...
Testing...
Accuracy = 94.8791% (1334/1406) (classification)
Output prediction: F_v1.test.5.predict
answer
H, A, S, F, P |Predict
129 0 0 1 13 |0
0 88 1 0 2 |1
1 0 124 0 2 |2
0 1 2 188 3 |3
20 11 3 12 805 |4
=========
F0_v1.test.5
Best c=32.0, g=0.5 CV rate=93.0753
Training...
Output model: F0_v1.train.5.model
Scaling testing data...
Testing...
Accuracy = 94.8791% (1334/1406) (classification)
Output prediction: F0_v1.test.5.predict
answer
H, A, S, F, P |Predict
129 0 0 1 12 |0
0 86 1 0 3 |1
1 0 124 0 2 |2
0 0 2 189 2 |3
20 14 3 11 806 |4
Wednesday, April 11, 2007
BVP analysis
analysis of BVP
Pulse Contour Analysis
Cardiovascular disease (CVD) is the leading cause of death and serious illness and in 1948, the Framingham Heart Study embarked on an ambitious project in health research. Pulse wave shape was one of the parameters collected during the study. The tools available to the investigators at that time precluded a detailed analysis of the waveform, but visual inspection of waveform changes correlated with increased risk of developing CVD (Ref.1 & 20). It is only recently that research workers from around the world have revisited this exciting observation (Ref. 2 to 5, 28, 29, 31) and in particular the research group at St Thomas hospital showed that the finger volume pulse derived from a digital photoplethysmographic probe is directly related to the radial and brachial artery pressure pulse (Ref. 6).
The Digital Volume Pulse (DVP)
The digital volume pulse (DVP) is recorded by measuring the transmission of infra-red light absorbed through the finger. The amount of light is directly proportional to the volume of blood in the finger pulp.
To minimise the occurrence of poor signals from vasoconstricted and poorly perfused subjects, a unique control system maintains the light transmission at the optimum level to accurately follow blood volume changes, independant of the subjects finger size to obtain an extremely accurate and noise free signal.
How the Digital Volume Pulse (DVP) is formed?
The first part of the waveform (systolic component) is formed as a result of pressure transmission along a direct path from the aortic root to the finger. The second part (diastolic component) is formed by pressure transmitted from the ventricle along the aorta to the lower body where it is reflected back along the aorta to the finger. The upper limb provides a common channel for both the directly transmitted pressure wave and the reflected wave and, therefore, has little influence on the contour of the DVP.
Indices derived from the Digital Volume Pulse (DVP)
The height of the diastolic component of the DVP relates to the amount of pressure wave reflection. This in turn relates mainly to the tone of small arteries.
The timing of the diastolic component relative to the systolic component depends on the pulse wave velocity (PWV) of pressure waves in the aorta and large arteries. This in turn depends upon large artery stiffness.
Indices derived from the Digital Volume Pulse (DVP)
Reflection Index RI is the height of the diastolic component of the DVP expressed as a percentage of the systolic peak and is a measure of the amount of pulse wave reflection and the tone of small arteries:
The Stiffness Index SI is an estimate of pulse wave velocity in large arteries and is obtained from subject height divided by the time between the systolic and diastolic peaks of the DVP. It is a measure of large artery stiffness