Lý do mà bạn không được phép từ truy cập hệ thống tập tin trong EJB là bạn đã không kiểm soát như thế nào ứng dụng của bạn chạy trong vòng một (Java EE) container. Ví dụ, ứng dụng của bạn có thể được chạy trên một cụm máy chủ, trong trường hợp đó, việc lưu một số đối tượng vào một thư mục trên một máy chủ có thể sẽ ít được sử dụng. (Tất nhiên, bạn có thể có một hệ thống tập tin mạng, do đó có thể không áp dụng giới hạn này).
Một lựa chọn có thể là sử dụng các JNDI thực hiện mà đi kèm với bạn container. Bạn có thể sẽ có thể tiết kiệm một byte[]
mảng thô tại một số vị trí JNDI, vì vậy bạn luôn có thể tiết kiệm xuống dưới hình thức tuần tự của đối tượng:
ByteArrayOutputStream baos= new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(myObj);
//Now save into JNDI
new InitialContext().bind("path/to/myobject", baos.toByteArray());
này có thể được nhìn lên sau đó và lại chuyển đổi thành đối tượng của bạn:
byte[] bs = (byte[]) new InitialContext().lookup("path/to/myobject");
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bs));
MyObj myObj = (MyObj) ois.readObject();
Hoặc bạn có thể sử dụng java.beans
dai dẳng XML (tức XMLDecoder
, XMLEncoder
) để mã hóa Ví dụ bạn như là một chuỗi XML một lưu đó vào JNDI.
Nguồn
2009-08-31 14:24:59
Bạn không cần phải có BLOB trong cơ sở dữ liệu. SQL Server 2008 hỗ trợ lưu trữ filestream mà về cơ bản đổ tập tin vào một thư mục trên máy chủ DB nhưng để lộ nó thông qua cơ sở dữ liệu. http://blogs.msdn.com/rdoherty/archive/2007/10/12/getting-traction-with-sql-server-2008-filestream.aspx – pjp