61. 更為精彩的是自動代理的方式來總體配置各分散類中方法的事物屬性,結合使用 DefaultAdvisorAutoProxyCreator, TransactionAttributeSourceAdvisor 和 TransactionInterceptor (我還需要詳細理清楚)(P181)
62. 當使用自動代理時,MethodMapTransationAttributeSource 就能很多的派上用場了,它的 methodMap 屬性中可以指定哪個類的哪個方法,可以使用通配符(P182)
第七章. 訪問企業服務
63. 對於 JndiObjectFactoryBean 查找 jndi 資源未提及,如何設置 jndiEnvironment 屬性,如果 是在J2EE容器中運行,沒什麼問題,只是以單獨應用程序運行時卻未加說明,如下在容器外運行需要加上 jndiEnvironment 配置,指定實現類,及URL等(P217)
<property name="jndiEnvironment">
<props>
<prop key="java.naming.factory.initial">
org.apache.naming.java.javaURLContextFactory
</prop>
<prop key="java.naming.factory.url.pkgs">
org.apache.naming
</prop>
</props>
</property>
<property name="jndiEnvironment">
<props>
<prop key="java.naming.factory.initial">
org.apache.naming.java.javaURLContextFactory
</prop>
<prop key="java.naming.factory.url.pkgs">
org.apache.naming
</prop>
</props>
</property>
64.發送電子郵件配置 SimpleMailMessage 時也未說明,如果 SMTP 發送前需要驗證該如何配置。需加上 mail.smtp.auth屬性為 true,和驗證時用戶名和密碼,Spring 驗證時是通過 getTransport ("smtp").connect(host,user,passwd) 來驗證的。(P218)
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
</props>
</property>
<property name="host">
<value>mail.2911.net</value>
</property>
<property name="username">
<value>unmi</value>
</property>
<property name="password">
<value>unmi1234</value>
</property>
</bean>
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
</props>
</property>
<property name="host">
<value>mail.2911.net</value>
</property>
<property name="username">
<value>unmi</value>
</property>
<property name="password">
<value>unmi1234</value>
</property>
</bean>
這樣取到 mailSender 後,就能調用它的 send(SimpleMailMessage msg) 發送郵件,自動進行密碼驗 證。Spring也還是不夠完美,可以配置 JavaMailSenderImpl 的 session 屬性,但卻無法應用上 session.getProperties() 中的許多項配置。Spring中能配置 SimpleMailMessage,然後再配合 Velocity 的郵件內容模板,確實很方便
65. 搭配 Spring的 ScheduledTimerTask 和 jdk 的TimerTask,再配置 TimerFactoryBean 就會自動 啟動定時器了,這種方式可配置的參數太少了,只能設置從現在開始隔多久(delay)以什麼頻度 (period) 執行某個任務(P222)
66. 更高級的定時器用 Quartz 來調度,這個工具以前單獨使用過,可像 Unix 的 cron 那般靈活配 置。在 MyEclipse 中使用Quartz時需要引入 Spring 1.2 Misc Libraries 所包含的包(含quartz- 1.5.2.jar)(P224)
67. 94,96,97,104這幾頁中配置<value ref=""/>要寫成<ref bean=""/>才對
68. 從前往後的被包容關系是:JobClass->JobDetailBean->Trigger->TimerFactoryBean, 有兩種 Trigger,分別是 SimpleTriggerBean 和 CronTriggerBean。SimpleTriggerBean 和 ScheduledTimerTask 基本等價,Quartz 的威力全部體現在 CronTriggerBean 上的,可靈活的配置它的 cronExpression 屬性控制排程,最後需配置 SchedulerFactoryBean (它和 TimerFactoryBean 是基本等 價) 來啟動定時器(P227)
69. MethodInvokingTimerTaskFactoryBean+ScheduledTimerTask+TimerFactoryBean 可定時調用某個 類(或對象)的某個方法,這個類只需要是一個普通Java類,被調度的方法不能有參數。 MethodInvokingJobDetailFactoryBean+SimpleTriggerBean(或CronTriggerBean) +SchedulerFactoryBean 定時調用某個類(或對象)的某個方法,這個類只需要是一個普通Java類,被調 度的方法不能有參數(P228)
70. 書中並未描述 0/10 每10個單位觸發執行的配置形式,需注意 */? 的使用,定義好 CronExpression 後需好好測試真正行為。 Spring 調用 JMS 發送消息的用法先擱一下,在SOA/MQ 的大 環境下一定派得上用場的(P229)