我有:
List<DataRow> doRead(String keyword){
open FileChannel if not already opened
...
MappedByteBuffer map = fileChannel.map(.... some Bytes block[start, blockLength] )
...
map.get(....);
...
}
void doUpdate(String newString){
open FileChannel if not already opened
...
MappedByteBuffer map = fileChannel.map(.... some Bytes block[start, blockLength] )
...
map.put(....);
...
}
问题:
比方说,2个用户同时发送请求:
第一个用户(会话1)调用sessionBean.abc{applicationScopedBean.doRead(keyword)}
第二个用户(会话2)调用sessionBean.xyz{applicationScopedBean.doUpdate(newString)}
现在可以说两种方法doRead()
&amp; doUpdate()
访问相同字节块,然后
如果是2:
这个想法有意义吗?或者也许Application Server的线程池确保在这种情况下的某种安全性?
(只是一个想法)@Asynchronous Annotation在这里有用吗? (我使用Tomcat 8,但如果需要,我可以切换到TomEE或JBoss等。)
我标记了JSF,因为我不确定应用服务器的线程池如何处理用户请求(从sessionScopedBean访问applicationScoped bean)。
注意:这种方法背后的想法是我正在尝试实现类似基于Java内存映射文件的数据库, 我尝试自己完成JSF应用程序中的所有逻辑,而不是通过套接字或其他人与“独立”应用程序进行通信。所以我决定先用这种方式尝试,如果失败我会重新考虑它。
非常感谢您的帮助,
由于