NetBeans6のGlassfishコンソール
どうも、無用に改行が入るみたいだ。
long start = System.currentTimeMillis();
...
System.err.printf
("Elapsed %d ms.%n",
System.currentTimeMillis() - start);
とすると、
Elapsed 1 ms.
みたいになる。ためしに、
System.err.print("Hello");
System.err.print("World");
とすると、
Hello World
あぁ、やっぱり改行が入りますな。
RMI
確か、最近はrmicいらなくなったんだよねってことで試すも、Stubが見つからないというエラーで悩む。と思ったら、こんなところに書いてあった。
The static method UnicastRemoteObject.exportObject(Remote) is declared to return java.rmi.server.RemoteStub and therefore cannot be used to export a remote object to use a dynamically generated stub class for its stub. An instance of a dynamically generated stub class is a java.lang.reflect.Proxy instance which is not assignable to RemoteStub.
Stubをダイナミックに作りたい時は、exportObject(Remote)じゃだめよってことらしい。で、正解はexportObject(Remote, 0)のようだ。そういうことは、ちゃんとAPI仕様書に書いておいて欲しいなぁ。
Servlet復習
う〜む、NetBeans 6でサーブレット作ると、雛形ではHttpResponse.getWriter()でとったHttpResponseを最後にclose()するんだけど、これってclose()するもんだっけ。
PrintWriter out = response.getWriter();
try {
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet HelloServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet HelloServlet at " + request.getContextPath () + "</h1>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
というか、あれだ、API仕様書に、どうすべきか明確に書いてないのが悪いんだよな。「flush()するとコミットされますよ」としか書いてない。でも裏を読めばclose()はいらないともとれるか。なんとなくgetXXX()でとったものを、close()するのは抵抗あるんだけど。逆にopenXXX()でとったものはclose()が必要に感じる。
P.S. と思ったけど、java.sql.Connection()は、getConnection()したものをclose()するか。ストリーム系も、基本的にnewしたものをclose()だし、Javaだと、むしろopen() - close()ってパターンは少ないかも。





