uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

GAE/Jの使用できないAPI一覧(ブラックリスト)

Google App Engine/Javaで使えるJREAPIのクラス一覧である「JREクラスホワイトリスト(The JRE Class White List)」ってのが公開されています。じゃあ逆に標準Java APIのうち、GAE/J上では何が使えないのか、つまりブラックリストは何なのか,というのをJava 6 APIと比較して調べてみました。「*」はそのパッケージ全体が削除(一つもクラスが含まれていない)、「[*]」は部分削除(パッケージ中のクラスで削除されたものと削除されていないものがある)を表します。

なお、本リストはテキスト的に比較した結果であり、機能的に本当に使えないのか?とかは全く調べてません。このことを含めて正確性などについても無保証ですのでよろしく。

使用できないAPI(ブラックリスト)=Java 6 APIにあってホワイトリストに無いAPI

  • java.applet.*
  • java.awt.*
  • java.beans.Expression
  • java.beans.Statement
  • java.io.Console
  • java.io.FileOutputStream
  • java.io.FileWriter
  • java.lang.Compiler
  • java.lang.ProcessBuilder
  • java.lang.instrument.*
  • java.lang.management.*
  • java.net.[*]
  • java.nio.MappedByteBuffer
  • java.nio.channels.[*]
  • java.rmi.[*](RemoteException以外は削除)
  • java.sql.SQLClientInfoException
  • java.sql.SQLNonTransientConnectionException
  • java.text.spi.*
  • java.util.jar.Pack200 (Pack200形式でのパック*1削除 )
  • java.util.logging.[*](ファイル出力ログ、Socket出力まわり削除)
  • java.util.prefs.*
  • java.util.spi.*
  • javax.activation.*
  • javax.imageio.*
  • javax.jws.*
  • javax.management.*
  • javax.naming.*
  • javax.net.*
  • javax.print.*
  • javax.rmi.*
  • javax.sound.*
  • javax.swing.*
  • javax.tools.*
  • javax.xml.bind.*
  • javax.xml.crypto.*
  • javax.xml.soap.*
  • javax.xml.stream.*
  • javax.xml.transform.stax.StAX*
  • javax.xml.ws.*
  • org.ietf.jgss.*
  • org.omg.*

追加APIJava 6 APIに無いのにホワイトリストにあるAPI)

  • java.beans.EnumPersistenceDelegate (非publicなのでAPIに出てこない)
  • java.lang.AbstractStringBuilder (非publicなのでAPIに出てこない)
  • java.security.spec.Classes (GAE環境にも存在しない)
  • java.security.spec.Exceptions (GAE環境にも存在しない)
  • org.w3c.dom.css.*
  • org.w3c.dom.html.*
  • org.w3c.dom.ranges.*
  • org.w3c.dom.stylesheets.*
  • org.w3c.dom.traversal.*
  • org.w3c.dom.views.*

補足

「追加API」があるってのが妙な話なんですが、調べると以下の内訳です。

  • (1)クラス自体がパッケージプライベートなので、Java 6 APIの方に現れていない(らしい)もの。classes.jar中には存在している。ホワイトリストに載ることの意義は不明。
  • (2)ホワイトリストに載ってるが実際にはGAE環境でもClass.forName()してもでてこないもの
  • (3)org.w3c.dom配下の幾つかのパッケージは、Java SEAPIにはないのですが、Java PluginのドキュメントとしてのCommon DOM APIのとこらにあるものです。

(2)は原因不明ですが、推測するに、Javadocの出力結果をこてこてとツールとかエディタで編集していてセクションタイトルの「Classes, Exceptions」が残ってしまったんですかね。

*1:[http://java.sun.com/javase/ja/6/docs/ja/api/java/util/jar/Pack200.html:title=pack200]って私は知りませんでしたよ。[http://java.sun.com/j2se/1.5.0/ja/docs/ja/tooldocs/share/pack200.html:title=JDKの標準コマンド]にであるんだ。