hatenob

プログラムって分からないことだらけ

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の下になってます。

CentOS 6.5+EAP 6.2+OpenJDK1.7.0_45での結果

VFSのディレクトリがWindowsの時と異なりました。

  • file:/${JBOSS_HOME}/modules/system/layers/base/sun/jdk/main/service-loader-resources/
  • vfs:/content/chanko.war/WEB-INF/classes/

なぜ違うのか?

調べてません。すいません。
とにかく、環境によって異なるので、VFSでフルパス指定するような時には気を付けましょうということでした。