2009-01-16 37 views
15

Tùy chọn trọng lượng nhẹ nào phải tồn tại đối tượng Java?Tùy chọn trọng lượng nhẹ nào phải tồn tại đối tượng Java

Tôi đang tìm giải pháp dễ nhất có thể. Tôi không muốn bất cứ điều gì đáng kinh ngạc chỉ là một cái gì đó đơn giản mà làm việc với các đối tượng đơn giản hợp lý (một số bộ sưu tập, các mối quan hệ và thừa kế đơn giản) và không mang lại quá phức tạp rõ ràng (nếu có) cho codebase hiện có.

Các tùy chọn mà tôi biết bao gồm Hibernate và các khung công tác như EMF nhưng chúng âm thanh (và đã trải qua quá phức tạp và tốn thời gian). Tôi muốn một cái gì đó ra khỏi hộp, tốt hơn là định hướng tập tin theo định hướng dababase, mà tôi chỉ có thể đặt trên đầu trang của các đối tượng java cũ đồng bằng của tôi.

Đây là câu hỏi về newbie, cảm ơn trước cho bất kỳ hướng dẫn làm rõ về hướng dẫn ngữ cảnh nào.

Trả lời

5

ObjectOutputStream và ObjectInputStream có thể thực hiện việc này. Nó được xây dựng trong Java và cho phép bạn sắp xếp/deserialize các đối tượng khá dễ dàng.

Điều xấu về những điều này là nếu bạn thay đổi các đối tượng của mình, bạn không thể nhập các đối tượng cũ hiện có. Bạn sẽ phải nghĩ ra một cách để tương thích với các đối tượng hiện có mà có thể đã được lưu trên máy tính của người dùng, chẳng hạn như thêm số phiên bản vào các lớp của bạn và tạo khả năng chuyển đổi các đối tượng cũ sang các đối tượng mới.

Thông tin thêm ở đây:

EDIT: Bạn cũng có thể xem xét thêm các thuộc tính sau cho tất cả các lớp học của bạn ngay lập tức. Điều này có thể cho phép bạn sau đó thêm các thuộc tính vào các lớp và vẫn có thể tải các tệp Object cũ. Trong RMI đất này hoạt động, nhưng tôi không chắc chắn về các tập tin. Đừng bao giờ loại bỏ các thuộc tính.

static final long serialVersionUID = 1L; 
9

db4o là một cơ sở dữ liệu đối tượng nên không thiết lập lược đồ và nó thích nghi tốt với những thay đổi trong cấu trúc đối tượng theo thời gian.

+1

Tôi thực sự thích db4o, rất đẹp và đơn giản. –

+0

Thật không may 'db4o đã chết http://supportservices.actian.com/versant/default.html – FoxyBOA

2

Một cách tiếp cận đơn giản là serialize (như trong Serializable) đối tượng của bạn vào đĩa.

http://www.devx.com/Java/Article/9931/1954

+0

Vấn đề duy nhất với serialization là nếu bạn thay đổi objcet của bạn ở tất cả nó rơi phẳng trên khuôn mặt của nó. – Milhous

+0

Nếu bạn thêm serialVersionUID vào các lớp của bạn, bạn có thể thêm ít nhất các thuộc tính. Bạn vẫn không thể xóa thuộc tính. Sử dụng công cụ nối tiếp đi kèm với java để tìm hiểu những gì serialVersionUID lớp học của bạn hiện đang có. –

0

tôi phải nói đường cong học tập ban đầu cho Hibernate là tương đối nông. Bạn sẽ có thể có được một hệ thống thử nghiệm và chạy trong vòng chưa đầy một ngày. Đó là chỉ khi bạn muốn các tính năng nâng cao hơn, nơi nó bắt đầu để có được dốc hơn. Tôi muốn giới thiệu bạn chắc chắn có một cái nhìn, tôi có nghĩa là những gì một ngày nếu bạn kết thúc không chọn nó?

Có nói rằng, bạn đã xem xét việc chỉ cần sắp xếp các đối tượng của bạn trực tiếp vào đĩa nếu bạn chỉ muốn một cái gì đó nhanh chóng n bẩn?

+1

Rất nhiều thứ Hibernate là, nhưng trọng lượng nhẹ không phải là một trong số đó. Và như xa như hộp kiên trì đi, bạn cần phải tạo một lược đồ cơ sở dữ liệu trước khi bắt đầu. –

+0

Ngoại trừ Hibernate làm điều này cho bạn, do đó bạn thậm chí không cần phải suy nghĩ về nó. Nếu bạn muốn nó được, Hibernate * có thể * được nhẹ – tddmonkey

+0

Điều tồi tệ nhất bạn có thể làm cho các ứng dụng tốc độ không phải là để suy nghĩ về những gì hibernate không ... – mibutec

4

Hãy thử độ bền XML đơn giản http://simple.sourceforge.net. Nó thực sự đơn giản và không yêu cầu cấu hình. Chỉ cần lấy các POJO hiện có của bạn và chú thích chúng, sau đó bạn có thể đọc và ghi chúng vào một tệp.Biểu đồ đối tượng chu kỳ được hỗ trợ cũng như tất cả các bộ sưu tập Java. Nó có thể được sử dụng như vậy.

Serializer serializer = new Persister(); 
MyObject object = serializer.read(MyObject.class, new File("file.xml)); 

và viết chỉ là dễ dàng

serializer.write(myInstance, new File("file.xml")); 

Đây là một cách tiếp cận rất nhẹ, không dependancies khác so với tiêu chuẩn Java 1.5. So sánh với các đối tượng khác với các công nghệ XML như JAXB, XStream, Castor, phụ thuộc vào toàn bộ một loạt các dự án khác Simple XML rất nhẹ và hiệu quả bộ nhớ.

6

Nếu bạn đang xem xét điều gì đó đơn giản, bạn cũng có thể muốn dữ liệu ở định dạng bạn có thể đọc (không phải tệp nhị phân hoặc cơ sở dữ liệu). Nếu đúng như vậy, bạn nên xem JAXB (Java's XML Binding) là một phần của Java 6 và mới hơn. Có những công nghệ khác có thể thực hiện điều này tốt hơn như XML Beans nhưng được tích hợp sẵn.

Hãy xem trang này từ API của Java. Nó là khá thẳng về phía trước để tuần tự hóa và deserializing các đối tượng Java.

http://java.sun.com/javase/6/docs/api/javax/xml/bind/JAXBContext.html

Về cơ bản bạn sử dụng như sau:

JAXBContext jc = JAXBContext.newInstance("com.acme.foo"); 

    // unmarshal from foo.xml 
    Unmarshaller u = jc.createUnmarshaller(); 
    FooObject fooObj = (FooObject)u.unmarshal(new File("foo.xml")); 

    // marshal to System.out 
    Marshaller m = jc.createMarshaller(); 
    m.marshal(fooObj, System.out); 

Chỉ cần chắc chắn FooObject của bạn có chú thích @XmlRootElement. Các thuộc tính bean Java được tự động diễn giải nhưng bạn có thể sử dụng các chú thích khác để kiểm soát cách XML trông và mô hình hóa các đối tượng phức tạp hơn.

+0

Khá trơn. Tôi không biết về điều này. –

+0

Bạn đã xem Xstream chưa. Nó đơn giản hơn một chút. – Milhous

1

Tùy chọn đơn giản nhất mà tôi biết đang sử dụng Xstream để tạo tệp xml ra khỏi BẤT CỨ java obect.

3

Bạn có thể thử XStream là thư viện nguồn mở. Tất cả những gì bạn làm là biến POJO của bạn thành XML mà sau đó bạn có thể lưu vào đĩa. Nó rất dễ sử dụng và chỉ yêu cầu một vài dòng mã để sử dụng.

0

Tôi đã sử dụng PersistentObject rộng rãi trong mã sản xuất và nó đáp ứng tốt nhu cầu của tôi.

Các vấn đề liên quan