background image

者/使用者任务的本性是允许并发处理的。

 

  大多数项目不是属于 J2EE 

 

应用程序就是属于 J2SE 

 

应用程序。不过,有一些 J2EE 技

 

术可以存在于 J2EE 

 

容器之外,并且有些 J2SE 应用程序可以对它们加以利用。本月,

Brian Goetz 

 

分析如何在 J2SE 

 

应用程序中使用某些 J2EE 服务。在大多数情况下,Java 应

 

用程序要么是 J2EE 

 

应用程序、要么是 J2SE 应用程序,并且在这一点上是泾渭分明的 。

J2EE 

 

应用程序需要 J2EE 

 

容器的服务,容器要实现一长串的 J2EE API

 

,包括 Enterprise 

JavaBean (EJB)、JTA、JNDI、JMS、JCA 

 

和 JMX。J2EE API 设计为协同工作;毕竟,J2EE 设计

是从多年来数百人开发企业应用程序的经验中提取出的公共需求。像所有框架一样,J2EE 
API 

的主要目的是 不重新发明轮子 。

 

  有一些 API 

 

属于 J2EE 

 

规范的一部分,但是可以很容易地在 J2SE 应用程序中使用,

 

如 JDBC、JSP   

和 servlet

 

,但是对于大多数 J2EE API,J2EE 是一个要么是要么不是的命

题??

 

大多数 J2EE API 

 

需要全功能的 J2EE 容器。不过,有一些服务器应用程序开发为 

J2SE 

 

应用程序而非 J2EE 应用程序,这通常都有很好的理由。为什么这些应用程序的开发

人员必须重新发明轮子呢?J2EE 

 

中是否有部分内容可以容易地被 J2SE 应用程序借用来提

供同样的优点呢?

 

什么组件可以同时用于 J2EE   

和 J2SE 应用程序的组件呢?

 

  在 JBoss 

 

发行版的 jnpserver.jar JAR 

 

文件中可以找到 JNP JNDI 服务器,它还依赖于 

log4j 

 

日志引擎。要使用它,必须配置 log4j

 

,创建相应的 jndi.properties 文件(参见清单 

1)

 

,并安排通过调用同一 JVM 

 

或者另一个 JVM 

 

中的 org.jnp.server.Main 的主入口点来启

 

动服务器。访问 JNDI 

 

名称空间的类文件在 JBoss 

 

发行版的 jnpclient.jar JAR 文件中。

 

  清单 1. JNPServer   

的 jndi.properties

  java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
  java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
  # Uncomment this line only if the JNDI server is to run in another JVM;
  # otherwise, local JNDI requests will go over RMI
  #java.naming.provider.url=localhost

  Java 管理扩展(JMX)
  Java 管理扩展(Java Management Extensions,JMX)是一种管理组件和服务的生命周期
的机制。JBoss 

 

大量使用 JMX??JBoss 

 

中的几乎所有组件都作为 JMX 服务提供。结果就是

很容易配置一个只包括所需服务的应用程序。对于每一个组件服务,创建一个名为 
MBean (

 

托管的 bean)对象,它包含生命周期方法(start()   

和 stop())

 

和公开属性的 getter 和 

setter

 

。清单 2 

 

显示了描述一个简单 Web 

 

容器服务的 MBean 接口:

 

  清单 2. 

 

简单 Web 

 

容器服务的 MBean 接口

  public interface WebServerMBean {
  // Lifecycle methods

  void create() throws Exception;
  void start() throws Exception;
  void stop();
  void destroy();
  // Getter and setter for listener-port property