Причина, по которой вам запрещено получать доступ к файловой системе в EJB, заключается в том, что вы не контролируете, как ваше приложение работает в (Java EE) контейнере . Например, ваше приложение может быть запущено на кластере серверов, и в этом случае сохранение какого-либо объекта в каталоге на одном сервере может оказаться бесполезным. (Конечно, у вас может быть сетевая файловая система, поэтому ограничение может не применяться).
Один из вариантов: использовать реализацию JNDI , которая поставляется с Контейнером . Скорее всего, вы сможете сохранить необработанный массив byte[]
в каком-то месте JNDI, чтобы вы всегда могли сохранить сериализованную форму объекта:
ByteArrayOutputStream baos= new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(myObj);
//Now save into JNDI
new InitialContext().bind("path/to/myobject", baos.toByteArray());
Это можно посмотреть позже и преобразовать в ваш объект:
byte[] bs = (byte[]) new InitialContext().lookup("path/to/myobject");
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bs));
MyObj myObj = (MyObj) ois.readObject();
В качестве альтернативы вы можете использовать java.beans
постоянный XML (т.е. XMLDecoder
, XMLEncoder
) для кодирования вашего экземпляра в виде строки XML и сохранения его в JNDI.