KR100472807B1 - 데이터베이스객체처리명령어들을삽입하기위하여데이터베이스액세스방법들을자동적으로수정하기위한시스템및그방법 - Google Patents
데이터베이스객체처리명령어들을삽입하기위하여데이터베이스액세스방법들을자동적으로수정하기위한시스템및그방법Info
- Publication number
- KR100472807B1 KR100472807B1 KR1019970003651A KR19970003651A KR100472807B1 KR 100472807 B1 KR100472807 B1 KR 100472807B1 KR 1019970003651 A KR1019970003651 A KR 1019970003651A KR 19970003651 A KR19970003651 A KR 19970003651A KR 100472807 B1 KR100472807 B1 KR 100472807B1
- Authority
- KR
- South Korea
- Prior art keywords
- objects
- instructions
- computer program
- main memory
- program
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/4493—Object persistence
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99931—Database or file accessing
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
본 발명은 주기억장치에 저장된 객체들을 액세스하는 컴파일된 프로그램을 영구적으로 저장된 객체를 액세스 및 갱신시키는 프로그램으로 자동변환시키는 시스템 및 그 방법에 관한 것이다.
원래의 컴퓨터 프로그램은 적어도 하나의 객체 클래스에 있는 객체들을 액세스 및 갱신시키기 위한 본래의 명령어들을 포함한다.
본래의 명령어들은 컴퓨터의 주기억장치에 있는 객체들을 액세스 및 갱신시킨다. 시스템은 본래의 명령어들에게 객체 로딩 명령어와 객체 저장 명령어를 추가시킴으로써 변경된 프로그램을 생성시키도록 원래의 컴퓨터 프로그램을 자동적으로 변경시킨다. 변경된 컴퓨터 프로그램의 실행동안에, 객체 저장 명령어들은 그 객체가 최초로 액세스 되었을 때 영구적으로 저장된 객체들중의 하나의 복사본을 컴퓨터의 주기억장치에 있는 해당 객체로 로드시킨다.
객체 저장 명령어들은 트랜잭션의 종료와 같은 미리 정해진 사건이 발생했을 때 새롭거나 갱신된 데이터를 갖고 있는 컴퓨터 주기억장치내의 객체들을 해당하는 영구적으로 저장된 객체들로 복사한다.
시스템은, 변경된 프로그램의 수행동안, 컴퓨터 주기억장치내의 어떤 객체들이 새로운 그리고/또는 갱신된 데이터를 갖고 있는지를 추적하는 더티 객체 표시 명령어들을 본래의 명령어들에 추가시켜 원래의 컴퓨터 프로그램을 더 변경시킨다.
객체 저장 명령어들은 새로운 그리고/또는 갱신된 데이터를 갖는 주기억장치내의 그 객체들만을 복사한다.
Description
본 발명은 일반적으로 데이터베이스에 저장된 데이터를 처리하기 위하여 객체지향형컴퓨터 프로그램들을 이용하기 위한 시스템 및 그 방법에 관한 것으로서, 특히 하나의 데이터베이스안에 있는 데이터를 액세스하는 객체 클래스 방법을 자동적으로 수정하여 그 데이터베이스로부터 데이터를 판독하고 또 새롭고 수정된 데이터를 다시 적당한 횟수로 그 데이터베이스로 되돌려 보내기 위한 시스템 및 그 방법에 관한 것이다.
객체 지향형 DBMS(데이터베이스 관리 시스템)들은 프로그래밍 언어 객체용 영구 저장장치(persistent storage)를 제공하며, 프로그래밍 언어로 이루어진 가상의 데이터 구조의 저장장치를 지원해준다. 반면에, 전통적인 레코드 구조의 DBMS들은 데이터베이스와 프로그래밍 언어 표현들간에 데이터 복사를 주고 받기 위하여 내장된 데이터베이스 언어(예, SQL) 문장들(statement)또는 프로시저 호출을 요구하며, 그들은 단지 레코드들의 저장장치만을 지원한다. 몇몇 새로운 제품들은 전통적인 레코드 구조의 데이터베이스들이 자동적으로 프로그래밍 언어 객체 들에게로 사상(mapping)될 수 있도록 해주므로 객체지향형 DBMS와 같은 동일한 프로그래머의 판정을 제공한다. 본 발명은 이들 객체 관계형(object-relation) 사상들과 객체 지향형 DBMS들을 위한 혁신적인 구현 기술이다. 우리의 목적들을 위하여, 우리는 양자 모두를 위해 후자의 용어를 사용할 것이다.
객체지향형 데이터베이스의 매력적인 면은 그런 데이터베이스들을 조작하는데 사용되는 컴퓨터 프로그램들이 전통적인 데이터베이스 액세스 프로그램들보다 이해하기 쉽다는 것이다. 객체지향형 데이터베이스들의 더욱 더 중요한 잇점은 "정적 데이터형 실행(static data type enforcement)"이 데이터베이스를 액세스하는 컴퓨터 프로그램들에 응용될 수 있다는 것이다. 이것은 그런 프로그램들의 컴파일러가 특별한 데이터베이스 필드에 저장된 모든 테이타가 그 필드를 위해 정의된 데이터형과 대응된다는 것을 보장함을 의미한다. 그러므로, 종업원 이름 필드(employee's name field)에 정수를 입력하려는 프로그램은 액체지향형 시스템의 컴파일러에 의하여 거절될 것이다.
불행하게도, 디스크나 DBMS에 있는 다른 2차 기억장치에 저장된 데이터에 액세스하기 위하여 객체지향형 프로그램들은 기록하는 것은 언뜻 보기보다 매우 어렵다. 객체필드로의 액세스를 데이터베이스 질의들로 바꾸기 위하여 객체 클래스 방법을 기록한다는 것은 합리적으로 명확한 반면, 언제 자료가 데이터베이스에서 판독될 필요가 있고 언제 그 데이터베이스로 다시 기록되어야 하는지를 계속해서 결정하기 위한 코드의 기록은 다소 불명확한데 이는 객체의 참조들(예, 객체들내에서 다른 객체들로의 참조들)이 사용될 수 있는 방법들 때문이다. 예를들어 동일한 데이터베이스 객체를 표현하는 메모리내의 두 객체들을 잘못 생성시키지 않도록 하는 것이 중요하다.
본 명세서의 목적을 위하여 "메모리(Memory)"와 "주기억장치(main memory)"라는 용어는 임의 액세스 기억장치 또는 컴퓨터 시스템의 주기억장치를 의미하는 것으로 한정되어야 하는 디스크 저장장치 또는 영구적으로 혹은 주기억장치보다 장기간 데이터를 보유하는 다른 형태의 저장장치를 의미하는 것으로 한다.
본 프로그램의 목적은 프로그래머들이 실제의 영구 저장장치 데이터베이스에서 판독 또는 그곳으로의 기록하기 위한 메카니즘에 신경쓰지 않고서도 단순히 주기억장치안에 있는 데이터베이스 객체들을 취급하듯이 개체지향형 데이터베이스 활용 프로그램들을 기록할 수 있도록 하는 것이다.
본 발명의 더 구체적인 목적은 데이터베이스로부터 데이터를 복사하기 위하여 요구되는 부가적 코드를 메모리내의 객체들에게 자동적으로 삽입하고, 메모리내의 객체들로부터 새롭고 수정된 데이터를 적절한 횟수로 데이터베이스내에 복사해 넣기 위해, 컴파일된 객체지향형 데이터베이스 프로그램을 "사후처리(post processing)"하는 시스템 및 방법을 제공하는 것이다. 이런 방법으로 프로그래머들은 원래의 소스 코드 프로그램의 목적대로, 비영구적 데이터를 저장하는 객체와 다르지 않게, 영구적으로 저장된 데이터를 표현하는 객체들이 처리되는 객체지향형 데이터베이스 프로그램들을 기록할 수 있다.
요약하면, 본 발명은 주기억장치에 기억된 객체들을 액세스하는 컴파일된 프로그램을 영구적으로 저장된 객체들을 액세스하고 갱신시키는 프로그램으로 자동적으로 변화시켜주는 시스템 및 그 방법이다. 원래의 컴퓨터 프로그램은 적어도 첫 번째 객체 클래스내의 객체들을 액세스하고 갱신시키기 위한 본래의 명령어들은 포함한다. 본래의 명령어들은 컴퓨터 주기억장치내의 객체들을 액세스하고 수정한다. 본 발명의 시스템 및 그 방법은 본래의 명령어들에 객체 로딩 명령어들과 객체 저장명령어들을 추가함으로써, 수정된 컴퓨터 프로그램을 생성하도록 원래의 컴퓨터 프로그램을 자동적으로 수정한다.
수정된 컴퓨터 프로그램을 수행하는 동안, 객체 로딩 명령어들은 그 객체가 처음으로 액세스 되었을 때 영구히 저장된 객체들 중 하나의 복사본을 컴퓨터 주기억장치안의 해당 객체로 로드시킨다. 객체 저장 명령어들은 트랜잭션의 완성과 같은 미리 정해진 사건이 발생했을 때 새롭고 수정된 데이터를 갖고 있는 컴퓨터의 주기억장치안에 있는 객체들을 영구적으로 저장된 해당 객체들로 복사한다.
본 발명의 시스템과 방법은 수정된 컴퓨터 프로그램의 실행동안 컴퓨터의 주기억장치내에서 새롭거나 또는 새롭고 갱신된 데이터를 갖고 있는 객체들을 추적하는 더티(dirty) 객체 표시 명령어들을 본래의 명령어들에 추가함으로써 수정된 컴퓨터 프로그램을 생성하도록 원래의 컴퓨터 프로그램을 추가로 수정한다. 그 객체 저장 명령어들은 단지 새롭거나 또는 새롭고 갱신된 데이터를 갖고 있는 컴퓨터 주기억장치내의 객체들만을 복사한다.
이제 첨부된 도면을 참고로 본 발명에 따른 바람직한 실시예를 설명한다.
본 명세서의 목적을 위하여 "데이터베이스 사용(usage) 프로그램"과 "데이터베이스 활용(utilization) 프로그램"의 용어는 영구적으로 저장된 데이터베이스 또는 영구적으로 저장된 파일에 저장된 데이터를 액세스하는 임의의 프로그램을 의미한다.
바람직한 실시예에서, 데이터베이스 사용 프로그램의 저자는 마치 사용되는 모든 데이터베이스가 주기억장치에 저장된 것처럼 프로그램을 기록한다. 그러므로 데이터베이스 사용 프로그램의 소스코드는 언제 객체들이 영구히 저장된 데이터베이스에서 주기억장치로 복사될 것인지를 결정하기 위하여, 현재의 트랜잭션이 수행되었을 때 최종적으로 데이터베이스에 다시 기록될 필요가 있을 새롭고 수정된 데이터를 갖고 있는 주기억장치내의 객체들을 추적하기 위하여, 그리고 새롭고 수정된 데이터를 갖는 객체들을 데이터베이스에 다시 기록하기 위하여 요구되는 모든 프로그램 코드가 필요없다. 결과적으로 그 소스코드 프로그램은 그 데이터베이스와 주기억장치간에 정보를 주고 받기 위하여 요구되는 모든 코드를 포함하는 소스코드 프로그램보다 판독하거나 수정하기가 훨씬 쉽다.
바람직한 실시예에서, 데이터베이스 활용 프로그램의 소스코드는 자바(Jaba) 프로그래밍 언어로 기록되었는데, 그것은 썬 마이크로시스템사에 의하여 판매되는 "장치 플랫폼에 독립된(machine platform independant)" 프로그래밍 언어이다. 그 데이터베이스 활용 프로그램의 소스코드(200)(도 2 및 도 3 참조)는 전통적인 자바 컴파일러 202를 사용하여 자바 바이트코드 프로그램 204로 컴파일되었고, 따라서 전형적으로 많은 객체 클래스들을 갖게 될 하나의 바이트코드 파일을 만들어낸다.
자바 바이트코드 프로그램들은 가상 기계(virtual machine)를 이루는 바이트코드 프로그램 해석기 176과 결합하여 샐행된다. 자바 바이트코드 프로그램들은 자바 바이트코드 프로그램 해석기가 그 컴퓨터위에 있기만 하면 그 컴퓨터의 운영 시스템보다 컴퓨터 하드웨어 플랫폼에 상관없이 어느 컴퓨터에서도 실행될 수 있도록 설계되었다.
그러나, 데이터베이스 활용 프로그램의 원래의 컴파일된 바이트코드 프로그램 버전은 진정한 함수 프로그램(functional program)이 아닌데, 이는 그 데이터베이스가 사실상 영구 저장장치에 저장되어 있는데도 사용되는 모든 데이터베이스가 주기억장치에 저장되어 있다는 거짓의 가정위에서 기록되었기 때문이다. 본 발명과 관련하여 데이터베이스 활용 프로그램의 원래의 컴파일된 바이트코드 프로그램 버전은 컴파일된 프로그램 내의 객체 클래스들을 수정하는 "사후처리기(postprocessor)" 프로그램 206에 의하여 수정되었다. 사후처리기 206은 영구 저장된 객체들의 주기억장치 복사본들을 저장하기 위하여 사용되어질 객체 클래스들의 객체 데이터 구조들을 수정하는데, 이는 객체포인터를 관리하고 영구적으로 저장된 데이터베이스에 저장될 필요가 있을 더티 객체들의 추적을 위하여 요구되어지는 부가정보의 저장을 가능케하기 위한 것이다. 사후처리기는 또 부가적인 명령어들을 추가함으로써 컴파일된 프로그램내의 객체 클래스들의 방법을 수정하는데, 이는 언제 객체들이 최종적으로 저장된 데이터베이스에서 주기억장치로 복사되어야 하는가를 결정하고, 데이터베이스에서 객체들을 주기억장치로 복사하고, 현재의 트랙잭션이 수행되었을 때 최종적으로 데이터베이스로 다시 기록할 필요가 있을 새롭거나 수정된 데이터를 갖는 주기억장치내의 객체들을 추적하고, 그리고 새롭거나 수정된 데이터와 함께 객체들을 데이터베이스에 다시 기록하기 위함이다.
도 1과 관련하여, 데이터베이스 이용 프로그램의 작동과 연관된 주요 데이터 구조들 일부가 도시되어 있다. 이 설명의 목적상, 본 발명을 이용하는 컴퓨터 시스템 100은 전형적으로 고속의 임의 액세스 기억장치로 구성된 주기억장치 102와 전형적으로 자기 디스크 저장장치 또는 상기 저장 장치의 정전시에도 저장된 정보를 보유하는 다른 저장장치인 영구 데이터 저장장치 104를 포함하는 것으로 가정한다.
영구 데이터 저장장치 104는 데이터베이스 106을 저장하는데, 이 경우 상기 데이터베이스는 많은 객체들 108을 저장하는 객체 지향형 데이터베이스라고 가정된다. 모든 또는 대부분의 저장된 객체들 108은 그 데이터베이스내의 객체들 중 다른 객체들에 대한 포인터들을 포함한다. 게다가 데이터베이스 106은 전형적으로 데이터베이스에 저장된 데이터로의 모든 액세스를 관장하는 데이터 관리 시스템(DBMS, 110)의 일부인데, 전형적으로 데이터베이스로의 액세스는 SQL의 다양한 버전들에 포함된 것들처럼 잘 정의된 명령를 사용하여 수행될 것을 요구한다. 이 논의의 목적상, DBMS 110과 데이터베이스 106은 본 발명에 의하여 변화되지 않는다고 가정한다.
바람직한 실시예에서, 런타임(run time) 시스템 112는 프로그램들의 실행을 제어하는데, 상기 프로그램들은 데이터를 순서대로 주기억장치에 저장한다. 런타임 시스템 112에 의해 수행되는 프로그램들은 이 애플리케이션의 목적상 객체 지향형 프로그램들이라고 가정되며, 따라서 데이터를 객체들 114의 형태로 주기억장치에 저장하는 경향이 있다. 주기억장치 102에 저장된 객체들 중 객체 114-3과 같은 일부 객체들은 그들이 절대 영구 저장장치 104에 저장되지 아니하고 그들을 만들어낸 프로세스보다 오래 존속하지 아니하기 때문에 "일시적(transient)" 객체들이라고 불리운다. 객체 114-1, 114-2와 같은 다른 객체들은 "영구(persistent)" 객체들이라고 불리우는데, (A) 그 객체들의 복사본이 영구저장장치 104에 저장되거나 또는 (B) 이 객체들은 상기 객체들을 생성한 트랙잭션이 성공적으로 끝났을 때 영구저장장치 104에 저장하도록 구성되었기 때문이다.
본 발명은 객체 데이터가 한 세트의 객체 저장 기준(예를 들어, 임의의 정의된 사건들 중 첫 번째 세트의 발생)을 만족시키며 영구저장매체에 저장되어 있고, 객체 데이터가 한 세트의 객체 탐색기준(예, 저장된 사건들 중 두 번째 세트의 어느 것의 발생)을 만족시키며 영구저장 매체로부터 탐색되는 임의의 시스템에도 응용이 가능하다고 이해되어야 한다.
도 1에서 보는 바와같이, 바람직한 실시예에서 영구 객체들은 영구 데이터 기술어(descriptor) 122에 대한 포인터 120을 포함한다. 바람직한 실시예에서 영구데이터 기술어 122는 (A) 전체 객체 식별자(OID) 124 또는 영구저장장치내의 객체의 주소, (B) 그 객체가 더티 객체들의 리스트에 포함될 경우 사용되는 리스트 포인터 126, 및 (C) 전체 객체 식별자(OID) 128 또는 그 객체에서 다른 객체에 대한 각각의 참조 130 주소를 포함한다. 메모리 사용을 최소화하기 위하여, 영구 객체만이 영구 데이터 기술어 122를 포함한다.
명확히 하기 위하여, 바람직한 실시예에서 객체가 DBMS 110으로부터(예, 영구저장장치 104로부터) 주기억장치 102로 복사될 때, 복사된 객체내의 모든 객체 참조들은 여기에서 DBMS 객체 식별자들(OID들)이라고 불리는 64비트 또는 그 이상의 주소들이다. 그런 OID들은 영구 데이터 기술어 122에 저장되어 있고, 주기억장치 객체 복사본 114에 있는 객체 참조 필드들 130은 (A) 만약 참조된 객체가 주기억장치 102에 있지 않으면 널(null) 포인터값으로, 또는 (B)만약 참조된 객체가 주기억장치에 있으면 주기억장치내의 참조된 객체의 복사본에 대한 주기억장치 객체 포인터로 대체된다. 다른 실시예에서, OID들은 데이터베이스에서 복사된 객체들과 연관되어 고유한 주요 키값들로 구성될 수도 있다.
바람직한 실시예에서, 영구 객체들을 위한 각각의 객체 클래스는 일시적 객체들을 지원한다. 일시적 객체들은 동일한 객체 클래스의 영구 객체들과 동일한 데이터 구조를 갖지만, 널(null) 영구 데이터 기술어 포인터 120을 갖고 있다. 동일한 객체 클래스내의 일시적 객체들과 영구 객체들을 모두 지원하는 이유 한가지는 비록 일시적 객체들에 있는 데이터가 영구 저장장치 104에 결코 저장될 필요가 없다고 하여도, 여러 가지 계산을 하는 동안 사용하기 위한 영구 객체들과 동일한 유형의 중간(intermediate) 또는 일시적인(transient) 작업중인 객체들 뿐만 아니라 객체들의 임시 복사본들을 만드는 것이 종종 편리하기 때문이다.
어떤 객체 클래스들이 단지 일시적 객체들만을 위하여 사용되는 본 발명의 바람직한 실시예에서, 그런 객체 클래스 정의들은 영구 데이터 기술어 포인터 120을 제거하고, 대신에 주요 객체 정의의 부분으로 영구 데이터 기술어 122 그 자신을 포함시키기 위하여 수정될 수 있다.
바람직한 실시예에서는 주기억장치에 저장된 객체들 114의 추적을 위하여 두 개의 부가적인 데이터 구조들이 사용된다. 첫째, 해쉬 테이블(hash table) 140이 주기억장치에 저장되고 DBMS OID들을 주기억장치 객체 포인터들로 매핑하기 위하여 사용된다. 하나의 객체가 DBMS로부터 주기억장치로 복사될 때마다 해당 엔트리(entry)가 객체들의 OID와 그 주기억장치 객체 포인터를 나타내는 해쉬 테이블에 부가된다.
해쉬 테이블 140에 있는 임의 객체의 전체 DBMS OID를 참조할 때, 만약 해당 엔트리가 해쉬 테이블 140에서 발견되지 않으면 그 객체는 주기억장치로 복사되지 않았다. 반면에 만약 해당 엔트리가 해쉬 테이블에서 발견되면 그 엔트리내의 객체 포인터는 주기억장치의 객체를 지정하게 된다.
둘째, 리스트 헤더 142는 영구 저장장치로 다시 복사할 필요가 있을 객체들의 링크된 리스트를 지정한다. 이 객체들은 "더티(dirty)" 객체들이라고 불리는데 이는 어떤 사건들이 발생했을 때 주기억장치로 다시 기록될 필요가 있는 캐쉬 기억장치내의 수정된 데이터(그들은 "더티 캐쉬 라인(dirty cache line)"이라고 불리운다)와 같기 때문이다. 링크된 리스트는 리스트 헤더 142에 있는 포인터와 더티 객체들의 영구 데이터 기술어 122에 있는 일련의 포인터들 126에 의하여 구성된다. 만약 더티 객체 리스트가 비어 있으면 리스트 헤더 142는 널 포인터를 갖는다. 더티 객체가 비어있지 않다면 리스트 헤더 142는 더티 객체 리스트에 추가될 마지막 객체를 지정하며, 순서대로 더티 객체 리스트에 추가될 다음번의 마지막 객체를 지정하는 등으로 진행된다. 더티 객체 리스트에 추가될 첫 번째 아이템인 더티 객체 리스트내의 마지막 아이템은 그의 다음 포인터 필드 내에 널 포인터를 갖는다.
새로운 객체가 더티 객체 리스트에 추가될 필요성이 있다면, 수행될 일련의 단계는 다음과 같다. 즉, (A) 리스트 헤더 142에 있는 객체포인터를 새로운 객체의 그다음 더티 객체 포인터 필드 126에 복사한다. 그리고 (B) 새로운 객체에 대한 포인터를 리스트 헤더 142에 저장한다.
바람직한 실시예에서 이루어지는 다른 가정들의 세트는 데이터베이스 객체들이 한정된 트랜잭션들의 문맥(context)에서 사용되는 것과 각 트랜잭션은 전형적으로 '시작(start) 트랜잭션' 명령에 의하여 그리고 만약 트랜잭션의 결과가 버려지게 되었다면 '취소(abort) 트랜잭션' 명령에 의하여 전형적으로 정의된 잘 정의된 종료를 가지고 있다. 더욱이, 각 트랜잭션의 수행동안, 런타임 시스템 112는 주기억장치에 복사된 모든 데이터베이스 객체들에 대한 판독 잠금(read lock)을 요청해야 하고 더욱이 런타임 시스템 112에 의하여 실행되는 프로그램들에 의해 그 내용이 수정되는 모든 데이터베이스 객체들에 대한 기록 잠금(write lock)을 요청해야 하는 것으로 가정된다.
더 구체적으로, 데이터베이스 활용 프로그램의 소스 코드를 준비하는 프로그래머는 각 트랜잭션의 개시에서 데이터베이스 객체 클래스의 시작트랜잭션(StartTransaction) 방법을 불러내기 위하여 Invoke Database·Start Transaction에 상당하는 표현을 소스코드에 포함시켜야 한다. 비슷하게, 프로그래머는 각각의 성공적으로 완료된 각 트랜잭션의 종료시에 데이터베이스 객체 클래스의 종료트랜잭션(EndTransaction) 방법을 불러내기 위하여 Invoke Database·End Transaction에 상응하는 표현을 소스코드에 포함시켜야 하고, 각각의 성공적으로 완료되지 못한 트랜잭션의 개시에 데이터베이스 객체 클래스의 취소트랜잭션(AbortTransaction) 방법으로 불러내기 위하여 Invoke Database·Abort Transaction에 상당하는 표현을 소스코드에 포함시켜야 한다.
시작트랜잭션, 종료트랜잭션, 취소트랜잭션 방법들은 도 4와 관련하여 아래에서 상세히 설명된다.
런타임 시스템이 운용되는 "잘 정의된 트랜잭션" 문맥 때문에 바람직하게는 PDD에 있는 각 객체의 OID를 무효화(nulling)함으로서 각 트랜잭션의 종결시에 주기억장치에 저장된 한 세트의 객체들은 보통 무효화된다. 거기에다 해쉬 테이블 140의 내용이 지워지고 널 포인터가 더티 리스트 헤더 142에 저장되어서, 실행중인 프로그램이 이런 객체들의 어느 것에 부가적인 포인터들을 생성시키지 않는다면 거기에서 주기억장치에 있는 객체들을 불용메모리 수거(garbage collection)를 준비하도록 해준다. 그러나, 적절히 기록된 프로그램을 트랜잭션이 종료한 후 주기억장치에 있는 임의의 객체들에 대한 포인터들을 갖지 말아야 하는데, 이는 모든 그런 객체들은 무효이고 사용할 수 없는 것으로 간주되어야 하기 때문이다.
보통 모든 또는 대부분의 주기억장치에 기억된 일시적 객체들은 주기억장치에 저장된 영구 객체들에 의하여 직·간접적으로 참조될 것이다. 주기억장치에 있는 모든 영구 객체들을 무효화하고 모든 그런 영구 객체들을 접근할 수 없도록 하여, 주기억장치에 있는 일시적 객체들은 보통 접근이 불가하고 따라서 불용메모리 수거를한 준비하게 된다.
대안적 실시예에서는, 사용불가한 객체들을 제거하기 위한 불용메모리 수거를 사용하지 않는 시스템과 같은 곳에서는 주기억장치에 있는 객체들이 명시적으로 제거되거나 그 할당이 취소된다.
이하에서는 컴퓨터 시스템 구성에 관하여 설명한다.
도 2와 관련하여, 바람직한 실시예에서 본 발명의 바람직한 실시예와 연동하는 컴퓨터 시스템 100은 전형적으로 자립형(stand alone) 컴퓨터이거나, 네트워크로 연결된 컴퓨터 시스템에서의 클라이언트 컴퓨터 150 또는 서버 컴퓨터 152일 것이다. 현 논의의 목적상, 본 발명의 바람직한 실시예는 클라이언트 컴퓨터 150에 구현된다고 가정한다. 클라이언트 컴퓨터 150은 CPU 160, 유저 인터페이스 162, 그리고 통신 네트웍 166을 통하여 다른 컴퓨터들과의 통신을 위한 통신 인터페이스 164를 포함한다.
주기억장치 102와 영구 저장장치 104 모두를 포함하는 메모리 102/104는 다음의 것들을 제공한다. 즉, 운영 시스템 170, 인터넷 통신 관리자 프로그램 172, 특정 프로그램이 어떤 미리 정해진 무결성 기준을 만족하는지의 여부를 검증하기 위한 자바 바이트코드 프로그램 검증기 174, 응용프로그램들을 수행하기 위한 자바 바이트코드 프로그램 해석기 176, 객체 클래스들을 사용자 주소공간에 로드시키고 바이트코드 프로그램 식별자를 사용하여 로드된 각 객체 클래스와 관련된 방법들의 무결성을 확인하도록 하는 클래스 로더(class loader) 178, 컴퓨터 102의 사용자에 의해 사용중인 그리고/또는 사용이 가능한 객체 클래스들 182,184,186을 국부적으로 저장하기 위한 적어도 하나의 클래스 저장소(class repository) 180, 객체 저장소 182에 저장된 객체 클래스들의 객체들 예들인 객체들 192,194를 저장하기 위한 적어도 하나의 객체 저장소 190, DBMS 데이터베이스 110/106에 저장된 객체들에 상응하는 주기억장치에 저장된 객체들의 추적을 유지하기 위한 객체 해쉬 테이블 140, 및 더티 객체 리스트 헤더 142를 저장한다.
또한 메모리 102/104에는 다음의 것들이 저장된다. 즉, 소스 코드 데이터베이스 활용 프로그램 200, 자바 프로그램 컴파일러 202, 소스코드 프로그램 200으로부터 컴파일러 202에 의해 생성되는 원래의 컴파일된 프로그램 204, 바람직한 실시예의 사후처리기 프로시저 206, 사후처리기 프로시저 206에 의해 생성되는 수정된 프로그램 208을 저장한다.
그러나, 소스코드(200), 컴파일러(202), 원래의 컴파일된 프로그램(204), 및 사후처리기 프로시저(206)는 수정된 프로그램(207)의 실행 동안 주메모리(102)에 저장되지 않는다고 이해되어야 한다.
바람직한 실시예에서 운영 시스템 170은 각 정의된 주소 공간내에서 다중 실행 순서들(threads)을 지원하는 객체 지향형 멀티태스킹 운영 시스템이다. 더욱이 운영 시스템은 해제된(released) 데이터 구조들과 관련하여 기억장소를 복원하기 위하여 불용메모리 수거 프로시저를 사용한다. 불용메모리 수거 프로시저는 주기적으로 자동 수행되며, 이는 또한 할당을 위한 이용가능한 메모리의 양이 임계(threshold) 수준이하로 떨어질 때 몇회 추가적으로 자동적으로 불리워진다.
도 3을 참조하여, 바람직한 실시예의 시스템 및 그 방법은 원래의 소스코드인 자바언어 데이터베이스 활용 프로그램 200을 수신한다. 이 원래의 소스코드 프로그램은 자바 바이트코드 프로그램 204를 만들기 위하여 전통적인 자바 컴파일러 202에 의하여 컴파일된다. 그러나 자바 바이트코드 프로그램은 그 프로그램에 의하여 사용되는 데이터베이스가 실질적으로 영구 저장소에 저장되어 있는데도, 상기 코드가 사용되는 모든 데이터베이스가 주기억장치에 저장되어 있다는 거짓 가정에 기초하기 때문에 진정한 함수 프로그램(functional program)이 아니다.
데이터베이스 활용 프로그램 204의 원래의 컴파일된 바이트코드 프로그램 버전은 컴파일된 프로그램내에서 객체 클래스들을 수정하여 수정된 자바 바이트코드 프로그램 208을 생성하는 사후처리기 206에 의하여 그 다음에 수정된다. 사후처리기 206은 영구적으로 저장된 객체들의 주기억장치 복사본을 저장하기 위하여 사용될 객체 클래스들의 객체 데이터 구조들을 수정하여, 객체 포인터들을 관리하고 영구 저장된 데이터베이스에 저장될 필요가 있을 더티 객체들의 추적을 위해 요구되는 부가적인 정보의 저장을 가능하게 하도록 한다. 사후처리기 206은 부가적인 명령어들을 추가함으로써 컴파일된 프로그램에 있는 객체 클래스들의 방법들을 수정하는데 이는 언제 객체들이 영구적으로 저장된 데이터베이스에서 주기억장치로 복사되어야 하는가를 결정하기 위하여, 데이터베이스에서 주기억장치로 객체들을 복사하기 위하여, 현재의 트랜잭션이 이루어졌을 때 영구히 데이터베이스로 다시 기록할 필요가 있을 새롭거나 수정된 데이터를 갖는 주기억장치내의 객체들을 추적하기 위하여, 그리고 새롭거나 수정된 데이터를 갖는 객체를 데이터베이스에 다시 기록하기 위한 것이다.
수정된 프로그램 208은 하나 또는 그 이상의 미리 정의된 객체 클래스들 182의 방법들에 대한 방법 호출들(method calls)을 포함하는데, 이하 상세히 기술된다. 그러나, 일반적으로 수정된 프로그램에 의하여 사용되는 미리 정의된 객체 클래스(들)에 있는 방법들은 영구 데이터 기술어 구조 122(도 1 참조)과 함께 작동될 필요가 있는 방법들이며, 또한 데이터베이스 106으로 또는 그로부터의 데이터의 이동을 처리하기 위한 것이다.
결과적인 수정된 바이트코드 프로그램 208의 무결성은 바이트코드 프로그램 검증기 174에 의하여 검증된 후 바이트코드 프로그램 해석기 176에 의하여 수행된다.
도 4에 관하여, 바람직한 실시예에서 데이터베이스 객체 클래스라고 불리는 미리 정의된 객체 클래스가 있는데, 그것은 영구 객체들을 다루고 데이터베이스 106으로 또는 이로부터의 데이터의 이동을 처리하기 위하여 요구되는 모든 방법들을 포함한다. 데이터베이스 객체 클래스는 두 변수들을 포함한다. 즉, 1) 더티 객체 리스트 헤더 142와 2) 객체 해쉬 테이블 140이다. 데이터베이스 객체 클래스에 포함된 방법들은 다음과 같다.
사용자 또는 프로그램 지정 기준에 맞는 하나 또는 그 이상의 데이터베이스 객체들을 요구하고 또 주기억장치에 있는 그런 객체들의 복사본을 생성해내기 위한 질의(Query) 방법 220;
지정된 데이터베이스 객체로부터 주기억장치에 있는 객체로 데이터를 로드하고 주기억장치에 있는 그 객체를 위하여 영구 데이터 기술어의 생성을 야기하는 로드데이터(LoadData) 방법 222로서, 해당하는 DBMS 객체에 판독 잠금을 요구하여 얻어내고 주기억장치에 로드된 각 객체를 위하여 엔트리를 해쉬 테이블에 추가시키는 방법;
주기억장치에 있는 지정된 객체를 더티 객체 리스트에 추가하는 더티 방법으로서의 표시객체(MarkObject) 방법 224로서, 해당하는 DBMS 객체 상의 기록 잠금을 요구하여 얻어내는 방법;
해쉬 테이블 140에 있는 새로운 엔트리들을 어디에 저장할 것인가를 결정할 뿐 아니라 해쉬 테이블 140에 있는 객체 ID를 참조하기 위하여 데이터베이스 질의 방법 220과 로드 데이터 방법 222에 의하여 사용되는 해쉬 함수 방법(Hash Function) 226;
트랜잭션의 개시에서 객체 해쉬 테이블 140과 더티 객체 리스트 헤더 142를 초기화시키는데 사용되나 단지 트랜잭션의 시작에서 이미 초기화 되어 있지 아니한 때에만 사용되는 시작트랜잭션 방법(StartTransaction) 228;
트랜잭션이 성공적으로 끝났을때(즉, 수행(commit)될 때) 호출되며, 먼저 더티 객체 리스트에 있는 모든 객체들을 데이터베이스 106으로 복사를 하고 객체 해쉬 테이블 140과 더티 객체 리스트 헤더 142를 재초기화하는데 사용되는 종료트랜잭션 방법(EndTransaction) 230;
트랜잭션이 실패로서 끝났을 때 (즉, 취소(abort)) 호출되며, 객체 해쉬 테이블 140과 더티 객체 리스트 헤더 142를 다시 초기화하기 위하여 사용되는 취소트랜잭션 방법(Abort Transaction) 232;
객체 해쉬 테이블 140과 더티 객체 리스트 헤더 142를 초기화 또는 재초기화하여 주기억장치에 미리 저장된 모든 영구 객체들을 사용불가로 만들기 위하여 시작, 종료, 취소 트랜잭션 방법들 228, 230 및 232에 의하여 호출되는, 해쉬 테이블 및 더티 객체 리스트를 초기화하기 위한 방법 234이 포함된다.
질의, 시작 트랜잭션, 종료 트랜잭션, 그리고 취소 트랜잭션 방법들은 프로그래머들에 의하여 데이터베이스 프로그램들을 기록할 때 사용되어진다. 데이터베이스 객체 클래스의 로드데이터, 표시더티, 그리고 해쉬 함수방법들은 사후처리기 206에 의하여 생성되는 수정된 프로그램들내의 명령어들에 의하여만 사용된다.
질의 방법 220이 호출되고 그 결과 하나 또는 그 이상의 객체들이 데이터베이스로부터 리턴되었을 때 판독 잠금은 모든 요구된 객체들에 대하여 자동적으로 요구된다. 더욱이 데이터베이스 질의 방법 220에 의하여 리턴된 모든 객체들은 영구 객체로서 주기억장치에 표현되고, 각각은 영구 데이터 기술어 122를 갖는다.
시작트랜잭션 방법 228은 (A) 만약 그들이 이미 지워져있지 않다면 해쉬 테이블 140과 더티 리스트 포인터 142를 지우고, (B) "시작트랜잭션" 명령어들을 DBMS로 보내어 DBMS의 내부 상태를 적절히 초기화하도록 한다.
종료 트랜잭션 방법 230은 다음과 같이 작동한다. 성공적인 트랜잭션의 말미에서 더티 객체 리스트에 있는 모든 객체들은 영구 저장장치에 복사될 필요가 있다. 그러나 더티 객체들이 DBMS에 복사되기 전에 DBMS로 복사될 더티 객체들에 있는 객체 포인터들에 의해 참조되는 모든 일시적 객체들은 영구 객체들 안으로 변환되어야 하고 DBMS로 복사되어야 할 더티 객체들의 리스트에 추가되어야 한다. 이것은 DBMS 객체들에 미결정 포인터(unresolved pointer)들을 갖는 것은 피하기 위하여 필수적인 것이다. 바람직한 실시예에서 더티 객체 리스트에 있는 모든 객체들을 영구 저장장치에 복사하기 위한 종료 트랜잭션은 더티 객체 리스트를 통하여 두 단계를 수행한다. 첫 단계는 (A) 직접 또는 간접적으로 다른 일시적 객체들을 통하여, 더티 객체 리스트에 있는 객체들에 의해 참조되는 모든 일시적 객체를 배치하고, (B) 모든 그 객체들을 위한 데이터베이스 OID들을 얻고, (C) 모든 그 참조된 일시적 객체들을 영구 객체들로 변환하고, (D) 이 객체들에 대한 참조들을 해쉬 테이블과 더티 객체 리스트에 추가하기 위하여 사용된다.
그리고 두 번째 단계에서 더티 객체 리스트에 있는 각 객체는 DBMS로 복사되는데, 그 객체를 DBMS로 보내기 전에 각 객체에 있는 로컬 객체 참조들을 그들의 해당하는 DBMS OID들로 대체한다. 그리고는 '수행 트랜잭션(commit transaction)' 명령가 DBMS로 보내지는데, 이는 DBMS 객체들에 사전에 얻어진 모든 판독 잠금들이 해제되고 모든 DBMS 객체 변화들이 영구히 저장되도록 한다.
표 1은 Database.End Transaction 방법의 유사코드(pseudocode) 표현이다
표 1
취소 트랜잭션 방법 232는 (A) 해쉬 테이블 140과 더티 리스트 포인터 142를 지우고 (B) "취소 트랜잭션" 명령어들을 DBMS로 보내어 DBMS의 내부상태를 리셋시키도록 한다.
이후에서는 사후처리기 프로시저에 관하여 설명한다.
도 4 및 5와 관련하여, 데이터베이스 객체 클래스의 데이터 구조들과 방법들은 사후처리기에 의하여 컴파일된 데이터베이스 사용 프로그램에 삽입된 코드에 의하여 사용된다. 바람직한 실시예에서 컴파일된 데이터베이스 사용 프로그램의 사후처리 프로시저는 다음과 같다.
사후처리 프로시저는 컴파일된 데이터베이스 사용 프로그램에 있는 객체 클래스 정의들을 수정함으로써 그리고 그 프로그램의 최초 명령에 대한 포인터를 셋팅함으로써 시작한다(단계 250).
데이터베이스 또는 다른 영구 저장장치로부터 복사된 데이터를 저장하기 위하여 사용될 수 있는 컴파일된 데이터베이스 사용 프로그램의 모든 객체 클래스들은 영구 데이터 기술어에 대한 포인터를 포함하도록 수정된다. 본 발명의 어떤 실시예에서는, 사후처리기는 그 객체들이 영구 데이터를 저장하기 위하여 사용될 수 있는 모든 객체 클래스들의 리스트를 수신하게 되는데, 그 경우 그 객체 클래스들만이 영구 데이터 기술어를 포함하도록 검사되고 수정된다. 다른 실시예에서는, 원래의 컴파일된 데이터베이스 사용 프로그램에 있는 모든 객체 클래스들은 잠재적으로 영구 데이터를 저장하기 위하여 사용되는 것으로 가정되며, 따라서 모든 클래스들은 영구 데이터 기술어 포인터를 포함하도록 검사되고 수정된다.
다음으로, 원래의 컴파일된 데이터베이스 사용 프로그램의 각 문장(statement)과 명령은 그 문장이 특별한 처리를 요하는 몇몇 명령 유형중의 하나인지를 결정하기 위하여 검사된다(단계 254, 258). 아래의 설명에서, 컴파일된 데이터베이스 사용 프로그램에 추가된 명령어들은 유사코드의 형태로 기록될 것이다. 본 명세서에서 사용된 유사코드는 범용 컴퓨터 언어 조약(universal computer language convention)을 활용한다. 여기에서 사용된 유사코드는 오로지 이 설명을 위하여 발명되었던 것이지만 당업자에 의해 쉽게 이해될 수 있도록 고안되었다.
이하에서는 객체의 객체 포인터 필드를 참조하는 "겟필드(getfield)" 명령어들을 위하여 삽입된 코드에 관하여 설명한다.
만약 현재의 명령(즉, 사후처리기 포인터에 의하여 지정된 것)가 (자바 바이트코드 언어에서 "겟필드(getfield)"라고 불리는 객체인) 객체로부터 객체 포인터 필드를 판독 위한 명령이면, 표 2에 있는 명령어들이 프로그램(단계 256)에 추가된다. 참조를 쉽게 하기 위하여 표 2에 있는 명령어들은 숫자가 부여되어 있다.
표 2
표 2- 계속
추가된 명령어들에 대한 설명은 다음과 같다. 이 설명에서 "참조하는 객체(referring object)"는 여기에서 "참조된 객체(referenced object)"라고 불리우는 다른 객체에 대한 포인터를 갖고 있는 객체이다. 나아가, 표 1과 표 2에서 삽입된 "명령어들"은 유사코드 명령어들이고, 추가된 실제 명령어들의 수와 형식은 사용된 프로그래밍 언어에 따라 다양하다고 이해되어야 한다.
추가된 명령 01은 단순히 참조된 객체에 대한 객체 포인터가 널(null)인지 아닌지를 테스트한다. 만약 객체 포인터가 널이 아니라면 레이블(label) S1으로 점프(명령 02)가 수행되고, 초기 프로그램 코드의 실행이 재개된다. 따라서 참조된 객체가 이미 주기억장치에 존재하면, 오직 하나의 추가된 명령, 즉 비-널(non-null) 포인터 테스트에서 조건지워진 조건부 분기가 실행된다.
만약 참조된 객체를 위한 객체 포인터가 널이라면(명령 01), 나머지 명령어들(03에서 14까지)이 사용된다. 명령 03은 참조하는 객체가 영구 데이터 기술어를 갖고 있는지를 알아보기 위하여 체크한다. 만약 그렇지 않으면, 그 프로그램이 존재하지 않을 수도 있는 객체로 액세스를 시도하고 있는 것이기 때문에 이는 치명적인 오류가 될 수 있으며, 명령 04는 널 포인터 예외(null pointer exception)를 제시하게 되어 예외 처리기(exception handler)로 하여금 프로그램의 제어를 맡게 한다.
참조하는 객체가 영구 데이터 기술어를 가지고 있다고 가정하여 명령 04는 실행되지 아니할 것이고, 그대신 명령 05가 실행될 것인데, 이는 참조하는 객체의 영구 데이터 기술어로부터 참조된 객체에 대한 객체 식별자(OID)를 얻는다.
명령 06은 OID가 널인지를 결정한다. 만약 그렇다면, 그것은 프로그램이 트리(tree) 또는 리스트 순회(traversal)를 수행할 가능성이 크며 종단 노드(leaf node)에 이르렀다는 것을 나타낸다. 이때에, 명령 07은 단순히 S1 레이블로의 분기를 수행함으로써 제어를 본래 프로그램의 다음 명령로 되돌려 보내고, 널 포인터를 스택에 남겨둔다.
다음으로, 비-널 OID가 발견되었다면, 명령 08은 그 OID에 해당하는 객체 포인터를, 만약 존재한다면, 요구하기 위하여 해쉬 테이블에 액세스한다. 명령 09는 해쉬 테이블이 비-널 객체 포인터를 리턴하는지를 체크한다. 만약 그렇다면, 참조된 명령가 이미 주기억장치에 있다는 것을 의미한다. 명령 10이 객체 포인터를 참조하는 객체의 알맞은 필드로 복사하면, 명령 18은 그 객체 포인터를 스택으로 푸쉬하고, 제어는 레이블 S1에 있는 초기 프로그램 명령어들에게로 되돌아간다.
명령 12는 명령 09가 참조된 객체가 주기억장치에 있지 않다는 결정을 내릴때만 수행된다. 명령 12는 Database.Load Object 방법을 불러내는데, a) 그것은 데이터베이스로부터 참조된 객체를 갖고 오고, b) 적절한 객체 클래스의 새로운 실례를 생성 및 초기화하며, c) 새로운 객체를 위하여 영구 데이터 기술어를 생성해내고, d) 갖고 온 객체의 내용을 새로운 객체에 복사하고 그 갖고온 객체로부터 어떤 OID들(예, 데이터베이스에 있는 다른 객체들로의 참조)를 새로운 객체의 영구 데이터 기술어로 저장하며, e) 새로운 객체를 위하여 해쉬 테이블에 새로운 레코드를 생성한다. 명령 14는 새로운 객체를 위한 객체 포인터를 스택에 올려 놓는다. 그러면 제어는 초기 프로그램 명령어들로 되돌아간다.
요약하면, 추가된 코드는 참조된 객체가 이미 주기억장치에 있는지를 결정하고, 그렇지 않다면 데이터베이스에서 그 객체를 가져오고 그 가져온 객체로부터의 그 정보를 주기억장치에 있는 새로운 객체에 저장한다. 이 코드는 주기억장치에 이미 존재하는 객체에 대한 널 객체 포인터를 사용하거나 아직 주기억장치에 복사되지 아니한 객체에 대한 널 객체 포인터를 사용하여 프로그램이 정보 판독을 시도할 수 있는 프로그램 위치에서만 원래의 컴파일된 프로그램에 추가된다.
이하에서는 "풋 필드(put field)" 명령를 위하여 삽입된 코드에 관하여 설명한다.
만약 현재의 명령(예, 사후처리기 포인터에 의해서 지정된 것)가 정보를 객체로 저장하기 위한 것(자바 바이트코드 언어에서 "풋 필드" 명령라고 불리운다)이라면 (단계 258),표 3에 있는 명령어들은 프로그램(단계 260)에 추가된다. 참조를 쉽게 하기 위하여 표 3에 있는 추가된 명령어들은 숫자가 주어졌다.
표 3
표 3- 계속
표 2에 있는 추가된 명령어들의 설명은 다음과 같다.
명령 31과 32는 때때로 참조하는 객체라고 불리우는 객체로부터 영구 데이터 기술어 포인터의 복사본을 얻는다. 명령 33은 포인터가 널인지를 알아보기 위하여 테스트한다. 만약 포인터가 널이라면, 그것은 참조하는 객체가 일시적 객체이며, 그것은 더티로 표시될 수 없고, 그 경우 삽입된 코드의 명령 34는 레이블 S4로 분기를 수행한다.
다음으로, 명령 35는 참조하는 객체의 영구 데이터 기술어에 있는 링크된 리스트 포인터를 얻고, 명령 36은 그것이 널이 아닌지를 알아보기 위하여 테스트한다. 비-널 링크된 리스트 포인터는 그 객체가 이전에 더티로서 표시되었다는 것을 나타내고, 그 경우 삽입된 코드의 명령 37은 레이블 S2로의 분기를 수행한다.
만약 참조하는 객체가 영구 데이터 기술어를 갖고 있으면서도 아직 더티로 표시되지 아니하였다면, 명령 38은 그 객체를 더티로 표시하기 위하여 데이터베이스 객체 클래스의 표시더티(MarkDirty) 방법을 불러낸다. 표시더티 방법은 데이터베이스로부터의 기록 잠금을 요구하기 위한 명령어들을 포함한다.
명령 41에서 48까지는 값이 기록되고 있는 필드가 객체 포인터 필드인 경우에만 원래의 컴파일된 프로그램에 추가된다. 명령 41과 42는 참조하는 객체에 저장될 값 V가 널 객체 포인터인지를 결정한다. 만약 저장될 V 값이 널 객체 포인터이면, 참조하는 객체의 영구 데이터 기술어에 저장될 OID가 없기 때문에 제어는 레이블 S3를 뒤따르는 명령(즉, 원래의 컴파일된 프로그램에 있는 "푸쉬 V" 명령)로 이동된다.
만약 저장될 값 V가 널 객체 포인터가 아니라면, 명령 43과 44는 값 V에 의하여 지정된 객체가 영구 데이터 기술어를 갖고 있는지 결정한다. 만약 갖고 있지 않으면, 참조하는 객체(예, 객체 E)의 PDD에 저장될 OID가 없는 것이며, 제어는 레이블 S3을 뒤따르는 명령에게로 이동한다. 그 이외의 경우는, 값 V에 해당하는 OID가 명령 46에 의하여 얻어지고 명령 47에 의하여 참조된 객체의 영구 데이터 기술어의 알맞은 필드에 저장된다.
도 5에 도시된 프로시저의 단계 262와 252는 원래의 컴파일된 프로그램의 각 명령가 수행된 후에 실행되는데, 포인터를 다음 프로그램 명령로 이동시키고(만약 있다면), 그리고 언제 사후처리 프로시저를 끝낼 것인지를 결정한다.
사후처리기에 의하여 생성된 수정된 프로그램은 바람직한 실시예에서 유효한 자바 바이트코드 프로그램이라는 것을 주지하라. 그러므로, 사후처리기에 의하여 생성된 수정된 프로그램은 실행될 컴퓨터 플랫폼을 위한 원코드(native code)로 다시 컴파일될 수 있다.
이하에서는 대안적 실시예들에 관하여 설명한다.
대안적 실시예에서, 객체에 있는 객체 포인터 필드를 판독하기 위한 각 겟필드(getfield) 명령 후의 표 1에 있는 코드의 삽입은 대부분의 예에 있어서 훌륭한 "널 객체 포인터" 예외 처리기의 사용으로 방지될 수 있다. 널 객체 포인터 예외는 런타임 시스템이, 스택에 있는 값이 널 객체 포인터인데도, 피연산자(operand) 스택 상에 저장될 유효한 객체 포인터를 요구하는 겟필드나 풋필드(putfield) 명령와 같은 명령의 수행을 시도할 때마다 발생한다.
이 대안적 실시예에서, 도 5의 사후처리기 프로시저의 단계 250에서, 사후처리기는 처리되고 있는 컴파일된 데이터베이스 활용 프로그램에 널 포인터 예외 처리기를 추가하고 또 프로그램의 예외 처리기 표를 수정하여 삽입된 널 포인터 예외처리기를 참조하게 한다. 단계 256은 널 포인터 예외처리기가 널 객체 포인터 필드가 얻어진 참조하는 객체를 식별하는데 어려움이 있을 것 같은 경우에만 표 1에 보이는 명령어들이 프로그램에 (단계 256에 의하여) 삽입되도록 수정된다. 즉, 만약 객체 포인터를 이용할 첫 번째 명령가 첫 번째 객체로부터 객체 포인터를 얻어낸 명령어들로부터 프로그램에서 완전히 제거된다면, 예외 처리기는 그 첫 번째 객체를 식별하지 못할 수 있다. 예를 들어, 다음 명령어들의 시퀀스를 갖는 프로그램을 생각해보자 :
위 예에서, 만약 "겟필드 F3" 명령가 널 포인터 예외를 야기한다면 예외처리기는 스택에 있는 널 객체 포인터 객체 01으로부터 얻어진다는 것을 결정할 수 없을 수도 있다. 그런 경우에, 사후처리기는 객체 01의 객체 포인터 필드를 판독하기 위한 명령어들 이후에 표 1에 보이는 코드를 여전히 삽입한다.
이 대안적 실시예에서, 대부분의 경우 어떠한 오버헤드도 비-널 객체 포인터가 객체로부터 기록되는 런타임 동안 발생되지 않으나, 첫 번째의 바람직한 실시예에서 적어도 하나의 명령(프로그램 분기를 야기하는 비-널 테스트 명령)는 모든 그런 겟필드 명령를 위하여 실행되어져야 한다.
위에서 나타났듯이, 널 포인터 예외 처리기는 프로그램의 실행동안 수정된 데이터베이스 사용 프로그램이 널 포인터를 사용하여 객체를 참조하려는 시도를 할 때마다 호출된다. 수정된 데이터베이스 사용 프로그램은, (A) 데이터베이스로부터 아직 주기억장치로 전달되지 아니한 객체에 있는 정보를 액세스하기 위한 "겟필드" 또는 "풋필드" 동작을 처음으로 시도하는 경우 또는 (B) 이전에 주기억장치에 있는 객체를 참조하기 위하여 사용되지 아니한 객체로부터 객체 포인터를 사용하는 경우에만, 널 포인터와 함께 객체의 참조를 시도해야 한다. 그 널 포인터 예외 처리기는 도 6과 관련하여 이하에서 설명한다.
도 6에 관하여, 널 포인터 예외 처리기는 다음의 단계들을 수행한다 :
a) 어떤 객체(참조하는 객체)가 널 포인터 예외를 야기하는 널 객체 포인터를 갖고 있는지를 결정한다(280).
b) 참조하는 객체가 영구의 데이터 기술어를 갖고 있지 아니하면 (281) 널 포인터 예외를 다시 배정하여(282), 만약 있다면, 차상위 수준의 예외 처리기가 소환되도록 한다.
c) 만약 참조하는 객체가 영구의 데이터 기술어를 가진다면(281) 그 객체의 영구데이터 기술어로부터 해당하는 데이터베이스 객체 ID를 얻는다(283).
d) 그 객체의 복사본이 주기억장치에 이미 있는지 알아보기 위하여 해쉬 테이블에 있는 객체 ID를 검색한다(284).
e) 만약 객체가 이미 주기억장치에 있다면(286,Y) 널 포인터를 (해쉬 테이블로부터 복사된) 객체에 대한 주기억장치 객체 포인터의 복사본과 교체하고, 객체 포인터를 프로그램 피연산자 스택에 푸쉬하고, 그리고 제어를 데이터베이스 사용 프로그램에게로 이동시켜서 널 포인터 예외를 야기시키는 명령를 재실행시키도록 한다(288).
f) 만약 그 객체가 주기억장치에 없다면(286,N), Database.Load Object 방법을 불러낸다(289). 그리고
g) 제어를 데이터베이스 사용 프로그램으로 되돌려 널 포인터예외를 야기시키는 명령를 재실행시키도록 한다(299).
Database.Load Object 방법은 불리워졌을 때 다음의 단계들을 수행한다.
h) 객체 ID에 의해 참조된 객체의 복사를 요구하여 얻는다 ; 또한 DBMS 객체에 대한 판독 잠금을 요구하여 얻어낸다(290).
i) DBMS로부터 받은 객체에 해당하는 객체 클래스의 새로운 객체 실례를 생성하고, 또 그 객체를 위한 영구 데이터 기술어를 생성한다(292).
j) 새로운 객체에 있는 모든 객체 식별자들이 새로운 객체를 위한 영구 데이터 기술어에 저장되고 주요 객체에 있는 객체 식별자들이 널 객체 포인터들로 대체되는 일이 없이, OBMS 객체의 내용을 새로운 객체로 복사한다(294).
k) 해쉬 테이블에 새로운 객체에 대한 포인터를 갖고 있는 레코드와 그 데이터베이스 객체 식별자를 추가한다(296). 그리고
l) 주기억장치 객체 포인터의 복사본을 프로그램 피연산자 스택 포인터로 푸쉬한다(298).
본 발명이 몇 개의 특수한 실시예와 관련하여 설명되었지만, 그 설명은 발명의 일례이며 발명을 한정하는 것으로 해석되는 것은 아니다. 다양한 수정이, 첨부된 청구범위에 의하여 정의된 발명의 진정한 정신과 범위로부터 일탈하지 아니하고, 당업자에 의하여 발생할 수 있다.
본 발명에 따라 하나의 데이터베이스안에 있는 데이터를 액세스하는 객체 클래스 방법을 자동적으로 수정하여 그 데이터베이스로부터 데이터를 판독하고 또 새롭고 수정된 데이터를 다시 적당한 횟수로 그 데이터베이스로 되돌려 보내기 위한 시스템 및 그 방법이 제공된다.
도 1은 본 발명의 바람직한 실시예의 방법론을 사용하여 수정된 데이터베이스 프로그램을 이용하는 컴퓨터 시스템의 개념적인 블록도.
도 2는 본 발명의 방법론에 관한 바람직한 실시예의 개념적인 블록도.
도 3은 본 발명의 바람직한 실시예를 이용한 컴퓨터 시스템의 블록도.
도 4는 본 발명의 바람직한 실시예에서 이용되는 데이터베이스 객체 클래스의 블록도.
도 5는 본 발명의 바람직한 실시예에서 이용되는 방법론의 흐름도.
도 6은 본 발명의 다른 실시예에서 이용되는 널 포인터(null pointer) 예외처리기 절차의 흐름도.
*도면의 주요 부분에 대한 부호의 설명*
100 : 컴퓨터 시스템 102 : 주기억 장치
104 : 영구 데이터 저장장치 106 : 데이터베이스
108 : 객체 110 : DBMS
122 : 영구 데이터 기술어 124 : 완전 객체 식별자
126 : 리스트 포인터 140 : 해쉬 테이블
176 : 바이트코드 프로그램 해석기 200 : 소스 코드
202 : 자바 컴파일러 204 : 자바 바이트 코드 프로그램
Claims (21)
- 컴퓨터에 의한 프로그램 제어하에서 수행되며, 영구적으로 저장된 객체들을 액세스하고 갱신하기 위한 객체들지향형 컴퓨터 프로그램들을 생성하는 방법으로서,컴퓨터의 주기억장치에 저장된 객체들을 액세스하기 위하여 본래의 명령어들을 포함하는 초기 컴퓨터 프로그램을 수신하는 단계;객체 액세스 명령어들을 자동으로 식별하고, 제 1세트의 식별된 프로그램 위치들을 나타내는 명령어들이 추가되는 해당 프로그램 위치들을 자동으로 식별하기 위하여, 상기 초기 컴퓨터 프로그램을 스캐닝하는 단계;상기 컴퓨터 프로그램 제어하에서, 수정된 컴퓨터 프로그램을 생성하기 위하여 상기 초기 컴퓨터 프로그램을 자동으로 수정하는 단계로서, 상기 자동 수정 단계는 상기 제 1세트의 식별된 프로그램 위치들에 있는 상기 초기 컴퓨터 프로그램에 객체 로딩 명령어들을 추가하여 이루어지며, 상기 수정된 컴퓨터 프로그램의 실행동안 상기 각각의 객체들이 첫번째로 액세스될 때 상기 추가된 객체 로딩 명령어들은 영구 저장장치로부터 상기 주기억장치로 상기 각각의 객체들을 로딩하는 단계를 포함하고;상기 수신된 초기 컴퓨터 프로그램은 상기 컴퓨터의 주기억장치에 저장된 객체들을 갱신하기 위한 본래의 명령어들을 포함하며;객체 갱신 명령어들을 자동으로 식별하고, 제 2세트의 식별된 프로그램 위치들을 나타내는 명령어들이 추가되는 해당 프로그램 위치들을 자동으로 식별하기 위하여 상기 초기 컴퓨터 프로그램을 스캐닝하는 단계;상기 수정 단계는 상기 컴퓨터 프로그램 제어하에서, 상기 초기 컴퓨터 프로그램을 자동으로 수정하는 단계를 더 포함하는데, 상기 수정단계는 상기 제 2세트의 식별된 프로그램 위치들에 있는 초기 컴퓨터 프로그램에 객체 저장 명령어들을 추가하여 이루어지며, 상기 수정된 컴퓨터 프로그램의 실행동안 미리 정의된 이벤트가 발생할 때 상기 추가된 객체 저장명령은 상기 컴퓨터의 주기억장치에 있는 상기 각각의 객체들을 영구 저장장치에 저장하며;상기 본래의 명령어들에 의하여 액세스되고 갱신된 객체들은 제 1세트의 객체 클래스들에 있는 객체들을 포함하며, 상기 객체 저장명령에 의하여 상기 영구 저장장치에 저장된 객체들은 상기 제 1세트의 객체 클래스들의 서브세트에 있는 제 2세트의 객체 클래스들의 객체들을 포함하며;상기 본래의 명령어들은 상기 제 1세트의 객체 클래스들의 객체들과 연관된 데이터 구조를 정의하는 데이터 구조정의 명령어들을 포함하며;상기 수정 단계는 상기 제 2세트의 객체 클래스들에 있는 객체들이 주기억장치 객체 포인터들 및 상기 제 2세트의 객체 클래스들에 있는 객체들에 의하여 참조된 객체들을 위한 영구 객체 저장 식별자를 모두 저장할 수 있도록 상기 제 2세트의 객체 클래스들과 연관된 데이터 구조를 수정하는 보완적인 객체 정의 명령어들을 추가하는 단계를 더 포함하는 객체지향형 컴퓨터 프로그램 생성 방법.
- 제 1 항에 있어서,상기 수정 단계는 상기 수정된 컴퓨터 프로그램의 실행동안에, 상기 컴퓨터의 주기억장치내의 어떤 객체들이 새로운 및/또는 갱신된 데이터를 포함하는 지를 나타내는 데이터를 저장하는 상기 초기 컴퓨터 프로그램에 더티 객체들 표시 명령어들을 추가하는 단계를 더 포함하고;상기 객체 저장 명령어들은 새로운 그리고/또는 갱신된 데이터를 포함하는 상기 컴퓨터 주기억장치내의 상기 객체들을 상기 영구 저장장치에 저장하는 것을 특징으로 하는 객체지향형 컴퓨터 프로그램 생성 방법.
- 제 1항에 있어서,상기 객체 로딩 명령어들에 의하여 상기 주기억장치에 로딩된 객체들은 상기 주기억장치에 로딩된 상기 객체들에 의하여 참조된 영구 기억장치내의 객체들에 대한 널 객체 포인터들을 포함하며;상기 수정단계는 상기 제 2세트의 객체 클래스들의 객체들의 널 객체 포인터가 액세스될 때마다 상기 객체 로딩 명령어들이 소환되도록 상기 초기 컴퓨터 프로그램을 수정하는 단계를 포함하는 것을 특징으로 하는 객체지향형 컴퓨터 프로그램 생성 방법.
- 제 1항에 있어서,상기 객체들은 데이터베이스표에서 행(row)들인 것을 특징으로 하는 객체지향형 컴퓨터 프로그램 생성 방법.
- 컴퓨터에 의한 프로그램 제어하에서 수행되며, 영구적으로 저장된 객체들을 액세스하고 갱신하기 위한 객체들지향형 컴퓨터 프로그램들을 생성하는 방법으로서,컴퓨터의 주기억장치에 저장된 객체들을 액세스하기 위한 본래의 명령어들을 포함하는 초기 컴퓨터 프로그램을 수신하는 단계;객체 액세스 명령어들을 자동으로 식별하고, 제 1세트의 식별된 프로그램 위치들을 나타내는 추가적인 명령어들이 추가되는 해당 프로그램 위치들을 자동으로 식별하기 위하여, 상기 초기 컴퓨터 프로그램을 스캐닝하는 단계;상기 컴퓨터 프로그램 제어하에서, 수정된 컴퓨터 프로그램을 생성하기 위하여 상기 초기 컴퓨터 프로그램을 자동으로 수정하는 단계로서, 상기 수정단계는 상기 제 1세트의 식별된 프로그램 위치들에 있는 상기 초기 컴퓨터 프로그램에 객체 로딩 명령어들을 추가하여 이루어지며, 상기 수정된 컴퓨터 프로그램의 실행동안 상기 각각의 객체들이 첫번째로 액세스될 때 상기 추가된 객체 로딩명령어들은 영구 저장장치로부터 상기 주기억장치로 상기 각각의 객체들을 로딩하며;상기 초기 컴퓨터 프로그램은 바이트코드 프로그램이며;상기 본래의 명령어들에 의하여 액세스되고 갱신된 객체들은 제 1세트의 객체 클래스들내의 객체들을 포함하며, 상기 객체 저장 명령어들에 의하여 상기 영구 저장장치에 저장된 객체들은 상기 제 1세트의 객체 클래스들의 서브세트인 제 2세트의 객체 클래스들내의 객체들을 포함하며;상기 본래의 명령어들은 상기 제 1세트의 객체 클래스들내의 객체들과 연관된 데이터 구조들을 정의하는 데이터 구조 정의 명령어들을 포함하며;상기 수정 단계는 상기 제 2세트의 객체 클래스들내의 객체들이 주기억장치 객체 포인터들 및 상기 제 2세트의 객체 클래스들내의 객체들에 의하여 참조된 객체들에 대한 영구 저장 객체 식별자들을 모두 저장할 수 있도록 상기 제 2세트의 객체 클래스들과 연관된 데이터 구조들을 수정하는 부가적인 객체 정의 명령어들을 추가하는 단계를 더 포함하는 객체지향형 컴퓨터 프로그램 생성 방법.
- 제 5항에 있어서,상기 객체 로딩 명령어들에 의하여 상기 주기억장치에 로딩된 객체들은 상기 주기억장치에 로딩된 상기 객체들에 의하여 참조된 영구 기억장치내의 객체들에 대한 널 객체 포인터들을 포함하며;상기 수정단계는 상기 제 2세트의 객체 클래스들내의 객체들의 널 객체 포인터가 액세스될 때마다 상기 객체 로딩 명령어들이 소환되도록 상기 초기 컴퓨터 프로그램을 수정하는 단계를 포함하는 것을 특징으로 하는 객체지향형 컴퓨터 프로그램 생성 방법.
- 제 5항에 있어서,상기 객체들은 데이터베이스표에서 행들인 것을 특징으로 하는 객체지향형 컴퓨터 프로그램 생성 방법.
- 컴퓨터 시스템과 관련되어 사용되며, 컴퓨터 프로그램 메카니즘이 내장된 컴퓨터 판독가능 저장매체를 포함하는 컴퓨터 기반 장치로서, 상기 컴퓨터 프로그램 메카니즘은,컴퓨터의 주기억장치에 저장된 객체들을 액세스하기 위한 본래의 명령어들을 포함하는 초기 컴퓨터 프로그램을 수정하는 사후처리기 프로시저를 포함하며; 상기 사후처리기 절차는,객체 액세스 명령어들을 자동으로 식별하고, 제 1세트의 식별된 프로그램 위치들을 나타내는 추가적인 명령어들이 추가되는 해당 프로그램 위치들을 자동으로 식별하기 위하여, 상기 초기 컴퓨터 프로그램을 스캐닝하며;상기 프로세서의 제어하에서, 상기 초기 컴퓨터 프로그램에 부가적인 명령어들을 추가함으로써 수정된 컴퓨터 프로그램을 생성하도록 상기 초기 컴퓨터 프로그램을 자동으로 수정하는 명령어들을 포함하며; 상기 부가적인 명령은,제 1세트의 식별된 프로그램 위치들내의 상기 초기 컴퓨터 프로그램에 추가된 객체 로딩 명령어들을 포함하는데, 상기 추가된 객체 로딩 명령어들은 상기 수정된 컴퓨터 프로그램의 실행동안 상기 각각의 객체들이 첫번째로 액세스될 때 영구저장장치로부터 상기 주기억장치에 각각의 객체들을 로딩하며;상기 초기 컴퓨터 프로그램은 상기 컴퓨터의 주기억장치에 저장된 객체들을 갱신하는 본래의 명령어들을 포함하며;상기 사후처리기 절차는,객체 갱신 명령어들을 자동으로 식별하고, 제 2세트의 식별된 프로그램 위치들을 나타내는 추가적인 명령어들이 추가되는 해당 프로그램 위치들을 자동으로 식별하기 위하여, 상기 초기 컴퓨터 프로그램을 스캐닝하며;상기 초기 컴퓨터 프로그램에 부가적인 명령어들을 추가함으로써 상기 수정된 컴퓨터 프로그램을 생성하도록 상기 초기 컴퓨터 프로그램을 자동으로 수정하는 명령어들을 포함하는데, 상기 부가적인 명령은,상기 제 2세트의 식별된 프로그램 위치들내의 상기 초기 컴퓨터 프로그램에 추가된 객체 저장 명령어들을 포함하며, 상기 추가된 객체 저장 명령어들은 상기 수정된 컴퓨터 프로그램의 실행동안 미리 정의된 이벤트가 발생할 때 상기 영구저장장치로 상기 컴퓨터의 주기억장치내의 상기 각각의 객체들을 저장하며;상기 본래의 명령어들에 의하여 액세스되고 갱신된 객체들은 제 1세트의 객체 클래스들내의 객체들을 포함하며, 상기 객체 저장명령에 의하여 상기 영구 저장장치에 저장된 객체들은 상기 제 1세트의 객체 클래스들의 서브세트인 제 2세트의 객체 클래스들내의 객체들을 포함하며;상기 본래의 명령어들은 상기 제 1세트의 객체 클래스들의 객체들과 연관된 데이터 구조들을 정의하는 데이터 구조 정의 명령어들을 포함하며;상기 부가적인 명령어들은 상기 제 2세트의 객체 클래스들내의 객체들이 주기억장치 객체 포인터들 및 상기 제 2세트의 객체 클래스들내의 객체들에 의하여 참조된 객체들에 대한 영구 저장 객체 식별자들을 모두 저장할 수 있도록 상기 제 2세트의 객체 클래스들과 연관된 데이터 구조들을 수정하는 부가적인 객체 정의 명령어들을 더 포함하는 컴퓨터 기반 장치.
- 제 8항에 있어서,상기 부가적인 명령어들은 상기 수정된 컴퓨터 프로그램의 실행동안에, 상기 컴퓨터의 주기억장치내의 어떤 객체들이 새로운 및/또는 갱신된 데이터를 포함하는 지를 나타내는 데이터를 저장하는 더티 객체들 표시 명령어들을 포함하고;상기 객체 저장 명령어들은 새로운 그리고/또는 갱신된 데이터를 포함하는 상기 컴퓨터 주기억장치에 있는 상기 객체들을 상기 영구 저장장치에 저장하는 것을 특징으로 하는 컴퓨터 기반 장치.
- 제 8항에 있어서,상기 객체 로딩 명령어들에 의하여 상기 주기억장치에 로딩된 객체들은 상기 주기억장치에 로딩된 상기 객체들에 의하여 참조된 영구 기억장치내의 객체들에 대한 널 객체 포인터들을 포함하며;상기 사후처리기 프로시저는 상기 제 2세트의 객체 클래스들의 객체들의 널 객체 포인터가 액세스될 때마다 상기 객체 로딩 명령어들이 소환되도록 상기 초기 컴퓨터 프로그램을 수정하는 것을 특징으로 하는 컴퓨터 기반 장치.
- 제 10항에 있어서,상기 객체들은 데이터베이스표에서 행들인 것을 특징으로 하는 컴퓨터 기반 장치.
- 컴퓨터 시스템과 관련되어 사용되며, 컴퓨터 프로그램 메카니즘이 내장된 컴퓨터 판독가능 저장매체를 포함하는 컴퓨터 기반 장치로서, 상기 컴퓨터 프로그램 메카니즘은,컴퓨터의 주기억장치에 저장된 객체들을 액세스하기 위한 본래의 명령어들을 포함하는 초기 컴퓨터 프로그램을 수정하는 사후처리기 프로시저를 포함하며; 상기 사후처리기 프로시저는,객체 액세스 명령어들을 자동으로 식별하고, 제 1세트의 식별된 프로그램 위치들을 나타내는 추가적인 명령어들이 추가되는 해당 프로그램 위치들을 자동으로 식별하기 위하여, 상기 초기 컴퓨터 프로그램을 스캐닝하며;상기 컴퓨터 프로그램 제어하에서, 수정된 컴퓨터 프로그램을 생성하기 위하여 상기 초기 컴퓨터 프로그램에 부가적인 명령어들을 추가함으로써 상기 초기 컴퓨터 프로그램을 자동으로 수정하는 명령어들을 포함하며; 상기 부가적인 명령어들은,제 1세트의 식별된 프로그램 위치들에서 상기 초기 컴퓨터 프로그램에 추가된 객체 로딩 명령어들을 포함하는데, 상기 추가된 객체 로딩 명령어들은 상기 수정된 컴퓨터 프로그램의 실행동안 상기 각각의 객체들이 첫번째로 액세스될 때 영구저장장치로부터 상기 주기억장치에 각각의 객체들을 로딩하며;상기 초기 컴퓨터 프로그램은 바이트코드 프로그램이며;상기 본래의 명령어들에 의하여 액세스되고 갱신된 객체들은 제 1세트의 객체 클래스들내의 객체들을 포함하며, 상기 객체 저장 명령어들에 의하여 상기 영구 저장장치에 저장된 객체들은 상기 제 1세트의 객체 클래스들의 서브세트인 제 2세트의 객체 클래스들의 객체들을 포함하며;상기 본래의 명령어들은 상기 제 1세트의 객체 클래스들내의 객체들과 연관된 데이터 구조들을 정의하는 데이터 구조 정의 명령어들을 포함하며;상기 부가적인 명령어들은 상기 제 2세트의 객체 클래스들내의 객체들이 주기억장치 객체 포인터들 및 상기 제 2세트의 객체 클래스들내의 객체들에 의하여 참조된 객체들에 대한 영구 저장 객체 식별자들을 모두 저장할 수 있도록 상기 제 2세트의 객체 클래스들과 연관된 데이터 구조들을 수정하는 부가적인 객체 정의 명령어들을 더 포함하는 컴퓨터 기반 장치.
- 제 12항에 있어서,상기 객체 로딩 명령어들에 의하여 상기 주기억장치에 로딩된 객체들은 상기 주기억장치에 로딩된 상기 객체들에 의하여 참조된 영구 기억장치의 객체들에 대한 널 객체 포인터들을 포함하며;상기 사후처리기 프로시저는 상기 제 2세트의 객체 클래스들내의 객체들의 널 객체 포인터가 액세스될 때마다 상기 객체 로딩 명령어들이 소환되도록 상기 초기 컴퓨터 프로그램을 수정하는 것을 특징으로 하는 컴퓨터 기반 장치.
- 제 12항에 있어서,상기 객체들은 데이터베이스표에서 행들인 것을 특징으로 하는 컴퓨터 기반 장치.
- 객체들을 저장하기 위한 주기억장치를 포함하는 메모리 장치로서,상기 메모리 장치는 초기 컴퓨터 프로그램, 수정된 컴퓨터 프로그램, 및 상기 주기억장치에 저장된 객체들을 액세스하기 위한 본래의 명령어들을 포함하는 초기 컴퓨터 프로그램을 수정하는 사후처리기 프로시저를 추가로 저장하며, 상기 사후처리기 프로시저는,객체 액세스 명령어들을 자동으로 식별하고, 상기 제 1세트의 식별된 프로그램 위치들을 나타내는 추가적인 명령어들이 추가되는 해당 프로그램 위치들을 자동으로 식별하기 위하여, 상기 초기 컴퓨터 프로그램을 스캐닝하며;상기 컴퓨터 프로그램 제어하에서, 상기 초기 컴퓨터 프로그램에 부가적인 명령어들을 추가함으로써 수정된 컴퓨터 프로그램을 생성하도록 상기 초기 컴퓨터 프로그램을 자동으로 수정하는 명령어들을 포함하며; 상기 부가적인 명령어들은,상기 제 1세트의 식별된 프로그램 위치들에 있는 초기 컴퓨터 프로그램에 추가된 객체 로딩 명령어들을 포함하는데, 상기 추가된 객체 로딩 명령어들은 상기 수정된 컴퓨터 프로그램의 실행동안 상기 각각의 객체들이 가장 우선적으로 액세스될 때 상기 주기억장치에 영구 저장장치의 각각의 객체들을 로딩하며;상기 초기 컴퓨터 프로그램은 상기 컴퓨터의 주기억장치에 저장된 객체들을 갱신하는 본래의 명령어들을 포함하며;상기 사후처리기 프로시저는 객체 갱신 명령어들을 자동으로 식별하고, 제 2세트의 식별된 프로그램 위치들을 나타내는 명령어들이 추가되는 해당 프로그램 위치들을 자동으로 식별하기 위하여, 상기 초기 컴퓨터 프로그램을 스캐닝하며; 상기 초기 컴퓨터 프로그램에 부가적인 명령어들을 추가함으로써 상기 수정된 컴퓨터 프로그램을 생성하도록 상기 초기 컴퓨터 프로그램을 자동으로 수정하는 명령어들을 포함하는데, 상기 부가적인 명령어들은,제 2세트의 식별된 프로그램 위치들에 있는 상기 초기 컴퓨터 프로그램에 추가된 객체 저장 명령어들을 포함하며, 상기 추가된 객체 저장명령어들은 상기 수정된 컴퓨터 프로그램의 실행동안 미리 정의된 이벤트가 발생할 때 상기 영구 저장장치로 상기 컴퓨터의 주기억장치에 있는 상기 각각의 객체들을 저장하며;상기 본래의 명령어들에 의하여 액세스되고 갱신된 객체들은 제 1세트의 객체 클래스들에 있는 객체들을 포함하며, 상기 객체 저장명령에 의하여 상기 영구 저장장치에 저장된 객체들은 상기 제 1세트의 객체 클래스들의 서브세트인 제 2세트의 객체 클래스들의 객체들을 포함하며;상기 본래의 명령어들은 상기 제 1세트의 객체 클래스들의 객체들과 연관된 데이터 구조들을 정의하는 데이터 구조 정의 명령어들을 포함하며; 상기 부가적인 명령어들은,상기 제 2세트의 객체 클래스들에 있는 객체들이 주기억장치 객체 포인터들 및 상기 제 2세트의 객체 클래스들에 있는 객체들에 의하여 참조된 객체들에 대한 영구 저장 객체 식별자를 모두 저장할 수 있도록 상기 제 2세트의 객체 클래스들과 연관된 데이터 구조들을 수정하는 부가적인 객체 정의 명령어들을 더 포함하는 메모리 장치.
- 제 15항에 있어서,상기 부가적인 명령어들은 상기 수정된 컴퓨터 프로그램의 실행동안에, 상기 컴퓨터의 주기억장치내의 어떤 객체들이 새로운 및/또는 갱신된 데이터를 포함하는 지를 나타내는 데이터를 저장하는 더티 객체들 표시 명령어들을 포함하고;상기 객체 저장 명령어들은 새로운 그리고/또는 갱신된 데이터를 포함하는 상기 컴퓨터 주기억장치에 있는 상기 객체들을 상기 영구 저장장치에 저장하는 것을 특징으로 하는 메모리 장치.
- 제 15항에 있어서,상기 객체 로딩 명령에 의하여 상기 주기억장치에 로딩된 객체들은 상기 주기억장치에 로딩된 상기 객체들에 의하여 참조된 영구 기억장치의 객체들에 대한 널 객체 포인터들을 포함하며;상기 사후처리기 프로시저는 상기 제 2세트의 객체 클래스들의 객체들의 널 객체 포인터들이 액세스될 때마다 상기 객체 로딩 명령어들이 소환되도록 상기 초기 컴퓨터 프로그램을 수정하는 것을 특징으로 하는 메모리 장치.
- 제 15항에 있어서,상기 객체들은 데이터베이스표에서 행들인 것을 특징으로 하는 메모리 장치.
- 객체들을 저장하기 위한 주기억장치를 포함하는 메모리 장치로서,상기 메모리 장치는 초기 컴퓨터 프로그램, 수정된 컴퓨터 프로그램, 및 상기 주기억장치에 저장된 객체들에 액세스하기 위한 본래의 명령어들을 포함하는 초기 컴퓨터 프로그램을 수정하는 사후처리기 프로시저를 저장하며; 상기 사후처리기 프로시저는,객체 액세스 명령어들을 자동으로 식별하고, 상기 제 1세트의 식별된 프로그램 위치들을 나타내는 명령어들이 추가되는 해당 프로그램 위치들을 자동으로 식별하기 위하여 상기 초기 컴퓨터 프로그램을 스캐닝하며;상기 컴퓨터 프로그램 제어하에서, 상기 초기 컴퓨터 프로그램에 부가적인 명령어들을 추가함으로써 수정된 컴퓨터 프로그램을 생성하도록 상기 초기 컴퓨터 프로그램을 자동으로 수정하는 명령어들을 포함하며; 상기 부가적인 명령은,상기 제 1세트의 식별된 프로그램 위치들에 있는 초기 컴퓨터 프로그램에 추가된 객체 로딩 명령어들을 포함하는데, 상기 추가된 객체 로딩 명령어들은 상기 수정된 컴퓨터 프로그램의 실행동안 상기 각각의 객체들이 첫번째로 액세스될 때 영구 저장장치로부터 상기 주기억장치에 각각의 객체들을 로딩하며;상기 초기 컴퓨터 프로그램은 바이트코드 프로그램이며;상기 본래의 명령어들에 의하여 액세스되고 갱신된 객체들은 제 1세트의 객체 클래스들에 있는 객체들을 포함하며, 상기 객체 저장명령에 의하여 상기 영구 저장장치에 저장된 객체들은 상기 제 1세트의 객체 클래스들의 서브세트인 제 2세트의 객체 클래스들의 객체들을 포함하며;상기 본래의 명령어들은 상기 제 1세트의 객체 클래스들의 객체들과 연관된 데이터 구조들을 정의하는 데이터 구조 정의 명령어들을 포함하며; 상기 부가적인 명령어들은,상기 제 2세트의 객체 클래스들에 있는 객체들이 주기억장치 객체 포인터들 및 상기 제 2세트의 객체 클래스들에 있는 객체들에 의하여 참조된 객체들에 대한 영구 저장 객체 식별자를 모두 저장할 수 있도록 상기 제 2세트의 객체 클래스들과 연관된 데이터 구조들을 수정하는 부가적인 객체 정의 명령어들을 더 포함하는 메모리 장치.
- 제 19항에 있어서,상기 객체 로딩 명령어들에 의하여 상기 주기억장치에 로딩된 객체들은 상기 주기억장치에 로딩된 상기 객체들에 의하여 참조된 영구 저장장치의 객체들에 대한 널 객체 포인터들을 포함하며;상기 사후처리기 프로시저는 상기 제 2세트의 객체 클래스들내의 객체들의 널 객체 포인터들이 액세스될 때마다 상기 객체 로딩 명령어들이 소환되도록 상기 초기 컴퓨터 프로그램을 수정하는 것을 특징으로 하는 메모리 장치.
- 제 19항에 있어서,상기 객체들은 데이터베이스표에서 행들인 것을 특징으로 하는 메모리 장치.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/599,055 | 1996-02-09 | ||
US08/599,055 US6128771A (en) | 1996-02-09 | 1996-02-09 | System and method for automatically modifying database access methods to insert database object handling instructions |
Publications (2)
Publication Number | Publication Date |
---|---|
KR970062897A KR970062897A (ko) | 1997-09-12 |
KR100472807B1 true KR100472807B1 (ko) | 2005-05-16 |
Family
ID=24398014
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1019970003651A KR100472807B1 (ko) | 1996-02-09 | 1997-02-06 | 데이터베이스객체처리명령어들을삽입하기위하여데이터베이스액세스방법들을자동적으로수정하기위한시스템및그방법 |
Country Status (8)
Country | Link |
---|---|
US (2) | US6128771A (ko) |
EP (1) | EP0789300B1 (ko) |
JP (2) | JPH1063561A (ko) |
KR (1) | KR100472807B1 (ko) |
CN (1) | CN1146786C (ko) |
DE (1) | DE69724855D1 (ko) |
SG (1) | SG75111A1 (ko) |
TW (1) | TW317624B (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100689368B1 (ko) * | 1999-12-29 | 2007-03-08 | 삼성전자주식회사 | 개인용 컴퓨터에서 데이터 베이스 접속 방법 |
Families Citing this family (72)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5911071A (en) * | 1996-09-13 | 1999-06-08 | Sun Microsystems, Inc. | Persistent programming system and method for deploying self-containing executable applications |
US5930794A (en) * | 1996-10-18 | 1999-07-27 | Sagent Technologies, Inc. | Database repository with deferred transactions |
KR100512157B1 (ko) * | 1997-09-04 | 2005-11-01 | 삼성전자주식회사 | 오오피 기반의 마이크로컨트롤러 응용 개발 시스템 |
US6360363B1 (en) * | 1997-12-31 | 2002-03-19 | Eternal Systems, Inc. | Live upgrade process for object-oriented programs |
US6714935B1 (en) * | 1998-09-21 | 2004-03-30 | Microsoft Corporation | Management of non-persistent data in a persistent database |
US7464383B1 (en) * | 1999-04-16 | 2008-12-09 | Adobe Systems Incorporated | Dynamic dependency graph in MVC paradigm |
US6857015B1 (en) | 1999-06-14 | 2005-02-15 | Wind River International, Ltd. | Method and system for remotely observing and controlling objects |
WO2000077613A2 (en) * | 1999-06-14 | 2000-12-21 | Wind River International Inc. | Method and system for managing and using persistent storage |
US6490616B1 (en) | 1999-06-14 | 2002-12-03 | Wind River International, Ltd. | Method and apparatus for incremental download from server to client |
JP3756352B2 (ja) * | 1999-06-29 | 2006-03-15 | 富士通株式会社 | コンパイラ装置およびコンパイラを記録したコンピュータ読み取り可能な記録媒体 |
US6658660B1 (en) * | 1999-12-31 | 2003-12-02 | Nortel Networks Limited | System and method of automatically modifying source code for marshaling, unmarshaling and marking modified data objects |
US7987217B2 (en) * | 2000-05-12 | 2011-07-26 | Oracle International Corporation | Transaction-aware caching for document metadata |
US7185005B1 (en) | 2000-05-12 | 2007-02-27 | Oracle International Corporation | Nested transactions in a file system |
US7389493B1 (en) | 2000-05-12 | 2008-06-17 | Oracle International Corporation | Categories on a per instance basis |
US7725878B1 (en) * | 2000-05-12 | 2010-05-25 | Oracle International Corporation | Property bundles on a per instance basis |
US6772320B1 (en) * | 2000-11-17 | 2004-08-03 | Intel Corporation | Method and computer program for data conversion in a heterogeneous communications network |
US7434156B1 (en) | 2000-11-27 | 2008-10-07 | Sun Microsystems, Inc. | Method, system, program, and computer readable medium for providing a database for object oriented objects |
KR100426620B1 (ko) * | 2000-12-26 | 2004-04-13 | 한국전자통신연구원 | 주기억장치 상주 객체관계형 dbms 에서의 클래스 인스턴스 변경 방법 |
US6931638B2 (en) * | 2001-03-15 | 2005-08-16 | Sun Microsystems, Inc | Method and apparatus to facilitate sharing optimized instruction code in a multitasking virtual machine |
US7370322B1 (en) * | 2001-04-11 | 2008-05-06 | Sun Microsystems, Inc. | Method and apparatus for performing online application upgrades in a java platform |
US6772172B2 (en) | 2001-04-27 | 2004-08-03 | Sun Microsystems, Inc. | Method, system, program, and computer readable medium for indexing object oriented objects in an object oriented database |
US7069540B1 (en) * | 2001-07-02 | 2006-06-27 | Unisys Corporation | COM persistence model |
US20030018909A1 (en) * | 2001-07-17 | 2003-01-23 | International Business Machines Corporation | Method and apparatus for enforcing security policies in Java applications |
US6857119B1 (en) * | 2001-09-25 | 2005-02-15 | Oracle International Corporation | Techniques for modifying a compiled application |
US6763347B1 (en) * | 2001-10-19 | 2004-07-13 | Nick Zhang | Indexing management for hierarchical main memory |
US7020641B2 (en) * | 2001-10-22 | 2006-03-28 | Sun Microsystems, Inc. | Method, system, and program for maintaining a database of data objects |
US7320137B1 (en) | 2001-12-06 | 2008-01-15 | Digeo, Inc. | Method and system for distributing personalized editions of media programs using bookmarks |
US20030122966A1 (en) * | 2001-12-06 | 2003-07-03 | Digeo, Inc. | System and method for meta data distribution to customize media content playback |
US7016913B2 (en) | 2002-03-20 | 2006-03-21 | Sun Microsystems, Inc. | Method, system, data structures, and article of manufacture for implementing a persistent object |
US7356537B2 (en) | 2002-06-06 | 2008-04-08 | Microsoft Corporation | Providing contextually sensitive tools and help content in computer-generated documents |
US20070088655A1 (en) * | 2002-06-27 | 2007-04-19 | Peter Seilern | Method for the electronic processing of share transactions |
US7093245B2 (en) * | 2002-11-20 | 2006-08-15 | Hewlett-Packard Development Company, L.P. | System and apparatus for upgrading concentrated executable computer software code without reconcentration |
US7096463B2 (en) * | 2002-11-20 | 2006-08-22 | Hewlett-Packard Development Company, Lp. | System and apparatus for dynamically upgrading concentrated executable computer software code |
US7113953B2 (en) * | 2003-06-30 | 2006-09-26 | International Business Machines Corporation | System and method for efficiently writing data from an in-memory database to a disk database |
US20050044523A1 (en) * | 2003-08-20 | 2005-02-24 | International Business Machines Corporation | Method and system for compiling Java code with referenced classes in a workspace environment |
US20050203903A1 (en) * | 2004-03-10 | 2005-09-15 | Rajan Rajeev B. | System and method for locking and isolation in a storage platform |
US20060085473A1 (en) * | 2004-10-14 | 2006-04-20 | Frederik Thormaehlen | Method and system for business process super-transaction |
US7665077B2 (en) * | 2004-10-18 | 2010-02-16 | Microsoft Corporation | System and method for sharing objects between applications in a virtual runtime environment |
US8738891B1 (en) * | 2004-11-15 | 2014-05-27 | Nvidia Corporation | Methods and systems for command acceleration in a video processor via translation of scalar instructions into vector instructions |
US20060242188A1 (en) * | 2005-04-22 | 2006-10-26 | Igor Tsyganskiy | Methods of exposing a missing collection of application elements as deprecated |
US7720879B2 (en) * | 2005-04-22 | 2010-05-18 | Sap Ag | Methods of using an integrated development environment to configure business applications |
US20060242171A1 (en) * | 2005-04-22 | 2006-10-26 | Igor Tsyganskiy | Methods of using code-based case tools to verify application layer configurations |
US7542980B2 (en) | 2005-04-22 | 2009-06-02 | Sap Ag | Methods of comparing and merging business process configurations |
US7702638B2 (en) * | 2005-04-22 | 2010-04-20 | Sap Ag | Systems and methods for off-line modeling a business application |
US20060242177A1 (en) * | 2005-04-22 | 2006-10-26 | Igor Tsyganskiy | Methods of exposing business application runtime exceptions at design time |
US20060241961A1 (en) * | 2005-04-22 | 2006-10-26 | Igor Tsyganskiy | Methods of optimizing legacy application layer control structure using refactoring |
US20060242196A1 (en) * | 2005-04-22 | 2006-10-26 | Igor Tsyganskiy | Methods of exposing application layer integrity as object oriented programming language elements |
US20060282458A1 (en) * | 2005-04-22 | 2006-12-14 | Igor Tsyganskiy | Methods and systems for merging business process configurations |
US8539003B2 (en) * | 2005-04-22 | 2013-09-17 | Sap Ag | Systems and methods for identifying problems of a business application in a customer support system |
US20060242176A1 (en) * | 2005-04-22 | 2006-10-26 | Igor Tsyganskiy | Methods of exposing business configuration dependencies |
US7958486B2 (en) * | 2005-04-22 | 2011-06-07 | Sap Ag | Methods and systems for data-focused debugging and tracing capabilities |
US20060242174A1 (en) * | 2005-04-22 | 2006-10-26 | Igor Tsyganskiy | Systems and methods for using object-oriented tools to debug business applications |
US20060242197A1 (en) * | 2005-04-22 | 2006-10-26 | Igor Tsyganskiy | Methods of transforming application layer structure as objects |
US20060242194A1 (en) * | 2005-04-22 | 2006-10-26 | Igor Tsyganskiy | Systems and methods for modeling and manipulating a table-driven business application in an object-oriented environment |
US20060293935A1 (en) * | 2005-04-22 | 2006-12-28 | Igor Tsyganskiy | Methods and systems for incrementally exposing business application errors using an integrated display |
US20060241999A1 (en) * | 2005-04-22 | 2006-10-26 | Igor Tsyganskiy | Methods of exposing a sequence of instructions into an object-oriented programming language |
US20060293940A1 (en) * | 2005-04-22 | 2006-12-28 | Igor Tsyganskiy | Methods and systems for applying intelligent filters and identifying life cycle events for data elements during business application debugging |
US20060242172A1 (en) * | 2005-04-22 | 2006-10-26 | Igor Tsyganskiy | Systems and methods for transforming logic entities of a business application into an object-oriented model |
KR100772455B1 (ko) * | 2005-06-22 | 2007-11-01 | 한국전자통신연구원 | Dac 강화를 위한 프로세스 분류/실행 제어 장치 및 방법 |
US7487178B2 (en) * | 2005-10-05 | 2009-02-03 | International Business Machines Corporation | System and method for providing an object to support data structures in worm storage |
US20100122073A1 (en) * | 2008-11-10 | 2010-05-13 | Ravi Narayanaswamy | Handling exceptions in software transactional memory systems |
US9020905B2 (en) * | 2009-10-31 | 2015-04-28 | International Business Machines Corporation | Synchronizing database and non-database resources without a commit coordinator |
JP4959781B2 (ja) * | 2009-12-22 | 2012-06-27 | インターナショナル・ビジネス・マシーンズ・コーポレーション | オブジェクト生成地点記録方法およびプログラム |
US8756193B2 (en) | 2011-10-31 | 2014-06-17 | Apple Inc. | System and method for persisting object pointers |
US10509725B2 (en) | 2013-03-08 | 2019-12-17 | Oracle International Corporation | Flushing by copying entries in a non-coherent cache to main memory |
EP2972829A1 (en) * | 2013-03-14 | 2016-01-20 | Apperian, Inc. | Modification of compiled applications and application management using retrievable policies |
US10754842B2 (en) * | 2014-06-13 | 2020-08-25 | International Business Machines Corporation | Preplaying transactions that mix hot and cold data |
US9934008B2 (en) * | 2014-06-18 | 2018-04-03 | Netapp, Inc. | Methods for facilitating persistent storage of in-memory databases and devices thereof |
US10698671B2 (en) | 2015-03-30 | 2020-06-30 | Arxan Technologies, Inc. | Processing, modification, distribution of custom software installation packages |
US11424931B2 (en) | 2016-01-27 | 2022-08-23 | Blackberry Limited | Trusted execution environment |
US10599409B2 (en) | 2016-02-02 | 2020-03-24 | Blackberry Limited | Application lifecycle operation queueing |
US11514186B2 (en) * | 2021-04-14 | 2022-11-29 | Sap Se | Integrated database user privilege management |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04160893A (ja) * | 1990-10-25 | 1992-06-04 | Oki Electric Ind Co Ltd | オブジェクト指向ソフトウェアの局データ・加入者データ管理方法 |
US5404525A (en) * | 1992-09-30 | 1995-04-04 | International Business Machines Corporation | Efficient method router that supports multiple simultaneous object versions |
JPH07200381A (ja) * | 1993-12-28 | 1995-08-04 | Hitachi Ltd | オブジェクト拡張方式 |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6437621A (en) * | 1987-07-20 | 1989-02-08 | Ibm | Updating of program |
US5325531A (en) * | 1989-06-30 | 1994-06-28 | Digital Equipment Corporation | Compiler using clean lines table with entries indicating unchanged text lines for incrementally compiling only changed source text lines |
JPH0833862B2 (ja) * | 1989-10-23 | 1996-03-29 | インターナシヨナル・ビジネス・マシーンズ・コーポレーシヨン | オブジエクト指向コンピユータ・システム |
US5297279A (en) * | 1990-05-30 | 1994-03-22 | Texas Instruments Incorporated | System and method for database management supporting object-oriented programming |
US5295256A (en) * | 1990-12-14 | 1994-03-15 | Racal-Datacom, Inc. | Automatic storage of persistent objects in a relational schema |
US5426747A (en) | 1991-03-22 | 1995-06-20 | Object Design, Inc. | Method and apparatus for virtual memory mapping and transaction management in an object-oriented database system |
US5193180A (en) * | 1991-06-21 | 1993-03-09 | Pure Software Inc. | System for modifying relocatable object code files to monitor accesses to dynamically allocated memory |
US5822590A (en) * | 1991-10-31 | 1998-10-13 | Texas Instruments Incorporated | dbX: a persistent programming language model |
US5568642A (en) * | 1991-12-26 | 1996-10-22 | Institute Of Software Scientifical Constructions | Computer system with easy programming architecture and programming method therefor |
US5535392A (en) * | 1992-06-26 | 1996-07-09 | Digital Equipment Corporation | Using hint generation to cause portions of object files to remain the same |
JPH06103075A (ja) * | 1992-07-06 | 1994-04-15 | Internatl Business Mach Corp <Ibm> | オブジェクト指向適用業務 |
US5359730A (en) * | 1992-12-04 | 1994-10-25 | International Business Machines Corporation | Method of operating a data processing system having a dynamic software update facility |
US5634123A (en) * | 1993-07-08 | 1997-05-27 | Park City Group, Inc. | Data management using nested records and code points |
WO1995003586A1 (en) | 1993-07-21 | 1995-02-02 | Persistence Software, Inc. | Method and apparatus for generation of code for mapping relational data to objects |
WO1995004960A2 (en) | 1993-08-02 | 1995-02-16 | Persistence Software, Inc. | Method and apparatus for managing relational data in an object cache |
US5590269A (en) * | 1994-04-22 | 1996-12-31 | Minnesota Mining & Manufacturing Company | Resource assignment system providing mixed-initiative user interface updates |
US5522077A (en) | 1994-05-19 | 1996-05-28 | Ontos, Inc. | Object oriented network system for allocating ranges of globally unique object identifiers from a server process to client processes which release unused identifiers |
US5542078A (en) | 1994-09-29 | 1996-07-30 | Ontos, Inc. | Object oriented data store integration environment for integration of object oriented databases and non-object oriented data facilities |
US5864864A (en) * | 1995-09-27 | 1999-01-26 | Sun Microsystems, Inc. | Method and apparatus for providing transparent persistent data support to foreign data types |
US6134710A (en) * | 1998-06-26 | 2000-10-17 | International Business Machines Corp. | Adaptive method and system to minimize the effect of long cache misses |
-
1996
- 1996-02-09 US US08/599,055 patent/US6128771A/en not_active Expired - Fee Related
-
1997
- 1997-01-30 SG SG1997000199A patent/SG75111A1/en unknown
- 1997-02-03 EP EP97300667A patent/EP0789300B1/en not_active Expired - Lifetime
- 1997-02-03 DE DE69724855T patent/DE69724855D1/de not_active Expired - Lifetime
- 1997-02-05 CN CNB971010803A patent/CN1146786C/zh not_active Expired - Fee Related
- 1997-02-06 KR KR1019970003651A patent/KR100472807B1/ko not_active IP Right Cessation
- 1997-02-07 JP JP9025450A patent/JPH1063561A/ja active Pending
- 1997-03-27 TW TW086103931A patent/TW317624B/zh active
-
2000
- 2000-07-27 US US09/627,413 patent/US6915510B1/en not_active Expired - Fee Related
-
2008
- 2008-06-06 JP JP2008149726A patent/JP2008262585A/ja active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04160893A (ja) * | 1990-10-25 | 1992-06-04 | Oki Electric Ind Co Ltd | オブジェクト指向ソフトウェアの局データ・加入者データ管理方法 |
US5404525A (en) * | 1992-09-30 | 1995-04-04 | International Business Machines Corporation | Efficient method router that supports multiple simultaneous object versions |
JPH07200381A (ja) * | 1993-12-28 | 1995-08-04 | Hitachi Ltd | オブジェクト拡張方式 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100689368B1 (ko) * | 1999-12-29 | 2007-03-08 | 삼성전자주식회사 | 개인용 컴퓨터에서 데이터 베이스 접속 방법 |
Also Published As
Publication number | Publication date |
---|---|
CN1146786C (zh) | 2004-04-21 |
EP0789300A2 (en) | 1997-08-13 |
US6915510B1 (en) | 2005-07-05 |
EP0789300A3 (en) | 2001-04-11 |
SG75111A1 (en) | 2000-12-19 |
CN1161505A (zh) | 1997-10-08 |
KR970062897A (ko) | 1997-09-12 |
TW317624B (ko) | 1997-10-11 |
JP2008262585A (ja) | 2008-10-30 |
US6128771A (en) | 2000-10-03 |
DE69724855D1 (de) | 2003-10-23 |
JPH1063561A (ja) | 1998-03-06 |
EP0789300B1 (en) | 2003-09-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100472807B1 (ko) | 데이터베이스객체처리명령어들을삽입하기위하여데이터베이스액세스방법들을자동적으로수정하기위한시스템및그방법 | |
US6912520B2 (en) | System and method for providing a persistent object framework for managing persistent objects | |
Cockshot et al. | Persistent object management system | |
US7831771B2 (en) | System and method for managing cachable entities | |
US6243709B1 (en) | Method and apparatus for loading stored procedures in a database corresponding to object-oriented data dependencies | |
US6868425B1 (en) | Versions and workspaces in an object repository | |
Bohannon et al. | The architecture of the Dali main-memory storage manager | |
JPH0997204A (ja) | 分散オブジェクト操作環境において透明性のある不変性を提供する方法および装置 | |
JP2001527243A (ja) | オブジェクト指向アプリケーション内のクラスに対応するリレーショナル・データベース内のインデックスを生成するための方法及び装置 | |
US7451434B1 (en) | Programming with shared objects in a shared memory | |
Schuh et al. | Persistence in E revisited--Implementation experiences | |
Vaughan et al. | Casper: a cached architecture supporting persistence | |
White et al. | QuickStore: a high performance mapped object store | |
EP1040432B1 (en) | Method and apparatus for loading stored procedures in a database corresponding to object-oriented data dependencies | |
JP3628698B2 (ja) | メッセージ配送システム | |
Knasmüller | Adding persistence to the Oberon-System | |
Daynes | Implementation of automated fine‐granularity locking in a persistent programming language | |
Biliris et al. | Object storage management architectures | |
Hosking et al. | Design of an object faulting persistent Smalltalk | |
Cahill et al. | Object models for distributed or persistent programming | |
Knizhnik | FastDB Main Memory Database Management System | |
Liskov et al. | The language-independent interface of the Thor persistent object system | |
US20140331118A1 (en) | Persisting Objects in a Single Data Table | |
Cheung | Lasy schema evolution in object-oriented databases | |
Fernandez et al. | ObServer, a Storage System for Object-oriented Applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20130117 Year of fee payment: 9 |
|
FPAY | Annual fee payment |
Payment date: 20140120 Year of fee payment: 10 |
|
FPAY | Annual fee payment |
Payment date: 20150119 Year of fee payment: 11 |
|
FPAY | Annual fee payment |
Payment date: 20160119 Year of fee payment: 12 |
|
EXPY | Expiration of term |