5.12. 迁移 Jakarta Enterprise Beans 客户端代码
JBoss EAP 7 不支持企业实体 Bean。有关如何将实体 Bean 迁移到 Jakarta Persistence 的信息,请参阅将 实体 Beans 迁移到 Jakarta Persistence。
5.12.1. Jakarta Enterprise Beans 在 JBoss EAP 7 中的客户端变化 复制链接链接已复制到粘贴板!
JBoss EAP 7 中更改了默认远程连接器和端口。有关此更改的详情,请参阅更新远程 URL Connector 和端口。
如果您使用 migrate 操作来迁移服务器配置,则会保留旧的设置,您不需要在此处进行更改。但是,如果您使用新的 JBoss EAP 7 默认配置,您必须进行以下更改:
5.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
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 7 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
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
5.12.1.2. 更新默认连接器 复制链接链接已复制到粘贴板!
如果您使用新的 JBoss EAP 7 配置,默认的连接器已从 远程 改为 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
remote.connection.default.protocol=remoteCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.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
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
java.naming.factory.initial=org.wildfly.naming.client.WildFlyInitialContextFactory
java.naming.provider.url=http-remoting://localhost:8080
5.12.3. JBoss EAP 7.1 中引入的其他 JBoss EJB 客户端更改 复制链接链接已复制到粘贴板!
虽然 JBoss EAP 7.0 由 JBoss EJB 客户端 2.1.4 提供,但 JBoss EAP 7.1 及更新版本随 JBoss EJB 客户端 4.0.x 一起提供,但包括了对 API 的一些更改。
JBoss EAP 7 不支持企业实体 Bean。有关如何将实体 Bean 迁移到 Jakarta Persistence 的信息,请参阅将 实体 Beans 迁移到 Jakarta Persistence。
org.ejb.client.ejbClientInvocationContext类已添加以下新方法:Expand 方法 类型 描述 isBlockingCaller()布尔值
确定此调用当前是否阻止调用线程。
isClientAsync()布尔值
确定方法是否标记为客户端,这意味着无论服务器端的方法是否是异步的,调用也应该是异步的。
isIdempotent()布尔值
确定该方法是否标记为 idempotent,这意味着可以多次调用方法而不产生额外的效果。
setBlockingCaller(boolean)void
建立此调用当前是否阻止调用线程。
setLocator(EJBLocator<T>)<T> void为调用目标设置 locator。
org.ejb.client.ejbLocator类添加了以下新方法:Expand 方法 类型 描述 asStateful()StatefulEJBLocator<T>将此 locator 返回为有状态的 locator(如果是)。
asStateless()StatelessEJBLocator<T>将此 locator 返回为无状态的 locator(如果是)。
isEntity()布尔值
确定这是否是实体 locator。
isHome()布尔值
确定这是否是家 locator。
isStateful()布尔值
确定这是否是状态 locator。
isStateless()布尔值
确定这是否是无状态 locator。
withNewAffinity(Affinity)abstract EJBLocator<T>创建这个 locator 的一个副本,但具有新的给定关联性。
引入了一个新的
org.ejb.client.ejbClientPermission类,它是java.security.Permission的子类,用于控制对特权 EJB 操作的访问。它提供以下构造器:-
EJBClientPermission(String name) -
EJBClientPermission(字符串名称,字符串操作)
-
它提供以下方法:
Expand 方法 类型 描述 equals(EJBClientPermission obj)布尔值
检查两个
EJBClientPermission对象是否相等。equals(Object obj)布尔值
检查两个
Permission对象是否相等。等于(权限 obj)布尔值
检查两个
Permission对象是否相等。getActions()字符串
以字符串形式返回操作。
hashcode()int
返回此
Permission对象的散列代码值。表示(EJBClientPermission)布尔值
检查指定权限的行为是否由
EJBClientPermission对象的行为决定。表示(权限)布尔值
此
Permission对象的操作是否 暗示 了指定权限的操作。引进了一个新的
org.ejb.client.ejbMethodLocator类,以查找特定的 EJB 方法。它提供以下构造器:-
EJBMethodLocator(String methodName, String… parameterTypeNames)
-
它提供以下方法:
Expand 方法 类型 描述 等于(EJBMethodLocator 其他)布尔值
确定此对象是否等于另一个对象。
等于(其他对象)布尔值
确定此对象是否等于另一个对象。
forMethod(Method 方法)静态 EJBMethodLocator获取给定反射方法的方法定位器。
getMethodName()字符串
获取方法名称。
getParameterCount()int
获取参数数。
getParameterTypeName(int index)字符串
获取给定索引中的参数名称。
hashCode()int
获取哈希代码。
在故障情况下,引入了一个新的
org.jboss.ejb.client.ejbReceiverInvocationContext.ResultProducer.Failed类。它提供以下构造器:-
failed(Exception 原因)
-
它提供以下方法:
Expand 方法 类型 描述 discardResult()void
丢弃结果,表示将不会使用。
getResult()对象获取结果。
引进了一个新的
org.jboss.ejb.client.ejbReceiverInvocationContext.ResultProducer.Immediate类来获取即时结果。它提供以下构造器:-
failed(Exception 原因)
-
它提供以下方法:
Expand 方法 类型 描述 discardResult()void
丢弃结果,表示将不会使用。
getResult()对象获取结果。
-
针对 URI 关联性规格引入了一个新的
org.jboss.ejb.client.URIAffinity类,它是org.jboss.ejb.client.Affinity的子类。它使用Affinity.forUri(URI)创建。 它提供以下方法:
Expand 方法 类型 描述 等于(关联性其他)布尔值
指明另一个对象是否等于这个对象。
等于(其他对象)布尔值
指明另一个对象是否等于这个对象。
等于(URIAffinity 其他)布尔值
指明另一个对象是否等于这个对象。
getURI()URI
获取关联的 URI。
hashCode()int
获取哈希代码。
toString()字符串
返回对象的字符串表示。
org.jboss.ejb.client.ejbMetaDataImpl类已弃用:-
toAbstractEJBMetaData() -
EJBMetaDataImpl(AbstractEJBMetaData<?,?>)
-
5.12.4. JBoss EAP 7 所需的 EJB 客户端更改 复制链接链接已复制到粘贴板!
在 JBoss EAP 7.2 中,将 org.apache.santuario.xmlsec 模块从 2.0.8 升级到 2.1.1 会导致对 PicketLinkSTS 中的 remoting 进行回归。作为以下运行时例外,问题清单本身:
java.lang.IllegalArgumentException: ELY05131: Invalid ASCII control "0xA"
java.lang.IllegalArgumentException: ELY05131: Invalid ASCII control "0xA"
这是因为断言中生成的 SignatureValue 中的格式化更改导致。在以前的版本中,生成的值类似如下:
<dsig:SignatureValue xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">cUNpFJIZlLYrBDZtQSTDrq2K6PbnAHyg2qbx/D5FuB4XMjdQ5oxQjkMejLyelnA7s4GFusoLhahlqlTOT8UrOyxrR4yYAmJ/e5s+f4gys926+tbiraT/3/wG8wM/Lvcjvk5Ap69zODuRYpypsWfA4jrI7TTBXVPGy8g4KUdnFviUiTuFTc2Ghgxp53AmUuLis/THyP28jE7+28//q8bi/bQrFwHC6tWX67+NK1duFCOcQ6IPIKeVrePZz55Ivgl+WWdkF6uYCz5IdMzurhzmeQ3K8DAMIxz/MG67VWJIOnuGNWF7nmdye5zd9AFcRsr1XadvZJCbGNfuc89AL5inCg==</dsig:SignatureValue>
<dsig:SignatureValue xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">cUNpFJIZlLYrBDZtQSTDrq2K6PbnAHyg2qbx/D5FuB4XMjdQ5oxQjkMejLyelnA7s4GFusoLhahlqlTOT8UrOyxrR4yYAmJ/e5s+f4gys926+tbiraT/3/wG8wM/Lvcjvk5Ap69zODuRYpypsWfA4jrI7TTBXVPGy8g4KUdnFviUiTuFTc2Ghgxp53AmUuLis/THyP28jE7+28//q8bi/bQrFwHC6tWX67+NK1duFCOcQ6IPIKeVrePZz55Ivgl+WWdkF6uYCz5IdMzurhzmeQ3K8DAMIxz/MG67VWJIOnuGNWF7nmdye5zd9AFcRsr1XadvZJCbGNfuc89AL5inCg==</dsig:SignatureValue>
在 JBoss EAP 7.2 中,生成的字符串值现在包含无效隐藏 ASCII 0xD carriage 返回和 0xA 行源控制字符的实例。
<dsig:SignatureValue xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">cUNpFJIZlLYrBDZtQSTDrq2K6PbnAHyg2qbx/D5FuB4XMjdQ5oxQjkMejLyelnA7s4GFusoLhahl qlTOT8UrOyxrR4yYAmJ/e5s+f4gys926+tbiraT/3/wG8wM/Lvcjvk5Ap69zODuRYpypsWfA4jrI 7TTBXVPGy8g4KUdnFviUiTuFTc2Ghgxp53AmUuLis/THyP28jE7+28//q8bi/bQrFwHC6tWX67+N K1duFCOcQ6IPIKeVrePZz55Ivgl+WWdkF6uYCz5IdMzurhzmeQ3K8DAMIxz/MG67VWJIOnuGNWF7 nmdye5zd9AFcRsr1XadvZJCbGNfuc89AL5inCg==</dsig:SignatureValue>
<dsig:SignatureValue xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">cUNpFJIZlLYrBDZtQSTDrq2K6PbnAHyg2qbx/D5FuB4XMjdQ5oxQjkMejLyelnA7s4GFusoLhahl
qlTOT8UrOyxrR4yYAmJ/e5s+f4gys926+tbiraT/3/wG8wM/Lvcjvk5Ap69zODuRYpypsWfA4jrI
7TTBXVPGy8g4KUdnFviUiTuFTc2Ghgxp53AmUuLis/THyP28jE7+28//q8bi/bQrFwHC6tWX67+N
K1duFCOcQ6IPIKeVrePZz55Ivgl+WWdkF6uYCz5IdMzurhzmeQ3K8DAMIxz/MG67VWJIOnuGNWF7
nmdye5zd9AFcRsr1XadvZJCbGNfuc89AL5inCg==</dsig:SignatureValue>
如果您遇到描述的运行时异常,请更新您的客户端代码,从返回的断言字符串中删除隐藏的 ASCII 字符。例如,假设您的当前代码类似以下示例:
您必须添加一个代码行,以删除无效隐藏的 ASCII 0xD carriage 返回和 0xA 行源字符的发生次数;例如: