
2009年8月17日
通過存儲過程向數(shù)據(jù)庫一下子插入了一千萬(10000000)條記錄,結(jié)果等了很長時間,PL/SQL都沒有響應(yīng),我又瞎折騰了下,結(jié)果執(zhí)行了好幾次,導致數(shù)據(jù)庫假死了,我只有刪除當前的會話,從網(wǎng)上找到相關(guān)的腳本代碼。
1> 通過此語句查詢正在鎖定的SESSION_ID:
1
SELECT SESSION_ID FROM V$LOCKED_OBJECT,USER_OBJECTS WHERE V$LOCKED_OBJECT.OBJECT_ID = USER_OBJECTS.OBJECT_ID
2> 通過第一步查詢到的SESSION_ID查詢SERIAL#
1
SELECT SERIAL# FROM V$SESSION WHERE SID='12'(此處'12'為上面查詢到的'SESSION_ID')
3> 根據(jù)1,2步查詢到的SESSION_ID和SERIAL#執(zhí)行
1
ALTER SYSTEM KILL SESSION '12,154'(12為SESSION_ID的值, 154為SERIAL#的值)
4> 如果利用上面的命令殺死一個進程后,進程狀態(tài)被置為"killed",但是鎖定的資源很長時間沒有被釋放,那么還可以在os一級再殺死相應(yīng)的進程(線程),首先執(zhí)行下面的語句獲得當前進程(線程)的標示PID:
1
select spid, osuser, s.program
2
from v$session s,v$process p
3
where s.paddr=p.addr and s.sid=12 (12是上面的SESSION_ID)
然后在OS通過任務(wù)管理器找到對應(yīng)的進程,在殺死這個進程(線程)
posted @
2010-11-27 14:55 absolute 閱讀(859) |
評論 (0) |
編輯 收藏
最近在學習存儲過程,以前在項目中沒有怎么接觸過!
我通過存儲過程像數(shù)據(jù)庫中批量添加一千萬(100000000)條記錄,結(jié)果PL/SQL很長時間沒有反映,結(jié)果不得已通過腳本殺掉當前進程,我重新通過存儲過程插入10000條數(shù)據(jù)。
建表腳本:
1
--刪除用戶表
2
DROP TABLE T_PORTAL_USER;
3
4
--創(chuàng)建用戶表
5
CREATE TABLE T_PORTAL_USER
6
(
7
id NUMBER PRIMARY KEY, -- 用戶表示
8
username VARCHAR2(24) NOT NULL,-- 用戶名
9
password VARCHAR2(24) NOT NULL,-- 密碼
10
realname VARCHAR2(24) NOT NULL,-- 真實姓名
11
sex VARCHAR2(2) DEFAULT '0',-- 性別 "0":Male "1":Female
12
registerDate TIMESTAMP NOT NULL,-- 注冊日期
13
state VARCHAR2(2) NOT NULL -- 賬號狀態(tài) "0":啟用 "1":注銷
14
)
15
16
--刪除用戶表序列
17
DROP SEQUENCE SEQ_T_PORTAL_USER;
18
19
--創(chuàng)建用戶表序列
20
CREATE SEQUENCE SEQ_T_PORTAL_USER
21
START WITH 1
22
INCREMENT BY 1
23
NOMAXVALUE
24
CACHE 20
-- 批量新增一萬條用戶
1
-- 批量新增一萬條用戶
2
CREATE OR REPLACE PROCEDURE PROC_USER_CREATE_BAT
3
AS
4
startTime VARCHAR2(32);--開始時間
5
endTime VARCHAR2(32);--結(jié)束時間
6
BEGIN
7
SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss:ff') INTO startTime FROM DUAL;
8
DBMS_OUTPUT.PUT_LINE('Start Time: '||startTime);
9
FOR i in 1..10000 LOOP
10
INSERT INTO T_PORTAL_USER VALUES(SEQ_T_PORTAL_USER.NEXTVAL,'owen'||i,'123456','gekunjin'||i,'0',sysdate,'0');
11
END LOOP;
12
SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss:ff') INTO endTime FROM DUAL;
13
DBMS_OUTPUT.PUT_LINE('End Time: '||endTime);
14
END PROC_USER_CREATE_BAT;
posted @
2010-11-27 14:41 absolute 閱讀(3698) |
評論 (1) |
編輯 收藏
摘要: 在項目中使用Apache開源的Services Framework CXF來發(fā)布WebService,CXF能夠很簡潔與Spring Framework 集成在一起,在發(fā)布WebService的過程中,發(fā)布的接口的入?yún)⒂行╊愋椭С植皇呛芎茫热鏣imestamp和Map。這個時候我們就需要編寫一些適配來實行類型轉(zhuǎn)換。
Timestamp:
1/** *//**
&n...
閱讀全文
posted @
2010-11-27 14:28 absolute 閱讀(3423) |
評論 (1) |
編輯 收藏
Web應(yīng)用初始化Spring容器策略
以下軟件測試環(huán)境為Spring,Struts1
1、通過struts1提供的插件機制,采用Spring提供的ContextLoaderPlugIn
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<global-exceptions />
<global-forwards />
<message-resources parameter="com.portal.ApplicationResources" />
<!-- 通過S1提供的插件機制來初始化Spring容器,加載Spring配置文件
<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<!--
1、ContextLoaderPlugIn默認加載配置文件命名規(guī)則是actionServlet-servlet.xml,其中actionServlet
是配置org.apache.struts.action.ActionServlet時指定的servlet名稱
2、通過配置contextConfigLocation屬性來指點Spring配置文件的位置,多個配置文件可以使用 逗號","、分號";"、空格" "
-->
<set-property property="contextConfigLocation"
value="/WEB-INF/conf/spring-application.xml,/WEB-INF/conf/**/spring*.xml" />
</plug-in>
-->
</struts-config>
2、采用Spring提供的ContextLoaderListener來初始化(應(yīng)用服務(wù)器需要支持Listener,Servlet2.3版本及以上)
<context-param>
<description>通過配置contextConfigLocation屬性來指點Spring配置文件的位置,多個配置文件可以使用 逗號","、分號";"、空格" "</description>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/conf/spring-application.xml /WEB-INF/conf/**/spring*.xml</param-value>
</context-param>
<listener>
<description>通過ContextLocaderListener來初始化Spring容器,加載Spring配置文件</description>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
3、采用load-on-startup Servlet 來初始化Spring容器
<servlet>
<description>
通過load-on-startup Servlet來初始化Spring容器
該如何Servlet 用于提供"后臺"服務(wù),作為容器管理應(yīng)用中的其他bean,不需要響應(yīng)客戶請求,因此無須配置servlet-mapping
</description>
<servlet-name>applicationContext</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
posted @
2010-09-13 18:10 absolute 閱讀(2268) |
評論 (0) |
編輯 收藏
集群概念
1. 兩大關(guān)鍵特性
集群是一組協(xié)同工作的服務(wù)實體,用以提供比單一服務(wù)實體更具擴展性與可用性的服務(wù)平臺。在客戶端看來,一個集群就象是一個服務(wù)實體,但事實上集群由一組服務(wù)實體組成。與單一服務(wù)實體相比較,集群提供了以下兩個關(guān)鍵特性:
· 可擴展性--集群的性能不限于單一的服務(wù)實體,新的服務(wù)實體可以動態(tài)地加入到集群,從而增強集群的性能。
· 高可用性--集群通過服務(wù)實體冗余使客戶端免于輕易遇到out of service的警告。在集群中,同樣的服務(wù)可以由多個服務(wù)實體提供。如果一個服務(wù)實體失敗了,另一個服務(wù)實體會接管失敗的服務(wù)實體。集群提供的從一個出錯的服務(wù)實體恢復到另一個服務(wù)實體的功能增強了應(yīng)用的可用性。
2. 兩大能力
為了具有可擴展性和高可用性特點,集群的必須具備以下兩大能力:
· 負載均衡--負載均衡能把任務(wù)比較均衡地分布到集群環(huán)境下的計算和網(wǎng)絡(luò)資源。
· 錯誤恢復--由于某種原因,執(zhí)行某個任務(wù)的資源出現(xiàn)故障,另一服務(wù)實體中執(zhí)行同一任務(wù)的資源接著完成任務(wù)。這種由于一個實體中的資源不能工作,另一個實體中的資源透明的繼續(xù)完成任務(wù)的過程叫錯誤恢復。
負載均衡和錯誤恢復都要求各服務(wù)實體中有執(zhí)行同一任務(wù)的資源存在,而且對于同一任務(wù)的各個資源來說,執(zhí)行任務(wù)所需的信息視圖(信息上下文)必須是一樣的。
3. 兩大技術(shù)
實現(xiàn)集群務(wù)必要有以下兩大技術(shù):
· 集群地址--集群由多個服務(wù)實體組成,集群客戶端通過訪問集群的集群地址獲取集群內(nèi)部各服務(wù)實體的功能。具有單一集群地址(也叫單一影像)是集群的一個基本特征。維護集群地址的設(shè)置被稱為負載均衡器。負載均衡器內(nèi)部負責管理各個服務(wù)實體的加入和退出,外部負責集群地址向內(nèi)部服務(wù)實體地址的轉(zhuǎn)換。有的負載均衡器實現(xiàn)真正的負載均衡算法,有的只支持任務(wù)的轉(zhuǎn)換。只實現(xiàn)任務(wù)轉(zhuǎn)換的負載均衡器適用于支持ACTIVE-STANDBY的集群環(huán)境,在那里,集群中只有一個服務(wù)實體工作,當正在工作的服務(wù)實體發(fā)生故障時,負載均衡器把后來的任務(wù)轉(zhuǎn)向另外一個服務(wù)實體。
· 內(nèi)部通信--為了能協(xié)同工作、實現(xiàn)負載均衡和錯誤恢復,集群各實體間必須時常通信,比如負載均衡器對服務(wù)實體心跳測試信息、服務(wù)實體間任務(wù)執(zhí)行上下文信息的通信。
具有同一個集群地址使得客戶端能訪問集群提供的計算服務(wù),一個集群地址下隱藏了各個服務(wù)實體的內(nèi)部地址,使得客戶要求的計算服務(wù)能在各個服務(wù)實體之間分布。內(nèi)部通信是集群能正常運轉(zhuǎn)的基礎(chǔ),它使得集群具有均衡負載和錯誤恢復的能力。
集群分類
Linux集群主要分成三大類( 高可用集群, 負載均衡集群,科學計算集群)
高可用集群( High Availability Cluster)
負載均衡集群(Load Balance Cluster)
科學計算集群(High Performance Computing Cluster)
================================================
具體包括:
Linux High Availability 高可用集群
(普通兩節(jié)點雙機熱備,多節(jié)點HA集群,RAC, shared, share-nothing集群等)
Linux Load Balance 負載均衡集群
(LVS等....)
Linux High Performance Computing 高性能科學計算集群
(Beowulf 類集群....)
分布式存儲
其他類linux集群
(如Openmosix, rendering farm 等..)
詳細介紹
1. 高可用集群(High Availability Cluster)
常見的就是2個節(jié)點做成的HA集群,有很多通俗的不科學的名稱,比如"雙機熱備", "雙機互備", "雙機".
高可用集群解決的是保障用戶的應(yīng)用程序持續(xù)對外提供服務(wù)的能力。 (請注意高可用集群既不是用來保護業(yè)務(wù)數(shù)據(jù)的,保護的是用戶的業(yè)務(wù)程序?qū)ν獠婚g斷提供服務(wù),把因軟件/硬件/人為造成的故障對業(yè)務(wù)的影響降低到最小程度)。
2. 負載均衡集群(Load Balance Cluster)
負載均衡系統(tǒng):集群中所有的節(jié)點都處于活動狀態(tài),它們分攤系統(tǒng)的工作負載。一般Web服務(wù)器集群、數(shù)據(jù)庫集群和應(yīng)用服務(wù)器集群都屬于這種類型。
負載均衡集群一般用于相應(yīng)網(wǎng)絡(luò)請求的網(wǎng)頁服務(wù)器,數(shù)據(jù)庫服務(wù)器。這種集群可以在接到請求時,檢查接受請求較少,不繁忙的服務(wù)器,并把請求轉(zhuǎn)到這些服務(wù)器上。從檢查其他服務(wù)器狀態(tài)這一點上看,負載均衡和容錯集群很接近,不同之處是數(shù)量上更多。
3. 科學計算集群(High Performance Computing Cluster)
高性能計算(High Perfermance Computing)集群,簡稱HPC集群。這類集群致力于提供單個計算機所不能提供的強大的計算能力。
高性能計算分類
高吞吐計算(High-throughput Computing)
有一類高性能計算,可以把它分成若干可以并行的子任務(wù),而且各個子任務(wù)彼此間沒有什么關(guān)聯(lián)。象在家搜尋外星人( SETI@HOME -- Search for Extraterrestrial Intelligence at Home )就是這一類型應(yīng)用。這一項目是利用Internet上的閑置的計算資源來搜尋外星人。SETI項目的服務(wù)器將一組數(shù)據(jù)和數(shù)據(jù)模式發(fā)給Internet上參加SETI的計算節(jié)點,計算節(jié)點在給定的數(shù)據(jù)上用給定的模式進行搜索,然后將搜索的結(jié)果發(fā)給服務(wù)器。服務(wù)器負責將從各個計算節(jié)點返回的數(shù)據(jù)匯集成完整的數(shù)據(jù)。因為這種類型應(yīng)用的一個共同特征是在海量數(shù)據(jù)上搜索某些模式,所以把這類計算稱為高吞吐計算。所謂的Internet計算都屬于這一類。按照 Flynn的分類,高吞吐計算屬于SIMD(Single Instruction/Multiple Data)的范疇。
分布計算(Distributed Computing)
另一類計算剛好和高吞吐計算相反,它們雖然可以給分成若干并行的子任務(wù),但是子任務(wù)間聯(lián)系很緊密,需要大量的數(shù)據(jù)交換。按照Flynn的分類,分布式的高性能計算屬于MIMD(Multiple Instruction/Multiple Data)的范疇。
4. 分布式(集群)與集群的聯(lián)系與區(qū)別
分布式是指將不同的業(yè)務(wù)分布在不同的地方。
而集群指的是將幾臺服務(wù)器集中在一起,實現(xiàn)同一業(yè)務(wù)。
分布式中的每一個節(jié)點,都可以做集群。
而集群并不一定就是分布式的。
舉例:就比如新浪網(wǎng),訪問的人多了,他可以做一個群集,前面放一個響應(yīng)服務(wù)器,后面幾臺服務(wù)器完成同一業(yè)務(wù),如果有業(yè)務(wù)訪問的時候,響應(yīng)服務(wù)器看哪臺服務(wù)器的負載不是很重,就將給哪一臺去完成。
而分布式,從窄意上理解,也跟集群差不多, 但是它的組織比較松散,不像集群,有一個組織性,一臺服務(wù)器垮了,其它的服務(wù)器可以頂上來。
分布式的每一個節(jié)點,都完成不同的業(yè)務(wù),一個節(jié)點垮了,哪這個業(yè)務(wù)就不可訪問了。
本文來自CSDN博客,轉(zhuǎn)載請標明出處:http://blog.csdn.net/tanghongru1983/archive/2009/04/28/4130356.aspx
posted @
2010-03-02 14:16 absolute 閱讀(642) |
評論 (0) |
編輯 收藏
代碼如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class MyEclipseGen
{
private static final String LL = "Decompiling this copyrighted software is a violation of both your license agreement and the Digital Millenium Copyright Act of 1998 (http://www.loc.gov/copyright/legislation/dmca.pdf). Under section 1204 of the DMCA, penalties range up to a $500,000 fine or up to five years imprisonment for a first offense. Think about it; pay for a license, avoid prosecution, and feel better about yourself.";


public String getSerial(String userId, String licenseNum)
{
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.add(1, 3);
cal.add(6, -1);
java.text.NumberFormat nf = new java.text.DecimalFormat("000");
licenseNum = nf.format(Integer.valueOf(licenseNum));
String verTime = new StringBuilder("-").append(
new java.text.SimpleDateFormat("yyMMdd").format(cal.getTime()))
.append("0").toString();
String type = "YE3MP-";
String need = new StringBuilder(userId.substring(0, 1)).append(type)
.append("300").append(licenseNum).append(verTime).toString();
String dx = new StringBuilder(need).append(LL).append(userId)
.toString();
int suf = this.decode(dx);
String code = new StringBuilder(need).append(String.valueOf(suf))
.toString();
return this.change(code);
}


private int decode(String s)
{
int i;
char[] ac;
int j;
int k;
i = 0;
ac = s.toCharArray();
j = 0;
k = ac.length;

while (j < k)
{
i = (31 * i) + ac[j];
j++;
}
return Math.abs(i);
}


private String change(String s)
{
byte[] abyte0;
char[] ac;
int i;
int k;
int j;
abyte0 = s.getBytes();
ac = new char[s.length()];
i = 0;
k = abyte0.length;

while (i < k)
{
j = abyte0[i];

if ((j >= 48) && (j <= 57))
{
j = (((j - 48) + 5) % 10) + 48;

} else if ((j >= 65) && (j <= 90))
{
j = (((j - 65) + 13) % 26) + 65;

} else if ((j >= 97) && (j <= 122))
{
j = (((j - 97) + 13) % 26) + 97;
}
ac[i] = (char) j;
i++;
}
return String.valueOf(ac);
}


public MyEclipseGen()
{
super();
}


public static void main(String[] args)
{

try
{
System.out.println("please input register name:");
BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));
String userId = null;
userId = reader.readLine();
MyEclipseGen myeclipsegen = new MyEclipseGen();
String res = myeclipsegen.getSerial(userId, "5");
System.out.println("Serial:" + res);
reader.readLine();

} catch (IOException ex)
{
}
}
}

注冊方法:
window -> preferences -> myeclipse -> subscription
posted @
2010-02-16 09:20 absolute|
編輯 收藏
Hibernate學習筆記
1、Hibernate核心類與接口
1-1.Configuration類
Configuration類是Hibernate的入口,它負責配置和啟動Hibernate,Hibernate框架通過Configuration實例加載配置文件信息(hibernate.cfg.xml),然后讀取指定對象關(guān)系映射文件(bean.hbm.xml)的內(nèi)容并創(chuàng)建SessionFactory.
1-2.SessionFactory接口
SessionFactory接口負責初始化Hibernate,一個SessionFactory實例對應(yīng)一個數(shù)據(jù)存儲源(一般就是指一個數(shù)據(jù)庫)。應(yīng)用程序從SessionFactory中獲得Session實例。SessionFactory具有以下特點:
1) 線程安全,即同一個 SessionFactory實例可以被應(yīng)用 的多個線程共享。
2) 它是重量級的 ,因為它需要一個很大的緩存,用來存放預定義的SQL語句以及映射元數(shù)據(jù)等。
所以說 ,如果一個應(yīng)用程序中只訪問一個數(shù)據(jù)庫 ,則只需要創(chuàng)建一個全局的 SessionFactory實例。
1-3.Session 接口
Session是Hibernate中應(yīng)用最頻繁的接口。Session也被稱為持久化管理器 ,它負責管理所有與持久化相關(guān)的操作:如存儲、更新、刪除和加載對象等。Session接口具有以下特點:
1) 單線程,非共享的對象。線程不安全,在設(shè)計軟件架構(gòu)時候,應(yīng)該避免多個線程共享同一個session實例。
2) Session 實例是輕量級的,它的創(chuàng)建和銷毀不需要消耗太多的資源。可以為每個請分配一個Session實例,在每次請求過程匯總及時創(chuàng)建和銷毀 Session實例。
3) Session有一個緩存,它存放當前工作單元加載的對象。Session的緩存被稱為Hibernate的一級緩存。
1-4.Transaction接口
Transaction接口是 Hibernate框架的事務(wù)接口。它對底層的事務(wù)接口做了封裝,包括:JDBC API和JTA.這樣使得Hibernate應(yīng)用可以通過一致的Transaction接口來申明事務(wù)邊界,這有助于應(yīng)用程序再不同的環(huán)境和容器中移植。
1-5.Query和Criteria接口
它們是 Hibernate的查詢接口,用于從數(shù)據(jù)存儲源查詢對象及控制執(zhí)行查詢的過程。Query包裝了一個 HQL(Hibernate Query Language);而Criteria接口完全封裝了基本字符串形式的查詢語句,比Query更加面向?qū)ο螅?/span>Criteria接口擅長于執(zhí)行動態(tài)查詢。
2、Hibernate中常用的事務(wù)隔離級別
常量
|
值
|
說明
|
TRANSACTION_NONE
|
0
|
不支持事務(wù)
|
TRANSACTION_READ_UNCOMMITTED
|
1
|
指示可以發(fā)生臟讀(dirty read)、不可重復讀和虛讀(phantom read)的常量。此級別允許被某一事務(wù)更改的行在已提交該行所有更改之前被另一個事務(wù)讀取(“臟讀”)。如果所有更改都被回滾,則第二個事務(wù)將獲取無效的行。
|
TRANSACTION_READ_COMMITTED
|
2
|
指示不可以發(fā)生臟讀的常量;不可重復讀和虛讀可以發(fā)生。此級別只禁止事務(wù)讀取其中帶有未提交更改的行。
|
TRANSACTION_REPEATABLE_READ
|
4
|
指示不可以發(fā)生臟讀和不可重復讀的常量;虛讀可以發(fā)生。此級別禁止事務(wù)讀取帶有未提交更改的行,它還禁止這種情況:一個事務(wù)讀取某一行,而另一個事務(wù)更改該行,第一個事務(wù)重新讀取該行,并在第二次讀取時獲得不同的值(“不可重復讀”)。
|
TRANSACTION_SERIALIZABLE
|
8
|
指示不可以發(fā)生臟讀、不可重復讀和虛讀的常量。此級別包括TRANSACTION_REPEATABLE_READ 中禁止的事項,同時還禁止出現(xiàn)這種情況:某一事務(wù)讀取所有滿足 WHERE 條件的行,另一個事務(wù)插入一個滿足 WHERE 條件的行,第一個事務(wù)重新讀取滿足相同條件的行,并在第二次讀取時獲得額外的“虛”行。
|
3、Hibernate中實例的狀態(tài)

3-1:臨時狀態(tài)
該實例從未與任何持久化上下文關(guān)聯(lián)過。它沒有持久化標識(相當于主鍵值),臨時狀態(tài)下的對象有如下特征。
1) 不處于Session緩存中,也可以說不被任何一個Session關(guān)聯(lián)
2) 在數(shù)據(jù)庫中沒有對應(yīng)的記錄
在以下情況下,Java對象進入臨時狀態(tài)
1) 當通過new語句剛創(chuàng)建一個Java對象,它處于臨時狀態(tài),此時不和數(shù)據(jù)庫中的任何記錄對應(yīng)。
2) Session的delete()方法能使一個持久化或臨時脫管對象轉(zhuǎn)換為臨時對象。對于脫管對象,delete()方法從數(shù)據(jù)庫中刪除與它對應(yīng)的記錄,并且把它從Session緩存中刪除。
3-2:持久化狀態(tài)
該實例目前與某個持久化上下文有關(guān)聯(lián),它擁有持久化標識(相當于主鍵值),并且可能在數(shù)據(jù)庫匯總有一個對應(yīng)的行。對于某一個特定的持久化上下文,Hibernate保證標識與Java標識(其值代表對應(yīng)在內(nèi)存中的位置)等價。持久化對象有以下特征。
1) 位于一個Session實例的緩存中,也可以說,持久化對象總是被一個Session實例關(guān)聯(lián)。
2) 持久化對象和數(shù)據(jù)庫中的相關(guān)記錄對應(yīng)。
3) Session在清理緩存時,會根據(jù)持久化對象的屬性變化,來同步更新數(shù)據(jù)庫。
Session的許多方法都能夠觸發(fā)Java對象進入持久化狀態(tài)。
4) Session的save()的方法能夠把臨時對象轉(zhuǎn)變成持久化對象。
5) Session的load()或get()方法返回的對象總是處于持久化狀態(tài)。
6) Query類的list()方法返回的list集合中存放的都是持久化對象。
7) Session的update()、saveOrUpdate()和lock()方法使脫管對象轉(zhuǎn)變?yōu)槌志没瘜ο蟆?/span>
當一個持久化對象關(guān)聯(lián)一個臨時對象時,在允許級聯(lián)保存的情況下,Session在清理緩存時會把這個臨時對象也轉(zhuǎn)變成持久化對象。Hibernate保證在同一個Session實例的緩存中,數(shù)據(jù)庫表中的每條記錄只對應(yīng)唯一的持久化對象,也就是說在一個Session里load/get同一個OID得到 的是相同的對象。
3-3:脫管狀態(tài)
實例曾經(jīng)與某個持久化上下文發(fā)生過關(guān)聯(lián),不過那個上下文被關(guān)閉了,或者這個實例是被序列化(serialize)到另外的進程。它擁有持久化標識,并且在數(shù)據(jù)庫中可能存在一個對應(yīng)的行。對于脫管狀態(tài)的實例,Hibernate不保證任何持久化標識和Java標識的關(guān)系。
脫管對象具有以下特征。
1) 不再位于Session的緩存中,也可以說,脫管對象不被Session關(guān)聯(lián)。
2) 脫管對象是有持久化對象轉(zhuǎn)變過來的,因此在數(shù)據(jù)庫中可能還存在與它對應(yīng)的記錄(前提條件是沒有其他程序刪除了這條記錄)。
3) 脫管對象與臨時對象的相同指出在于兩者都不被Session關(guān)聯(lián),因此Hibernate不會保證他們屬性變化與數(shù)據(jù)庫保持同步。脫管對象與臨時對象的區(qū)別在于前者是由持久化對象轉(zhuǎn)變過來的,因此可能在書庫中還存在對應(yīng)的記錄,而后者在數(shù)據(jù)庫中是沒有對應(yīng)的記錄的。
Session的以下方法使持久化對象轉(zhuǎn)變成脫管對象.
1) 當調(diào)用Session的close()方法時,Session 的緩存被清空,緩存中的所有持久化對象都變?yōu)槊摴軐ο螅绻趹?yīng)用程序中沒有引用變量引用這些脫管對象,他們就會結(jié)束生命周期。
2) Session的evict()方法能夠從緩存中刪除一個持久化對象,使它變?yōu)槊摴軤顟B(tài),當Session的緩存中保存了大量的持久化對象時,會消耗許多內(nèi)存空間,為了提高性能,可以考慮調(diào)用evict()方法,從緩存中刪除一些持久化對象。但是多數(shù)情況下不推薦使用該方法,而應(yīng)該通過查詢語言,或者顯示的導航來控制對象圖的深度。
posted @
2010-01-09 19:08 absolute 閱讀(674) |
評論 (0) |
編輯 收藏
最近在構(gòu)思寫一些設(shè)計模式方面的文章,用到UML圖,以前用Visio和WithClass..但功能不多,所以就安裝了Rose 2003..以下是安裝過程:
1.安裝Rose后,默認是需要許可證書的..去下載個破解的..我上傳了破解文件..
點擊這里下載Rose 2003破解
2.先用破解壓縮包里的 rational.exe,lmgrd.exe 覆蓋到你的 \安裝目錄的Rartional\commen\下
3.然后記事本打開 license.dat, 修改里面的 SERVER yourPC ANY DAEMON rational "C:\Program Files\Rational\Common\rational.exe"
改成 SERVER 你的機器名 ANY DAEMON rational "你的安裝目錄\rational.exe" ,拷貝到Common目錄下..
4. 將Flexlm.cpl拷貝到C:\winnt\system32\下, 在控制面板里運行 FlexLm License Manager,
運行后, 在 Setup 面板配置文件路徑,lmgrd.exe -> 你的安裝目錄 \Common\lmgrd.exe, 而 License File 為你改過的 license.dat ...
5.在Control面板點擊Start,如果成功的話點擊Status按鈕將顯示 你的機器名:license server UP (MASTER) 說明成功了
失敗的話重啟一下FlexLm License Manager就沒問題了。
6.如果彈出對話框License Key Administrator Wizard后, 選定Point to a Rational License Server to get my licenses,單擊下一步,
Server Name文本框中填寫你的機器號(可能已經(jīng)填好),單擊完成。 (成功的話會出現(xiàn)兩屏的licenses)
注意:本文轉(zhuǎn)至:
http://www.cnblogs.com/lixianhuei/archive/2006/01/09/313644.html
posted @
2009-10-25 08:29 absolute 閱讀(878) |
評論 (1) |
編輯 收藏
有這樣兩個表:
table_a:
id name val
1 aaa 30
2 aaa 40
3 aaa 50
1 bbb 35
2 bbb 45
3 bbb 55
table_b:
name val1 val2 val3
aaa 30 40 50
bbb 35 45 55
請用一個SQL語句實現(xiàn)table_a到table_b的轉(zhuǎn)化。
1
create table tb(id int, name varchar(10), val int)
2
insert into tb values(1 , 'aaa' , 30 )
3
insert into tb values(2 , 'aaa' , 40 )
4
insert into tb values(3 , 'aaa' , 50 )
5
insert into tb values(1 , 'bbb' , 35 )
6
insert into tb values(2 , 'bbb' , 45 )
7
insert into tb values(3 , 'bbb' , 55 )
8
go
9
10
--sql 2000靜態(tài),指ID只有1,2,3
11
select name ,
12
sum(case id when 1 then val else 0 end) [val1],
13
sum(case id when 2 then val else 0 end) [val2],
14
sum(case id when 3 then val else 0 end) [val3]
15
from tb
16
group by name
17
/**//*
18
name val1 val2 val3
19
---------- ----------- ----------- -----------
20
aaa 30 40 50
21
bbb 35 45 55
22
23
(所影響的行數(shù)為 2 行)
24
*/
25
26
--sql 2000動態(tài),指ID不確定
27
declare @sql varchar(8000)
28
set @sql = 'select name '
29
select @sql = @sql + ' , sum(case id when ''' + cast(id as varchar) + ''' then val else 0 end) [val' + cast(id as varchar) + ']'
30
from (select distinct id from tb) as a
31
set @sql = @sql + ' from tb group by name'
32
exec(@sql)
33
/**//*
34
name val1 val2 val3
35
---------- ----------- ----------- -----------
36
aaa 30 40 50
37
bbb 35 45 55
38
*/
39
40
41
drop table tb
42
posted @
2009-08-17 10:14 absolute 閱讀(441) |
評論 (0) |
編輯 收藏
SQL code
with rollup 、with cube、grouping
CUBE 和 ROLLUP 之間的區(qū)別在于:
CUBE 生成的結(jié)果集顯示了所選列中值的所有組合的聚合。
ROLLUP 生成的結(jié)果集顯示了所選列中值的某一層次結(jié)構(gòu)的聚合。
grouping:
當用 CUBE 或 ROLLUP 運算符添加行時,附加的列輸出值為1,當所添加的行不是由 CUBE 或 ROLLUP 產(chǎn)生時,附加列值為0。
--例如
DECLARE @T TABLE(名稱 VARCHAR(1) , 出版商 VARCHAR(10), 價格1 INT, 價格2 INT)
INSERT @T
SELECT 'a', '北京', 11, 22 UNION ALL
SELECT 'a', '四川', 22, 33 UNION ALL
SELECT 'b', '四川', 12, 23 UNION ALL
SELECT 'b', '北京', 10, 20 UNION ALL
SELECT 'b', '昆明', 20, 30
SELECT
名稱,
出版商,
SUM(價格1) AS 價格1,
SUM(價格2) AS 價格2,
GROUPING(名稱) AS CHECK名稱,
GROUPING(出版商) AS CHECK出版商
FROM @T GROUP BY 名稱,出版商 WITH CUBE
/*
名稱 出版商 價格1 價格2 CHECK名稱 CHECK出版商
---- ---------- ----------- ----------- ------- --------
a 北京 11 22 0 0
a 四川 22 33 0 0
a NULL 33 55 0 1
b 北京 10 20 0 0
b 昆明 20 30 0 0
b 四川 12 23 0 0
b NULL 42 73 0 1
NULL NULL 75 128 1 1
NULL 北京 21 42 1 0
NULL 昆明 20 30 1 0
NULL 四川 34 56 1 0
(所影響的行數(shù)為 11 行)
*/
--分析
/*group by 兩列:名稱有兩個類別A,B;所有由CUBE運算而生成行的是
名稱 出版商 價格1 價格2 CHECK名稱 CHECK出版商
---- ---------- ----------- ----------- ------- --------
a NULL 33 55 0 1
b NULL 42 73 0 1
出版商有三個類別,所有由CUBE運算而生成行的是
名稱 出版商 價格1 價格2 CHECK名稱 CHECK出版商
---- ---------- ----------- ----------- ------- --------
NULL 北京 21 42 1 0
NULL 昆明 20 30 1 0
NULL 四川 34 56 1 0
以及
NULL NULL 75 128 1 1
*/
SELECT
名稱,
出版商,
SUM(價格1) AS 價格1,
SUM(價格2) AS 價格2
FROM @T GROUP BY 名稱,出版商 WITH ROLLUP
/*
名稱 出版商 價格1 價格2
---- ---------- ----------- -----------
a 北京 11 22
a 四川 22 33
a NULL 33 55
b 北京 10 20
b 昆明 20 30
b 四川 12 23
b NULL 42 73
NULL NULL 75 128
*/
posted @
2009-08-17 09:51 absolute 閱讀(17357) |
評論 (0) |
編輯 收藏
HTML頭部信息(head)里包含關(guān)于所在網(wǎng)頁的信息。頭部信息(head)里的內(nèi)容,主要是被瀏覽器所用,不會顯示在網(wǎng)頁的正文內(nèi)容里。
幾個常用的head信息里的html元素
標題(title)
標題(title)是最常用的head信息。它不顯示在HTML網(wǎng)頁正文里,顯示在瀏覽器窗口的標題欄里。
鏈接(link)
用鏈接(link)可以建立和外部文件的鏈接。常用的是對CSS外部樣式表(external style sheet)的鏈接。
如:<link href="css/index.css" rel="stylesheet" type="text/css" />
網(wǎng)頁信息(meta)
在HTML里,meta標記(meta tags)表示用來描述網(wǎng)頁的有關(guān)信息。
<meta http-equiv="Content-Type" content="text/html;charset=gbk" />
<meta name="description" content="" />
<meta name="keywords" content=""/>
<meta http-equiv="Refresh" contetn="5;url">
一、meta標簽的組成
meta標簽共有兩個屬性,它們分別是http-equiv屬性和name屬性,不同的屬性又有不同的參數(shù)值,這些不同的參數(shù)值就實現(xiàn)了不同的網(wǎng)頁功能。
1、name屬性
name屬性主要用于描述網(wǎng)頁,與之對應(yīng)的屬性值為content,content中的內(nèi)容主要是便于搜索引擎機器人查找信息和分類信息用的。
meta標簽的name屬性語法格式是:<meta name="參數(shù)" content="具體的參數(shù)值"> 。
其中name屬性主要有以下幾種參數(shù):
A、Keywords(關(guān)鍵字)
說明:keywords用來告訴搜索引擎你網(wǎng)頁的關(guān)鍵字是什么。
舉例:<meta name ="keywords" content="science, education,culture,politics,ecnomics,relationships, entertaiment, human">
B、description(網(wǎng)站內(nèi)容描述)
說明:description用來告訴搜索引擎你的網(wǎng)站主要內(nèi)容。
舉例:<meta name="description" content="This page is about the meaning of science, education,culture.">
C、robots(機器人向?qū)?
說明:robots用來告訴搜索機器人哪些頁面需要索引,哪些頁面不需要索引。
content的參數(shù)有all,none,index,noindex,follow,nofollow。默認是all。
舉例:<meta name="robots" content="none">
D、author(作者)
說明:標注網(wǎng)頁的作者
舉例:<meta name="author" content"root,root@21cn.com">
2、http-equiv屬性
http-equiv顧名思義,相當于http的文件頭作用,它可以向瀏覽器傳回一些有用的信息,以幫助正確和精確地顯示網(wǎng)頁內(nèi)容,與之對應(yīng)的屬性值為content,content中的內(nèi)容其實就是各個參數(shù)的變量值。
meat標簽的http-equiv屬性語法格式是:<meta http-equiv="參數(shù)" content="參數(shù)變量值"> ;其中http-equiv屬性主要有以下幾種參數(shù):
A、Expires(期限)
說明:可以用于設(shè)定網(wǎng)頁的到期時間。一旦網(wǎng)頁過期,必須到服務(wù)器上重新傳輸。
用法:<meta http-equiv="expires" content="Fri, 12 Jan 2001 18:18:18 GMT">
注意:必須使用GMT的時間格式。
B、Pragma(cache模式)
說明:禁止瀏覽器從本地計算機的緩存中訪問頁面內(nèi)容。
用法:<meta http-equiv="Pragma" content="no-cache">
注意:這樣設(shè)定,訪問者將無法脫機瀏覽。
C、Refresh(刷新)
說明:自動刷新并指向新頁面。
用法:<meta http-equiv="Refresh" content="2;URL=http://www.root.net">
注意:其中的2是指停留2秒鐘后自動刷新到URL網(wǎng)址。
D、Set-Cookie(cookie設(shè)定)
說明:如果網(wǎng)頁過期,那么存盤的cookie將被刪除。
用法:<meta http-equiv="Set-Cookie" content="cookievalue=xxx; expires=Friday, 12-Jan-2001 18:18:18 GMT; path=/">
注意:必須使用GMT的時間格式。
E、Window-target(顯示窗口的設(shè)定)
說明:強制頁面在當前窗口以獨立頁面顯示。
用法:<meta http-equiv="Window-target" content="_top">
注意:用來防止別人在框架里調(diào)用自己的頁面。
F、content-Type(顯示字符集的設(shè)定)
說明:設(shè)定頁面使用的字符集。
用法:<meta http-equiv="content-Type" content="text/html; charset=gb2312">
二、meta標簽的功能
上面我們介紹了meta標簽的一些基本組成,接著我們再來一起看看meta標簽的常見功能:
1、幫助主頁被各大搜索引擎登錄
meta標簽的一個很重要的功能就是設(shè)置關(guān)鍵字,來幫助你的主頁被各大搜索引擎登錄,提高網(wǎng)站的訪問量。在這個功能中,最重要的就是對Keywords和description的設(shè)置。因為按照搜索引擎的工作原理,搜索引擎首先派出機器人自動檢索頁面中的keywords和decription,并將其加入到自己的數(shù)據(jù)庫,然后再根據(jù)關(guān)鍵詞的密度將網(wǎng)站排序。因此,我們必須設(shè)置好關(guān)鍵字,來提高頁面的搜索點擊率。下面我們來舉一個例子供大家參考:
<meta name="keywords" content="政治,經(jīng)濟, 科技,文化, 衛(wèi)生, 情感,心靈,娛樂,生活,社會,企業(yè),交通">
<meta name="description" content="政治,經(jīng)濟, 科技,文化, 衛(wèi)生, 情感,心靈,娛樂,生活,社會,企業(yè),交通">
設(shè)置好這些關(guān)鍵字后,搜索引擎將會自動把這些關(guān)鍵字添加到數(shù)據(jù)庫中,并根據(jù)這些關(guān)鍵字的密度來進行合適的排序。
2、定義頁面的使用語言
這是meta標簽最常見的功能,在制作網(wǎng)頁時,我們在純HTML代碼下都會看到它,它起的作用是定義你網(wǎng)頁的語言,當瀏覽者訪問你的網(wǎng)頁時,瀏覽器會自動識別并設(shè)置網(wǎng)頁中的語言,如果你網(wǎng)頁設(shè)置的是GB碼,而瀏覽者沒有安裝GB碼,這時網(wǎng)頁只會呈現(xiàn)瀏覽者所設(shè)置的瀏覽器默認語言。同樣的,如果該網(wǎng)頁是英語,那么charset=en。下面就是一個具有代表性的例子:
<meta http-equiv=″content-Type″ content=″text/html; charset=gb2312″〉
該代碼就表示將網(wǎng)頁的語言設(shè)置成國標碼。
3、自動刷新并指向新的頁面
如果你想使您的網(wǎng)頁在無人控制的情況下,能自動在指定的時間內(nèi)去訪問指定的網(wǎng)頁,就可以使用meta標簽的自動刷新網(wǎng)頁的功能。下面我們來看一段代碼:
〈meta http-equiv=″refresh″ content=″2; URL=http://www.root.net″〉
這段代碼可以使當前某一個網(wǎng)頁在2秒后自動轉(zhuǎn)到http://www.root.net頁面中去,這就是meta的刷新作用,在content中,2代表設(shè)置的時間(單位為秒),而URL就是在指定的時間后自動連接的網(wǎng)頁地址。
4、實現(xiàn)網(wǎng)頁轉(zhuǎn)換時的動畫效果
使用meta標簽,我們還可以在進入網(wǎng)頁或者離開網(wǎng)頁的一剎那實現(xiàn)動畫效果,我們只要在頁面的html代碼中的<head></head>標簽之間添加如下代碼就可以了:
<meta http-equiv="Page-Enter" content="revealTrans(duration=5.0, transition=20)">
<meta http-equiv="Page-Exit" content="revealTrans(duration=5.0, transition=20)">
一旦上述代碼被加到一個網(wǎng)頁中后,我們再進出頁面時就會看到一些特殊效果,這個功能其實與FrontPage2000中的Format/Page Transition一樣,但我們要注意的是所加網(wǎng)頁不能是一個Frame頁;
5、網(wǎng)頁定級評價
IE4.0以上版本的瀏覽器可以防止瀏覽一些受限制的網(wǎng)站,而之所以瀏覽器會自動識別某些網(wǎng)站是否受限制,就是因為在網(wǎng)站meta標簽中已經(jīng)設(shè)置好了該網(wǎng)站的級別,而該級別的評定是由美國RSAC,即娛樂委員會的評級機構(gòu)評定的,如果你需要評價自己的網(wǎng)站,可以連接到網(wǎng)站http://www.rsac.org/,按要求提交表格,那么RSAC會提供一段meta代碼給你,復制到自己網(wǎng)頁里就可以了。下面就是一段代碼的樣例:
〈meta http-equiv=″PICS-Label″
content=′(PICS-1.1 ″http://www.rsac.org/ratingsv01.html″
l gen true comment ″RSACi North America Server″
for ″http://www.rsac.org″
on ″2001.08.16T08:15-0500″
r (n 0 s 0 v 0 l 0))′〉
6、控制頁面緩沖
meta標簽可以設(shè)置網(wǎng)頁到期的時間,也就是說,當你在Internet Explorer 瀏覽器中設(shè)置瀏覽網(wǎng)頁時首先查看本地緩沖里的頁面,那么當瀏覽某一網(wǎng)頁,而本地緩沖又有時,那么瀏覽器會自動瀏覽緩沖區(qū)里的頁面,直到meta中設(shè)置的時間到期,這時候,瀏覽器才會去取得新頁面。例如下面這段代碼就表示網(wǎng)頁的到期時間是2001年1月12日18時18分18秒。
〈meta http-equiv=″expires″ content=″Friday, 12-Jan-2001 18:18:18 GMT″〉
7、控制網(wǎng)頁顯示的窗口
我們還可以使用meta標簽來控制網(wǎng)頁顯示的窗口,只要在網(wǎng)頁中加入下面的代碼就可以了:<metahttp-equiv="window-target" content="_top">,這段代碼可以防止網(wǎng)頁被別人作為一個Frame調(diào)用。
本文來自CSDN博客,轉(zhuǎn)載出處:http://blog.csdn.net/mabgang/archive/2009/02/25/3934597.aspx
posted @
2009-08-17 09:39 absolute 閱讀(732) |
評論 (0) |
編輯 收藏
開始 -> 執(zhí)行
regsvr32 /n /i:u shell32
然后重啟電腦就可以了!
posted @
2009-08-17 09:25 absolute 閱讀(274) |
評論 (0) |
編輯 收藏