我正在开发JavaEE应用程序并将其部署在Glassfish 3中。我使用的是Ubuntu 12.04,Eclipse用于EE开发人员,OpenJDK 6 JDK(包openjdk-6-jdk)。到目前为止没问题。
问题在于,在我查找有关使用OpenJDK进行Java EE开发的信息时,我发现OpenJDK只是Java SE,例如here或here。然而,在我的应用程序中,我正在使用javax.*
,并且正在使用。
我已经下载了OpenJDK 6的源代码,我找到了包含很多类的文件夹/jdk/src/share/classes/javax/
,但遗漏了一些重要内容,如javax.servlet
,javax.ejb
或{{1 }}
同样,除了OpenJDK,我没有任何其他JDK,也没有GCJ或Oracle。
我的问题是:这怎么可能? OpenJDK是否支持JavaEE API?可以用它,还是我需要下载并安装Oracle JDK?我在这里不明白?
请注意,除了SDK for EE之外,Oracle列表SDK for SE,所以我认为它们不同,对吧?
亲切的问候
答案 0 :(得分:12)
您的Glassfish服务器是具体的Java EE实现。请注意,OpenJDK是一个具体的Java SE实现。另请注意,每当您从Oracle站点download Java EE时,基本上所有的内容都是Glassfish以及一堆文档和示例。
答案 1 :(得分:2)
事实是J2EE没有指定JVM,Glassfish4和5都检查Oracle JVM,并且不与其他JVM一起运行。
请注意,OpenJDK根本不适用于Glassfish。 Glassfish正在专门寻找OracleJDK。
如果您尝试使用OpenJDK 12.0在MacOS上启动Glassfish,则会发生以下情况:
bin/asadmin start-domain
Exception in thread "main" java.lang.NullPointerException
at com.sun.enterprise.module.common_impl.AbstractModulesRegistryImpl.initializeServiceLocator(AbstractModulesRegistryImpl.java:152)
at com.sun.enterprise.module.common_impl.AbstractModulesRegistryImpl.newServiceLocator(AbstractModulesRegistryImpl.java:144)
at com.sun.enterprise.module.common_impl.AbstractModulesRegistryImpl.createServiceLocator(AbstractModulesRegistryImpl.java:218)
at com.sun.enterprise.module.common_impl.AbstractModulesRegistryImpl.createServiceLocator(AbstractModulesRegistryImpl.java:224)
at com.sun.enterprise.module.single.StaticModulesRegistry.createServiceLocator(StaticModulesRegistry.java:88)
at com.sun.enterprise.admin.cli.CLIContainer.getServiceLocator(CLIContainer.java:217)
at com.sun.enterprise.admin.cli.CLIContainer.getLocalCommand(CLIContainer.java:255)
at com.sun.enterprise.admin.cli.CLICommand.getCommand(CLICommand.java:231)
at com.sun.enterprise.admin.cli.AdminMain.executeCommand(AdminMain.java:371)
at com.sun.enterprise.admin.cli.AdminMain.doMain(AdminMain.java:306)
at org.glassfish.admin.cli.AsadminMain.main(AsadminMain.java:57)