VFSのパスがOSで違った
JBossEAP上のアプリケーションでファイルを取得したいときとかに、VFSというのを使ってファイルを取得することができます。
試しに下のコードをServletで読んで、リストされるパスを見てみます。
@WebServlet(urlPatterns = "/resourcedump") public class ResourcePathDumperServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Inject private Logger LOG; @Override protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { Enumeration<URL> resourceURLs = Thread.currentThread() .getContextClassLoader().getResources("."); res.getWriter().write("<html><body><h1>Resource Paths</h1><ul>"); for (URL url : Collections.list(resourceURLs)) { String path = url.toString(); LOG.info(path); res.getWriter().write("<li>" + path + "</li>"); } res.getWriter().write("</ul></body></html>"); } }
Windows 8.1+EAP 6.2+OracleJDK 1.7.0_45での結果
こうなりました。ちなみに${JBOSS_HOME}はEAPのホームになるところで、通常はインストールしたディレクトリです。${jboss.server.home.dir}というシステムプロパティで読むことができる場所です。
- file:/${JBOSS_HOME}/modules/system/layers/base/sun/jdk/main/service-loader-resources/
- vfs:/${JBOSS_HOME}/standalone/deployments/chanko.war/WEB-INF/classes/
VFSのディレクトリはdeploymentsの下になってます。
なぜ違うのか?
調べてません。すいません。
とにかく、環境によって異なるので、VFSでフルパス指定するような時には気を付けましょうということでした。