7.12. 迁移 Jakarta Enterprise Beans 客户端代码
本节讨论 JBoss EAP 7.0 中的 Jakarta Enterprise Beans 客户端的更改。它还解释了如何修改客户端代码,以便在 JBoss EAP 7.0 中使用新的默认远程端口和连接器。此外,它描述了 JBoss EAP 7.1 和 JBoss EAP 7.0 中引入的所需的 JBoss EJB 客户端更改。
从 JBoss EAP 7.0 开始,不支持企业实体 Bean。如需更多信息,请参阅将 实体 Bean 迁移到 Jakarta Persistence。
7.12.1. Jakarta Enterprise Beans 在 JBoss EAP 7 中的客户端变化
从 JBoss EAP 7 开始,默认的远程连接器和端口已更改。有关此更改的详情,请参阅更新 远程 URL 连接器和端口。
如果您使用 JBoss 服务器迁移工具迁移服务器配置,旧的设置会被保留,您不需要在此处进行详细更改。但是,如果您使用新的 JBoss EAP 8.0 默认配置,您必须进行以下更改。
7.12.1.1. 更新默认远程连接端口
在 jboss-ejb-client.properties
文件中,将远程连接端口值从 4447
更改为 8080。
以下是上一个和当前版本中的 jboss-ejb-client.properties
文件的示例:
示例:JBoss EAP 6 jboss-ejb-client.properties
文件
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false remote.connections=default remote.connection.default.host=localhost remote.connection.default.port=4447 remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
示例:JBoss EAP 8 jboss-ejb-client.properties
文件
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false remote.connections=default remote.connection.default.host=localhost remote.connection.default.port=8080 remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
7.12.1.2. 更新默认连接器
如果您使用新的 JBoss EAP 7 配置,则默认连接器已从 remote
改为 http-remoting
。此更改会影响使用来自 JBoss EAP 的一个库的客户端连接到不同发行版中的服务器。
-
如果客户端应用程序使用 JBoss EAP 6 中的 Jakarta Enterprise Beans 客户端库并希望连接到 JBoss EAP 7 服务器,则必须将服务器配置为在
8080
以外的端口上公开远程
连接器。然后,客户端必须使用新配置的连接器进行连接。 使用 JBoss EAP 7 中的 Jakarta Enterprise Beans 客户端库并想连接到 JBoss EAP 6 服务器的客户端应用程序必须意识到服务器实例不使用
http-remoting
连接器,而是使用远程
连接器。这可以通过定义新的客户端侧连接属性来实现。示例:
远程连接
属性remote.connection.default.protocol=remote
7.12.2. 迁移远程命名客户端代码
如果您使用新的默认 JBoss EAP 7 配置运行,您必须修改客户端代码以使用新的默认远程端口和连接器。
以下是如何在 JBoss EAP 6 中的客户端代码中指定远程命名属性的示例。
java.naming.factory.initial=org.jboss.naming.remote.client.InitialContextFactory java.naming.provider.url=remote://localhost:4447
以下是如何在 JBoss EAP 7 中的客户端代码中指定远程命名属性的示例。
java.naming.factory.initial=org.wildfly.naming.client.WildFlyInitialContextFactory java.naming.provider.url=http-remoting://localhost:8080
7.12.3. JBoss EAP 7.1 中引入的其他 JBoss EJB 客户端更改
JBoss EAP 7.0 包含在 JBoss Enterprise Java Beans 客户端 2.1.4 中,JBoss EAP 7.1 及更高版本包含在 JBoss Enterprise Java Beans 客户端 4.0.x 中,其中包括很多对 API 的更改。
从 JBoss EAP 7 开始,不支持企业实体 Bean。有关如何将实体 Bean 迁移到 Jakarta Persistence 的详情,请参考 将实体 Beans 迁移到 Jakarta Persistence。
org.ejb.client.ejbClientInvocationContext
类添加以下新方法:方法 类型 描述 isBlockingCaller()
布尔值
确定这个调用当前是否阻塞了调用线程。
isClientAsync()
布尔值
确定方法是否标记为客户端同步,这意味着调用必须是异步的,无论服务器端方法是否为异步方法。
isIdempotent()
布尔值
确定方法是否标记为 idempotent,即方法多次被调用,且没有额外的效果。
setBlockingCaller(boolean)
void
确定这个调用目前阻止调用线程。
setLocator(EJBLocator<T>)
<T> void
为调用目标设置 locator。
org.ejb.client.ejbLocator
类添加了以下新方法:方法 类型 描述 asStateful()
StatefulEJBLocator<T>
将此 locator 返回为有状态的 locator(如果是)。
asStateless()
StatelessEJBLocator<T>
将此 locator 返回为无状态的 locator(如果是)。
isEntity()
布尔值
确定这是否是实体 locator。
isHome()
布尔值
确定这是否是家 locator。
isStateful()
布尔值
确定这是否是状态 locator。
isStateless()
布尔值
确定这是否是无状态 locator。
withNewAffinity(Affinity)
抽象 EJBLocator<T>
创建这个 locator 的一个副本,但具有新的给定关联性。
引入了一个新的 org.ejb.client.ejbClientPermission 类,它是 java.security.Permission 的子类,用于控制对特权 Enterprise Java Beans 操作的访问。它提供以下构造器:
-
EJBClientPermission (String name)
-
EJBClientPermission (String name, String action)
-
它提供以下方法:
方法 类型 描述 equals(EJBClientPermission obj)
布尔值
检查两个
EJBClientPermission
对象是否相等。equals(Object obj)
布尔值
检查两个
Permission
对象是否相等。equals (Permission obj)
布尔值
检查两个
Permission
对象是否相等。getActions()
字符串
以字符串形式返回操作。
hashcode()
int
返回此
Permission
对象的散列代码值。means (EJBClientPermission permissions)
布尔值
检查指定权限的行为是否由
EJBClientPermission
对象的行为决定。implies (Permission permissions)
布尔值
检查指定权限的操作 是否由这个
Permission
对象的操作表示。引入了一个新的
org.ejb.client.ejbMethodLocator
类,以查找特定的 Enterprise Java Beans 方法。它提供以下构造器:-
EJBMethodLocator (String methodName, String… parameterTypeNames)
-
它提供以下方法:
方法 类型 描述 equals (EJBMethodLocator other)
布尔值
确定此对象是否等于另一个对象。
equals (Object other)
布尔值
确定此对象是否等于另一个对象。
forMethod (Method method)
静态 EJBMethodLocator
获取给定反映方法的 locator。
getMethodName()
字符串
获取方法名称。
getParameterCount()
int
获取参数数。
getParameterTypeName(int index)
字符串
在给定索引中获取参数名称。
hashCode()
int
获取哈希代码。
在故障情况下,引入了一个新的
org.jboss.ejb.client.ejbReceiverInvocationContext.ResultProducer.Failed
类。它提供以下构造器:-
failed (Exception cause)
-
它提供以下方法:
方法 类型 描述 discardResult()
void
丢弃结果,表示不会使用它。
getResult()
对象
获取结果。
引入了一个新的
org.jboss.ejb.client.ejbReceiverInvocationContext.ResultProducer.Immediate
类来获取即时结果。它提供以下构造器:-
failed (Exception cause)
-
它提供以下方法:
方法 类型 描述 discardResult()
void
丢弃结果,表示不会使用它。
getResult()
对象
获取结果。
-
为 URI 关联性规格引入了一个新的
org.jboss.ejb.client.URIAffinity
类,它是org.jboss.ejb.client.Affinity
的子类。它使用Affinity.forUri (URI)
创建。 它提供以下方法:
方法 类型 描述 equals (Affinity other)
布尔值
指明另一个对象是否等于这个对象。
equals (Object other)
布尔值
指明另一个对象是否等于这个对象。
equals (URIAffinity other)
布尔值
指明另一个对象是否等于这个对象。
getURI()
URI
获取关联的 URI。
hashCode()
int
获取哈希代码。
toString()
字符串
返回对象的字符串表示。
org.jboss.ejb.client.ejbMetaData
Impl 类弃用以下方法:-
toAbstractEJBMetaData()
-
EJBMetaDataImpl(AbstractEJBMetaData<?,?>)
-