者/使用者任务的本性是允许并发处理的。
大多数项目不是属于 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