From 7839a8e804b4e96e0ceea5a59237a722d3198d74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mat=C4=9Bj=C4=8Dek?= Date: Wed, 15 May 2024 17:10:42 +0200 Subject: [PATCH 01/23] Added descriptors for JEE 11 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: David Matějček --- .../glassfish/lib/schemas/application_11.xsd | 406 ++ .../glassfish/lib/schemas/jakartaee_11.xsd | 3648 +++++++++++++++++ .../glassfish/lib/schemas/jsp_4_0.xsd | 378 ++ .../glassfish/lib/schemas/web-app_6_1.xsd | 342 ++ .../glassfish/lib/schemas/web-common_6_1.xsd | 1507 +++++++ .../lib/schemas/web-jsptaglibrary_3_1.xsd | 1109 +++++ 6 files changed, 7390 insertions(+) create mode 100644 appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/application_11.xsd create mode 100644 appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/jakartaee_11.xsd create mode 100644 appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/jsp_4_0.xsd create mode 100644 appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/web-app_6_1.xsd create mode 100644 appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/web-common_6_1.xsd create mode 100644 appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/web-jsptaglibrary_3_1.xsd diff --git a/appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/application_11.xsd b/appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/application_11.xsd new file mode 100644 index 00000000000..aa3049f7028 --- /dev/null +++ b/appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/application_11.xsd @@ -0,0 +1,406 @@ + + + + + + Copyright (c) 2009, 2021 Oracle and/or its affiliates. All rights reserved. + + This program and the accompanying materials are made available under the + terms of the Eclipse Public License v. 2.0, which is available at + http://www.eclipse.org/legal/epl-2.0. + + This Source Code may also be made available under the following Secondary + Licenses when the conditions for such availability set forth in the + Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + version 2 with the GNU Classpath Exception, which is available at + https://www.gnu.org/software/classpath/license.html. + + SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + + + + + + + + ... + + + The instance documents may indicate the published version of + the schema using the xsi:schemaLocation attribute for Jakarta EE + namespace with the following location: + + https://jakarta.ee/xml/ns/jakartaee/application_11.xsd + + ]]> + + + + + + + The following conventions apply to all Jakarta EE + deployment descriptor elements unless indicated otherwise. + + - In elements that specify a pathname to a file within the + same JAR file, relative filenames (i.e., those not + starting with "/") are considered relative to the root of + the JAR file's namespace. Absolute filenames (i.e., those + starting with "/") also specify names in the root of the + JAR file's namespace. In general, relative names are + preferred. The exception is .war files where absolute + names are preferred for consistency with the Servlet API. + + + + + + + + + + + + + + The application element is the root element of a Jakarta EE + application deployment descriptor. + + + + + + + + The context-root element content must be unique + in the ear. + + + + + + + + + + + The security-role-name element content + must be unique in the ear. + + + + + + + + + + + + + + + + The applicationType defines the structure of the + application. + + + + + + + + + + + If initialize-in-order is true, modules must be initialized + in the order they're listed in this deployment descriptor, + with the exception of application client modules, which can + be initialized in any order. + If initialize-in-order is not set or set to false, the order + of initialization is unspecified and may be product-dependent. + + + + + + + + + The application deployment descriptor must have one + module element for each Jakarta EE module in the + application package. A module element is defined + by moduleType definition. + + + + + + + + + + The library-directory element specifies the pathname + of a directory within the application package, relative + to the top level of the application package. All files + named "*.jar" in this directory must be made available + in the class path of all components included in this + application package. If this element isn't specified, + the directory named "lib" is searched. An empty element + may be used to disable searching. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The required value for the version is 11. + + + + + + + + + + + + + + + The moduleType defines a single Jakarta EE module and contains a + connector, ejb, java, or web element, which indicates the + module type and contains a path to the module file, and an + optional alt-dd element, which specifies an optional URI to + the post-assembly version of the deployment descriptor. + + + + + + + + + + The connector element specifies the URI of a + resource adapter archive file, relative to the + top level of the application package. + + + + + + + + + The ejb element specifies the URI of an ejb-jar, + relative to the top level of the application + package. + + + + + + + + + The java element specifies the URI of a java + application client module, relative to the top + level of the application package. + + + + + + + + + + + The alt-dd element specifies an optional URI to the + post-assembly version of the deployment descriptor + file for a particular Jakarta EE module. The URI must + specify the full pathname of the deployment + descriptor file relative to the application's root + directory. If alt-dd is not specified, the deployer + must read the deployment descriptor from the default + location and file name required by the respective + component specification. + + + + + + + + + + + + + + + + The webType defines the web-uri and context-root of + a web application module. + + + + + + + + + The web-uri element specifies the URI of a web + application file, relative to the top level of the + application package. + + + + + + + + + The context-root element specifies the context root + of a web application. + + + + + + + + + diff --git a/appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/jakartaee_11.xsd b/appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/jakartaee_11.xsd new file mode 100644 index 00000000000..78409a01942 --- /dev/null +++ b/appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/jakartaee_11.xsd @@ -0,0 +1,3648 @@ + + + + + + Copyright (c) 2009, 2021 Oracle and/or its affiliates. All rights reserved. + + This program and the accompanying materials are made available under the + terms of the Eclipse Public License v. 2.0, which is available at + http://www.eclipse.org/legal/epl-2.0. + + This Source Code may also be made available under the following Secondary + Licenses when the conditions for such availability set forth in the + Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + version 2 with the GNU Classpath Exception, which is available at + https://www.gnu.org/software/classpath/license.html. + + SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + + + + + + + + The following definitions that appear in the common + shareable schema(s) of Jakarta EE deployment descriptors should be + interpreted with respect to the context they are included: + + Deployment Component may indicate one of the following: + Jakarta EE application; + application client; + web application; + enterprise bean; + resource adapter; + + Deployment File may indicate one of the following: + ear file; + war file; + jar file; + rar file; + + + + + + + + + + + + + This group keeps the usage of the contained description related + elements consistent across Jakarta EE deployment descriptors. + + All elements may occur multiple times with different languages, + to support localization of the content. + + + + + + + + + + + + + + + This group keeps the usage of the contained JNDI environment + reference elements consistent across Jakarta EE deployment descriptors. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This group collects elements that are common to most + JNDI resource elements. + + + + + + + + + + The JNDI name to be looked up to resolve a resource reference. + + + + + + + + + + + + This group collects elements that are common to all the + JNDI resource elements. It does not include the lookup-name + element, that is only applicable to some resource elements. + + + + + + + + + A product specific name that this resource should be + mapped to. The name of this resource, as defined by the + resource's name element or defaulted, is a name that is + local to the application component using the resource. + (It's a name in the JNDI java:comp/env namespace.) Many + application servers provide a way to map these local + names to names of resources known to the application + server. This mapped name is often a global JNDI name, + but may be a name of any form. + + Application servers are not required to support any + particular form or type of mapped name, nor the ability + to use mapped names. The mapped name is + product-dependent and often installation-dependent. No + use of a mapped name is portable. + + + + + + + + + + + + + + + + Configuration of an administered object. + + + + + + + + + Description of this administered object. + + + + + + + + + The name element specifies the JNDI name of the + administered object being defined. + + + + + + + + + The administered object's interface type. + + + + + + + + + The administered object's class name. + + + + + + + + + Resource adapter name. + + + + + + + + + Property of the administered object property. This may be a + vendor-specific property. + + + + + + + + + + + + + + + + Configuration of a Connector Connection Factory resource. + + + + + + + + + Description of this resource. + + + + + + + + + The name element specifies the JNDI name of the + resource being defined. + + + + + + + + + The fully qualified class name of the connection factory + interface. + + + + + + + + + Resource adapter name. + + + + + + + + + Maximum number of connections that should be concurrently + allocated for a connection pool. + + + + + + + + + Minimum number of connections that should be concurrently + allocated for a connection pool. + + + + + + + + + The level of transaction support the connection factory + needs to support. + + + + + + + + + Resource property. This may be a vendor-specific + property. + + + + + + + + + + + + + + + + Configuration of a ContextService. + + + + + + + + + Description of this ContextService. + + + + + + + + + JNDI name of the ContextService instance being defined. + The JNDI name must be in a valid Jakarta EE namespace, + such as java:comp, java:module, java:app, or java:global. + + + + + + + + + A ContextService injection point annotated with these qualifier annotations + injects a bean that is produced by this context-service element. + Applications can define their own Producers for ContextService injection points + as long as the qualifier annotations on the producer do not conflict with the + non-empty qualifier list of a context-service. + + You can specify a single qualifier element with no value to indicate an + empty list of qualifier annotation classes. + + + + + + + + + Types of context to clear whenever a thread runs a + contextual task or action. The thread's previous context + is restored afterward. Context types that are defined by + the Jakarta EE Concurrency specification include: + Application, Security, Transaction, + and Remaining, which means all available thread context + types that are not specified elsewhere. You can also specify + vendor-specific context types. Absent other configuration, + cleared context defaults to Transaction. You can specify + a single cleared element with no value to indicate an + empty list of context types to clear. If neither + propagated nor unchanged specify (or default to) Remaining, + then Remaining is automatically appended to the list of + cleared context types. + + + + + + + + + Types of context to capture from the requesting thread + and propagate to a thread that runs a contextual task + or action. The captured context is re-established + when threads run the contextual task or action, + with the respective thread's previous context being + restored afterward. Context types that are defined by + the Jakarta EE Concurrency specification include: + Application, Security, + and Remaining, which means all available thread context + types that are not specified elsewhere. You can also specify + vendor-specific context types. Absent other configuration, + propagated context defaults to Remaining. You can specify + a single propagated element with no value to indicate that + no context types should be propagated. + + + + + + + + + Types of context that are left alone when a thread runs a + contextual task or action. Context types that are defined + by the Jakarta EE Concurrency specification include: + Application, Security, Transaction, + and Remaining, which means all available thread context + types that are not specified elsewhere. You can also specify + vendor-specific context types. Absent other configuration, + unchanged context defaults to empty. You can specify + a single unchanged element with no value to indicate that + no context types should be left unchanged. + + + + + + + + + Vendor-specific property. + + + + + + + + + + + + + + + + Configuration of a DataSource. + + + + + + + + + Description of this DataSource. + + + + + + + + + The name element specifies the JNDI name of the + data source being defined. + + + + + + + + + DataSource, XADataSource or ConnectionPoolDataSource + implementation class. + + + + + + + + + Database server name. + + + + + + + + + Port number where a server is listening for requests. + + + + + + + + + Name of a database on a server. + + + + + + + + url property is specified + along with other standard DataSource properties + such as serverName, databaseName + and portNumber, the more specific properties will + take precedence and url will be ignored. + + ]]> + + + + + + + + User name to use for connection authentication. + + + + + + + + + Password to use for connection authentication. + + + + + + + + + JDBC DataSource property. This may be a vendor-specific + property or a less commonly used DataSource property. + + + + + + + + + Sets the maximum time in seconds that this data source + will wait while attempting to connect to a database. + + + + + + + + + Set to false if connections should not participate in + transactions. + + + + + + + + + Isolation level for connections. + + + + + + + + + Number of connections that should be created when a + connection pool is initialized. + + + + + + + + + Maximum number of connections that should be concurrently + allocated for a connection pool. + + + + + + + + + Minimum number of connections that should be concurrently + allocated for a connection pool. + + + + + + + + + The number of seconds that a physical connection should + remain unused in the pool before the connection is + closed for a connection pool. + + + + + + + + + The total number of statements that a connection pool + should keep open. + + + + + + + + + + + + + + + + The description type is used by a description element to + provide text describing the parent element. The elements + that use this type should include any information that the + Deployment Component's Deployment File file producer wants + to provide to the consumer of the Deployment Component's + Deployment File (i.e., to the Deployer). Typically, the + tools used by such a Deployment File consumer will display + the description when processing the parent element that + contains the description. + + The lang attribute defines the language that the + description is provided in. The default value is "en" (English). + + + + + + + + + + + + + + + This type defines a dewey decimal that is used + to describe versions of documents. + + + + + + + + + + + + + + + + Employee Self Service + + + The value of the xml:lang attribute is "en" (English) by default. + + ]]> + + + + + + + + + + + + + + + + EmployeeRecord + + ../products/product.jar#ProductEJB + + ]]> + + + + + + + + + + + + + + + The ejb-local-refType is used by ejb-local-ref elements for + the declaration of a reference to an enterprise bean's local + home or to the local business interface of a 3.0 bean. + The declaration consists of: + + - an optional description + - the enterprise bean's reference name used in the code of the + Deployment Component that's referencing the enterprise bean. + - the optional expected type of the referenced enterprise bean + - the optional expected local interface of the referenced + enterprise bean or the local business interface of the + referenced enterprise bean. + - the optional expected local home interface of the referenced + enterprise bean. Not applicable if this ejb-local-ref refers + to the local business interface of a 3.0 bean. + - optional ejb-link information, used to specify the + referenced enterprise bean + - optional elements to define injection of the named enterprise + bean into a component field or property. + + + + + + + + + + + + + + + + + + + + + + ejb/Payroll + + ]]> + + + + + + + + + + + + + + + The ejb-refType is used by ejb-ref elements for the + declaration of a reference to an enterprise bean's home or + to the remote business interface of a 3.0 bean. + The declaration consists of: + + - an optional description + - the enterprise bean's reference name used in the code of + the Deployment Component that's referencing the enterprise + bean. + - the optional expected type of the referenced enterprise bean + - the optional remote interface of the referenced enterprise bean + or the remote business interface of the referenced enterprise + bean + - the optional expected home interface of the referenced + enterprise bean. Not applicable if this ejb-ref + refers to the remote business interface of a 3.0 bean. + - optional ejb-link information, used to specify the + referenced enterprise bean + - optional elements to define injection of the named enterprise + bean into a component field or property + + + + + + + + + + + + + + + + + + + + + + + The ejb-ref-typeType contains the expected type of the + referenced enterprise bean. + + The ejb-ref-type designates a value + that must be one of the following: + + Entity + Session + + + + + + + + + + + + + + + + + + + This type is used to designate an empty + element when used. + + + + + + + + + + + + + + The env-entryType is used to declare an application's + environment entry. The declaration consists of an optional + description, the name of the environment entry, a type + (optional if the value is injected, otherwise required), and + an optional value. + + It also includes optional elements to define injection of + the named resource into fields or JavaBeans properties. + + If a value is not specified and injection is requested, + no injection will occur and no entry of the specified name + will be created. This allows an initial value to be + specified in the source code without being incorrectly + changed when no override has been specified. + + If a value is not specified and no injection is requested, + a value must be supplied during deployment. + + This type is used by env-entry elements. + + + + + + + + + minAmount + + ]]> + + + + + + + java.lang.Integer + + ]]> + + + + + + + 100.00 + + ]]> + + + + + + + + + + + + + + + java.lang.Boolean + java.lang.Class + com.example.Color + + ]]> + + + + + + + + + + + + + + + The elements that use this type designate the name of a + Java class or interface. The name is in the form of a + "binary name", as defined in the JLS. This is the form + of name used in Class.forName(). Tools that need the + canonical name (the name used in source code) will need + to convert this binary name to the canonical name. + + + + + + + + + + + + + + + + This type defines four different values which can designate + boolean values. This includes values yes and no which are + not designated by xsd:boolean + + + + + + + + + + + + + + + + + + + + + The icon type contains small-icon and large-icon elements + that specify the file names for small and large GIF, JPEG, + or PNG icon images used to represent the parent element in a + GUI tool. + + The xml:lang attribute defines the language that the + icon file names are provided in. Its value is "en" (English) + by default. + + + + + + + + employee-service-icon16x16.jpg + + ]]> + + + + + + + employee-service-icon32x32.jpg + + ]]> + + + + + + + + + + + + + + + + An injection target specifies a class and a name within + that class into which a resource should be injected. + + The injection target class specifies the fully qualified + class name that is the target of the injection. The + Jakarta EE specifications describe which classes can be an + injection target. + + The injection target name specifies the target within + the specified class. The target is first looked for as a + JavaBeans property name. If not found, the target is + looked for as a field name. + + The specified resource will be injected into the target + during initialization of the class by either calling the + set method for the target property or by setting a value + into the named field. + + + + + + + + + + + + + + The following transaction isolation levels are allowed + (see documentation for the java.sql.Connection interface): + TRANSACTION_READ_UNCOMMITTED + TRANSACTION_READ_COMMITTED + TRANSACTION_REPEATABLE_READ + TRANSACTION_SERIALIZABLE + + + + + + + + + + + + + + + + + + + The java-identifierType defines a Java identifier. + The users of this type should further verify that + the content does not contain Java reserved keywords. + + + + + + + + + + + + + + + + + + This is a generic type that designates a Java primitive + type or a fully qualified name of a Java interface/type, + or an array of such types. + + + + + + + + + + + + + + + + + : + + Example: + + jdbc:mysql://localhost:3307/testdb + + ]]> + + + + + + + + + + + + + + + + + Configuration of a Messaging Connection Factory. + + + + + + + + + Description of this Messaging Connection Factory. + + + + + + + + + The name element specifies the JNDI name of the + messaging connection factory being defined. + + + + + + + + + Fully-qualified name of the messaging connection factory + interface. Permitted values are jakarta.jms.ConnectionFactory, + jakarta.jms.QueueConnectionFactory, or + jakarta.jms.TopicConnectionFactory. If not specified, + jakarta.jms.ConnectionFactory will be used. + + + + + + + + + Fully-qualified name of the messaging connection factory + implementation class. Ignored if a resource adapter + is used. + + + + + + + + + Resource adapter name. If not specified, the application + server will define the default behavior, which may or may + not involve the use of a resource adapter. + + + + + + + + + User name to use for connection authentication. + + + + + + + + + Password to use for connection authentication. + + + + + + + + + Client id to use for connection. + + + + + + + + + Messaging Connection Factory property. This may be a vendor-specific + property or a less commonly used ConnectionFactory property. + + + + + + + + + Set to false if connections should not participate in + transactions. + + + + + + + + + Maximum number of connections that should be concurrently + allocated for a connection pool. + + + + + + + + + Minimum number of connections that should be concurrently + allocated for a connection pool. + + + + + + + + + + + + + + + + Configuration of a Messaging Destination. + + + + + + + + + Description of this Messaging Destination. + + + + + + + + + The name element specifies the JNDI name of the + messaging destination being defined. + + + + + + + + + Fully-qualified name of the messaging destination interface. + Permitted values are jakarta.jms.Queue and jakarta.jms.Topic + + + + + + + + + Fully-qualified name of the messaging destination implementation + class. Ignored if a resource adapter is used unless the + resource adapter defines more than one destination implementation + class for the specified interface. + + + + + + + + + Resource adapter name. If not specified, the application + server will define the default behavior, which may or may + not involve the use of a resource adapter. + + + + + + + + + Name of the queue or topic. + + + + + + + + + Messaging Destination property. This may be a vendor-specific + property or a less commonly used Destination property. + + + + + + + + + + + + + + + + The jndi-nameType type designates a JNDI name in the + Deployment Component's environment and is relative to the + java:comp/env context. A JNDI name must be unique within the + Deployment Component. + + + + + + + + + + + + + + + com.aardvark.payroll.PayrollHome + + ]]> + + + + + + + + + + + + + + + The lifecycle-callback type specifies a method on a + class to be called when a lifecycle event occurs. + Note that each class may have only one lifecycle callback + method for any given event and that the method may not + be overloaded. + + If the lifefycle-callback-class element is missing then + the class defining the callback is assumed to be the + component class in scope at the place in the descriptor + in which the callback definition appears. + + + + + + + + + + + + + + + + + The listenerType indicates the deployment properties for a web + application listener bean. + + + + + + + + + + The listener-class element declares a class in the + application must be registered as a web + application listener bean. The value is the fully + qualified classname of the listener class. + + + + + + + + + + + + + + + + The localType defines the fully-qualified name of an + enterprise bean's local interface. + + + + + + + + + + + + + + + + The local-homeType defines the fully-qualified + name of an enterprise bean's local home interface. + + + + + + + + + + + + + + + + Configuration of a Mail Session resource. + + + + + + + + + Description of this Mail Session resource. + + + + + + + + + The name element specifies the JNDI name of the + Mail Session resource being defined. + + + + + + + + + Storage protocol. + + + + + + + + + Service provider store protocol implementation class + + + + + + + + + Transport protocol. + + + + + + + + + Service provider transport protocol implementation class + + + + + + + + + Mail server host name. + + + + + + + + + Mail server user name. + + + + + + + + + Password. + + + + + + + + + Email address to indicate the message sender. + + + + + + + + + Mail server property. This may be a vendor-specific + property. + + + + + + + + + + + + + + + + Configuration of a ManagedExecutorService. + + + + + + + + + Description of this ManagedExecutorService. + + + + + + + + + JNDI name of the ManagedExecutorService instance being defined. + The JNDI name must be in a valid Jakarta EE namespace, + such as java:comp, java:module, java:app, or java:global. + + + + + + + + + Refers to the name of a ContextServiceDefinition or + context-service deployment descriptor element, + which determines how context is applied to tasks and actions + that run on this executor. + The name must be in a valid Jakarta EE namespace, + such as java:comp, java:module, java:app, or java:global. + In the absence of a configured value, + java:comp/DefaultContextService is used. + + + + + + + + + A ManagedExecutorService injection point annotated with these qualifier annotations + injects a bean that is produced by this managed-executor element. + Applications can define their own Producers for ManagedExecutorService injection points + as long as the qualifier annotations on the producer do not conflict with the + non-empty qualifier list of a managed-executor. + + You can specify a single qualifier element with no value to indicate an + empty list of qualifier annotation classes. + + + + + + + + + Upper bound on contextual tasks and actions that this executor + will simultaneously execute asynchronously. This constraint does + not apply to tasks and actions that the executor runs inline, + such as when a thread requests CompletableFuture.join and the + action runs inline if it has not yet started. + The default is unbounded, although still subject to + resource constraints of the system. + + + + + + + + + The amount of time in milliseconds that a task or action + can execute before it is considered hung. + + + + + + + + + Indicates whether this executor is requested to + create virtual threads for tasks that do not run inline. + When true, the executor can create + virtual threads if it is capable of doing so + and if the request is not overridden by vendor-specific + configuration that restricts the use of virtual threads. + + + + + + + + + Vendor-specific property. + + + + + + + + + + + + + + + + Configuration of a ManagedScheduledExecutorService. + + + + + + + + + Description of this ManagedScheduledExecutorService. + + + + + + + + + JNDI name of the ManagedScheduledExecutorService instance + being defined. + The JNDI name must be in a valid Jakarta EE namespace, + such as java:comp, java:module, java:app, or java:global. + + + + + + + + + Refers to the name of a ContextServiceDefinition or + context-service deployment descriptor element, + which determines how context is applied to tasks and actions + that run on this executor. + The name must be in a valid Jakarta EE namespace, + such as java:comp, java:module, java:app, or java:global. + In the absence of a configured value, + java:comp/DefaultContextService is used. + + + + + + + + + A ManagedScheduledExecutorService injection point annotated with these qualifier annotations + injects a bean that is produced by this managed-scheduled-executor element. + Applications can define their own Producers for ManagedScheduledExecutorService injection points + as long as the qualifier annotations on the producer do not conflict with the + non-empty qualifier list of a managed-scheduled-executor. + + You can specify a single qualifier element with no value to indicate an + empty list of qualifier annotation classes. + + + + + + + + + Upper bound on contextual tasks and actions that this executor + will simultaneously execute asynchronously. This constraint does + not apply to tasks and actions that the executor runs inline, + such as when a thread requests CompletableFuture.join and the + action runs inline if it has not yet started. This constraint also + does not apply to tasks that are scheduled via the schedule methods. + The default is unbounded, although still subject to + resource constraints of the system. + + + + + + + + + The amount of time in milliseconds that a task or action + can execute before it is considered hung. + + + + + + + + + Indicates whether this executor is requested to + create virtual threads for tasks that do not run inline. + When true, the executor can create + virtual threads if it is capable of doing so + and if the request is not overridden by vendor-specific + configuration that restricts the use of virtual threads. + + + + + + + + + Vendor-specific property. + + + + + + + + + + + + + + + + Configuration of a ManagedThreadFactory. + + + + + + + + + Description of this ManagedThreadFactory. + + + + + + + + + JNDI name of the ManagedThreadFactory instance being defined. + The JNDI name must be in a valid Jakarta EE namespace, + such as java:comp, java:module, java:app, or java:global. + + + + + + + + + Refers to the name of a ContextServiceDefinition or + context-service deployment descriptor element, + which determines how context is applied to threads + from this thread factory. + The name must be in a valid Jakarta EE namespace, + such as java:comp, java:module, java:app, or java:global. + In the absence of a configured value, + java:comp/DefaultContextService is used. + + + + + + + + + A ManagedThreadFactory injection point annotated with these qualifier annotations + injects a bean that is produced by this managed-thread-factory element. + Applications can define their own Producers for ManagedThreadFactory injection points + as long as the qualifier annotations on the producer do not conflict with the + non-empty qualifier list of a managed-thread-factory. + + You can specify a single qualifier element with no value to indicate an + empty list of qualifier annotation classes. + + + + + + + + + Priority for threads created by this thread factory. + The default is 5 (java.lang.Thread.NORM_PRIORITY). + + + + + + + + + Indicates whether this executor is requested to + create virtual threads for tasks that do not run inline. + When true, the executor can create + virtual threads if it is capable of doing so + and if the request is not overridden by vendor-specific + configuration that restricts the use of virtual threads. + + + + + + + + + Vendor-specific property. + + + + + + + + + + + + + + + + This type is a general type that can be used to declare + parameter/value lists. + + + + + + + + + + The param-name element contains the name of a + parameter. + + + + + + + + + The param-value element contains the value of a + parameter. + + + + + + + + + + + + + + + + The elements that use this type designate either a relative + path or an absolute path starting with a "/". + + In elements that specify a pathname to a file within the + same Deployment File, relative filenames (i.e., those not + starting with "/") are considered relative to the root of + the Deployment File's namespace. Absolute filenames (i.e., + those starting with "/") also specify names in the root of + the Deployment File's namespace. In general, relative names + are preferred. The exception is .war files where absolute + names are preferred for consistency with the Servlet API. + + + + + + + + + + + + + + + + myPersistenceContext + + + + + myPersistenceContext + + PersistenceUnit1 + + Extended + + + ]]> + + + + + + + + + The persistence-context-ref-name element specifies + the name of a persistence context reference; its + value is the environment entry name used in + Deployment Component code. The name is a JNDI name + relative to the java:comp/env context. + + + + + + + + + The Application Assembler(or BeanProvider) may use the + following syntax to avoid the need to rename persistence + units to have unique names within a Jakarta EE application. + + The Application Assembler specifies the pathname of the + root of the persistence.xml file for the referenced + persistence unit and appends the name of the persistence + unit separated from the pathname by #. The pathname is + relative to the referencing application component jar file. + In this manner, multiple persistence units with the same + persistence unit name may be uniquely identified when the + Application Assembler cannot change persistence unit names. + + + + + + + + + + + Used to specify properties for the container or persistence + provider. Vendor-specific properties may be included in + the set of properties. Properties that are not recognized + by a vendor must be ignored. Entries that make use of the + namespace jakarta.persistence and its subnamespaces must not + be used for vendor-specific properties. The namespace + jakarta.persistence is reserved for use by the specification. + + + + + + + + + + + + + + + + + The persistence-context-synchronizationType specifies + whether a container-managed persistence context is automatically + synchronized with the current transaction. + + The value of the persistence-context-synchronization element + must be one of the following: + Synchronized + Unsynchronized + + + + + + + + + + + + + + + + + + + The persistence-context-typeType specifies the transactional + nature of a persistence context reference. + + The value of the persistence-context-type element must be + one of the following: + Transaction + Extended + + + + + + + + + + + + + + + + + + + Specifies a thread priority value in the range of + 1 (java.lang.Thread.MIN_PRIORITY) to 10 (java.lang.Thread.MAX_PRIORITY). + + + + + + + + + + + + + + + + + + Specifies a name/value pair. + + + + + + + + + + + + + + + + + + + + myPersistenceUnit + + + + + myPersistenceUnit + + PersistenceUnit1 + + + + ]]> + + + + + + + + + The persistence-unit-ref-name element specifies + the name of a persistence unit reference; its + value is the environment entry name used in + Deployment Component code. The name is a JNDI name + relative to the java:comp/env context. + + + + + + + + + The Application Assembler(or BeanProvider) may use the + following syntax to avoid the need to rename persistence + units to have unique names within a Jakarta EE application. + + The Application Assembler specifies the pathname of the + root of the persistence.xml file for the referenced + persistence unit and appends the name of the persistence + unit separated from the pathname by #. The pathname is + relative to the referencing application component jar file. + In this manner, multiple persistence units with the same + persistence unit name may be uniquely identified when the + Application Assembler cannot change persistence unit names. + + + + + + + + + + + + + + + + com.wombat.empl.EmployeeService + + ]]> + + + + + + + + + + + + + + + jms/StockQueue + + jakarta.jms.Queue + + + + ]]> + + + + + + + + + The resource-env-ref-name element specifies the name + of a resource environment reference; its value is + the environment entry name used in + the Deployment Component code. The name is a JNDI + name relative to the java:comp/env context and must + be unique within a Deployment Component. + + + + + + + + + The resource-env-ref-type element specifies the type + of a resource environment reference. It is the + fully qualified name of a Java language class or + interface. + + + + + + + + + + + + + + + + + jdbc/EmployeeAppDB + javax.sql.DataSource + Container + Shareable + + + ]]> + + + + + + + + + The res-ref-name element specifies the name of a + resource manager connection factory reference. + The name is a JNDI name relative to the + java:comp/env context. + The name must be unique within a Deployment File. + + + + + + + + + The res-type element specifies the type of the data + source. The type is specified by the fully qualified + Java language class or interface + expected to be implemented by the data source. + + + + + + + + + + + + + + + + + + + The res-authType specifies whether the Deployment Component + code signs on programmatically to the resource manager, or + whether the Container will sign on to the resource manager + on behalf of the Deployment Component. In the latter case, + the Container uses information that is supplied by the + Deployer. + + The value must be one of the two following: + + Application + Container + + + + + + + + + + + + + + + + + + + The res-sharing-scope type specifies whether connections + obtained through the given resource manager connection + factory reference can be shared. The value, if specified, + must be one of the two following: + + Shareable + Unshareable + + The default value is Shareable. + + + + + + + + + + + + + + + + + + + The run-asType specifies the run-as identity to be + used for the execution of a component. It contains an + optional description, and the name of a security role. + + + + + + + + + + + + + + + + + + The role-nameType designates the name of a security role. + + The name must conform to the lexical rules for a token. + + + + + + + + + + + + + + + + + This role includes all employees who are authorized + to access the employee service application. + + employee + + + ]]> + + + + + + + + + + + + + + + + + The security-role-refType contains the declaration of a + security role reference in a component's or a + Deployment Component's code. The declaration consists of an + optional description, the security role name used in the + code, and an optional link to a security role. If the + security role is not specified, the Deployer must choose an + appropriate security role. + + + + + + + + + + The value of the role-name element must be the String used + as the parameter to the + EJBContext.isCallerInRole(String roleName) method or the + HttpServletRequest.isUserInRole(String role) method. + + + + + + + + + The role-link element is a reference to a defined + security role. The role-link element must contain + the name of one of the security roles defined in the + security-role elements. + + + + + + + + + + + + + + + + This type adds an "id" attribute to xsd:QName. + + + + + + + + + + + + + + + + + + This type adds an "id" attribute to xsd:boolean. + + + + + + + + + + + + + + + + + + This type adds an "id" attribute to xsd:NMTOKEN. + + + + + + + + + + + + + + + + + + This type adds an "id" attribute to xsd:anyURI. + + + + + + + + + + + + + + + + + + This type adds an "id" attribute to xsd:integer. + + + + + + + + + + + + + + + + + + This type adds an "id" attribute to xsd:positiveInteger. + + + + + + + + + + + + + + + + + + This type adds an "id" attribute to xsd:nonNegativeInteger. + + + + + + + + + + + + + + + + + + This type adds an "id" attribute to xsd:string. + + + + + + + + + + + + + + + + + + This is a special string datatype that is defined by Jakarta EE as + a base type for defining collapsed strings. When schemas + require trailing/leading space elimination as well as + collapsing the existing whitespace, this base type may be + used. + + + + + + + + + + + + + + + + + + This simple type designates a boolean with only two + permissible values + + - true + - false + + + + + + + + + + + + + + + + + + The url-patternType contains the url pattern of the mapping. + It must follow the rules specified in Section 11.2 of the + Servlet API Specification. This pattern is assumed to be in + URL-decoded form and must not contain CR(#xD) or LF(#xA). + If it contains those characters, the container must inform + the developer with a descriptive error message. + The container must preserve all characters including whitespaces. + + + + + + + + + + + + + + + + CorporateStocks + + + + ]]> + + + + + + + + + The message-destination-name element specifies a + name for a message destination. This name must be + unique among the names of message destinations + within the Deployment File. + + + + + + + + + A product specific name that this message destination + should be mapped to. Each message-destination-ref + element that references this message destination will + define a name in the namespace of the referencing + component or in one of the other predefined namespaces. + Many application servers provide a way to map these + local names to names of resources known to the + application server. This mapped name is often a global + JNDI name, but may be a name of any form. Each of the + local names should be mapped to this same global name. + + Application servers are not required to support any + particular form or type of mapped name, nor the ability + to use mapped names. The mapped name is + product-dependent and often installation-dependent. No + use of a mapped name is portable. + + + + + + + + + The JNDI name to be looked up to resolve the message destination. + + + + + + + + + + + + + + + + jms/StockQueue + + jakarta.jms.Queue + + Consumes + + CorporateStocks + + + + ]]> + + + + + + + + + The message-destination-ref-name element specifies + the name of a message destination reference; its + value is the environment entry name used in + Deployment Component code. + + + + + + + + + + + + + + + + + + + + The message-destination-usageType specifies the use of the + message destination indicated by the reference. The value + indicates whether messages are consumed from the message + destination, produced for the destination, or both. The + Assembler makes use of this information in linking producers + of a destination with its consumers. + + The value of the message-destination-usage element must be + one of the following: + Consumes + Produces + ConsumesProduces + + + + + + + + + + + + + + + + + + + jakarta.jms.Queue + + + ]]> + + + + + + + + + + + + + + + The message-destination-linkType is used to link a message + destination reference or message-driven bean to a message + destination. + + The Assembler sets the value to reflect the flow of messages + between producers and consumers in the application. + + The value must be the message-destination-name of a message + destination in the same Deployment File or in another + Deployment File in the same Jakarta EE application unit. + + Alternatively, the value may be composed of a path name + specifying a Deployment File containing the referenced + message destination with the message-destination-name of the + destination appended and separated from the path name by + "#". The path name is relative to the Deployment File + containing Deployment Component that is referencing the + message destination. This allows multiple message + destinations with the same name to be uniquely identified. + + + + + + + + + + + + + + + + The transaction-supportType specifies the level of + transaction support provided by the resource adapter. It is + used by transaction-support elements. + + The value must be one of the following: + + NoTransaction + LocalTransaction + XATransaction + + + + + + + + + + + + + diff --git a/appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/jsp_4_0.xsd b/appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/jsp_4_0.xsd new file mode 100644 index 00000000000..ef4460b30a4 --- /dev/null +++ b/appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/jsp_4_0.xsd @@ -0,0 +1,378 @@ + + + + + + Copyright (c) 2009, 2021 Oracle and/or its affiliates. All rights reserved. + + This program and the accompanying materials are made available under the + terms of the Eclipse Public License v. 2.0, which is available at + http://www.eclipse.org/legal/epl-2.0. + + This Source Code may also be made available under the following Secondary + Licenses when the conditions for such availability set forth in the + Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + version 2 with the GNU Classpath Exception, which is available at + https://www.gnu.org/software/classpath/license.html. + + SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + + + + + + + + This is the XML Schema for the JSP 4.0 deployment descriptor + types. The JSP 4.0 schema contains all the special + structures and datatypes that are necessary to use JSP files + from a web application. + + The contents of this schema is used by the web-common_6_1.xsd + file to define JSP specific content. + + + + + + + + The following conventions apply to all Jakarta EE + deployment descriptor elements unless indicated otherwise. + + - In elements that specify a pathname to a file within the + same JAR file, relative filenames (i.e., those not + starting with "/") are considered relative to the root of + the JAR file's namespace. Absolute filenames (i.e., those + starting with "/") also specify names in the root of the + JAR file's namespace. In general, relative names are + preferred. The exception is .war files where absolute + names are preferred for consistency with the Servlet API. + + + + + + + + + + + + + + The jsp-configType is used to provide global configuration + information for the JSP files in a web application. It has + two subelements, taglib and jsp-property-group. + + + + + + + + + + + + + + + + + + The jsp-file element contains the full path to a JSP file + within the web application beginning with a `/'. + + + + + + + + + + + + + + + + The jsp-property-groupType is used to group a number of + files so they can be given global property information. + All files so described are deemed to be JSP files. The + following additional properties can be described: + + - Control whether EL is ignored. + - Control whether scripting elements are invalid. + - Indicate pageEncoding information. + - Indicate that a resource is a JSP document (XML). + - Prelude and Coda automatic includes. + - Control whether the character sequence #{ is allowed + when used as a String literal. + - Control whether template text containing only + whitespaces must be removed from the response output. + - Indicate the default contentType information. + - Indicate the default buffering model for JspWriter + - Control whether error should be raised for the use of + undeclared namespaces in a JSP page. + + + + + + + + + + + Can be used to easily set the isELIgnored + property of a group of JSP pages. By default, the + EL evaluation is enabled for Web Applications using + a Servlet 2.4 or greater web.xml, and disabled + otherwise. + + + + + + + + + Can be used to easily set the errorOnELNotFound + property of a group of JSP pages. By default, this + property is false. + + + + + + + + + The valid values of page-encoding are those of the + pageEncoding page directive. It is a + translation-time error to name different encodings + in the pageEncoding attribute of the page directive + of a JSP page and in a JSP configuration element + matching the page. It is also a translation-time + error to name different encodings in the prolog + or text declaration of a document in XML syntax and + in a JSP configuration element matching the document. + It is legal to name the same encoding through + mulitple mechanisms. + + + + + + + + + Can be used to easily disable scripting in a + group of JSP pages. By default, scripting is + enabled. + + + + + + + + + If true, denotes that the group of resources + that match the URL pattern are JSP documents, + and thus must be interpreted as XML documents. + If false, the resources are assumed to not + be JSP documents, unless there is another + property group that indicates otherwise. + + + + + + + + + The include-prelude element is a context-relative + path that must correspond to an element in the + Web Application. When the element is present, + the given path will be automatically included (as + in an include directive) at the beginning of each + JSP page in this jsp-property-group. + + + + + + + + + The include-coda element is a context-relative + path that must correspond to an element in the + Web Application. When the element is present, + the given path will be automatically included (as + in an include directive) at the end of each + JSP page in this jsp-property-group. + + + + + + + + + The character sequence #{ is reserved for EL expressions. + Consequently, a translation error occurs if the #{ + character sequence is used as a String literal, unless + this element is enabled (true). Disabled (false) by + default. + + + + + + + + + Indicates that template text containing only whitespaces + must be removed from the response output. It has no + effect on JSP documents (XML syntax). Disabled (false) + by default. + + + + + + + + + The valid values of default-content-type are those of the + contentType page directive. It specifies the default + response contentType if the page directive does not include + a contentType attribute. + + + + + + + + + The valid values of buffer are those of the + buffer page directive. It specifies if buffering should be + used for the output to response, and if so, the size of the + buffer to use. + + + + + + + + + The default behavior when a tag with unknown namespace is used + in a JSP page (regular syntax) is to silently ignore it. If + set to true, then an error must be raised during the translation + time when an undeclared tag is used in a JSP page. Disabled + (false) by default. + + + + + + + + + + + + + + + + The taglibType defines the syntax for declaring in + the deployment descriptor that a tag library is + available to the application. This can be done + to override implicit map entries from TLD files and + from the container. + + + + + + + + + A taglib-uri element describes a URI identifying a + tag library used in the web application. The body + of the taglib-uri element may be either an + absolute URI specification, or a relative URI. + There should be no entries in web.xml with the + same taglib-uri value. + + + + + + + + + the taglib-location element contains the location + (as a resource relative to the root of the web + application) where to find the Tag Library + Description file for the tag library. + + + + + + + + + diff --git a/appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/web-app_6_1.xsd b/appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/web-app_6_1.xsd new file mode 100644 index 00000000000..5b8861d4e1f --- /dev/null +++ b/appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/web-app_6_1.xsd @@ -0,0 +1,342 @@ + + + + + + Copyright (c) 2009, 2021 Oracle and/or its affiliates. All rights reserved. + + This program and the accompanying materials are made available under the + terms of the Eclipse Public License v. 2.0, which is available at + http://www.eclipse.org/legal/epl-2.0. + + This Source Code may also be made available under the following Secondary + Licenses when the conditions for such availability set forth in the + Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + version 2 with the GNU Classpath Exception, which is available at + https://www.gnu.org/software/classpath/license.html. + + SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + + + + + + + + ... + + + The instance documents may indicate the published version of + the schema using the xsi:schemaLocation attribute for Jakarta EE + namespace with the following location: + + https://jakarta.ee/xml/ns/jakartaee/web-app_6_1.xsd + + ]]> + + + + + + + The following conventions apply to all Jakarta EE + deployment descriptor elements unless indicated otherwise. + + - In elements that specify a pathname to a file within the + same JAR file, relative filenames (i.e., those not + starting with "/") are considered relative to the root of + the JAR file's namespace. Absolute filenames (i.e., those + starting with "/") also specify names in the root of the + JAR file's namespace. In general, relative names are + preferred. The exception is .war files where absolute + names are preferred for consistency with the Servlet API. + + + + + + + + + + + + + + The web-app element is the root of the deployment + descriptor for a web application. Note that the sub-elements + of this element can be in the arbitrary order. Because of + that, the multiplicity of the elements of distributable, + session-config, welcome-file-list, jsp-config, login-config, + and locale-encoding-mapping-list was changed from "?" to "*" + in this schema. However, the deployment descriptor instance + file must not contain multiple elements of session-config, + jsp-config, and login-config. When there are multiple elements of + welcome-file-list or locale-encoding-mapping-list, the container + must concatenate the element contents. The multiple occurence + of the element distributable is redundant and the container + treats that case exactly in the same way when there is only + one distributable. + + + + + + + + The servlet element contains the name of a servlet. + The name must be unique within the web application. + + + + + + + + + + + The filter element contains the name of a filter. + The name must be unique within the web application. + + + + + + + + + + + The ejb-local-ref-name element contains the name of an + enterprise bean reference. The enterprise + bean reference is an entry in the web + application's environment and is relative to the + java:comp/env context. The name must be unique within + the web application. + + It is recommended that name is prefixed with "ejb/". + + + + + + + + + + + The ejb-ref-name element contains the name of an + enterprise bean reference. The enterprise bean + reference is an entry in the web application's environment + and is relative to the java:comp/env context. + The name must be unique within the web application. + + It is recommended that name is prefixed with "ejb/". + + + + + + + + + + + The resource-env-ref-name element specifies the name of + a resource environment reference; its value is the + environment entry name used in the web application code. + The name is a JNDI name relative to the java:comp/env + context and must be unique within a web application. + + + + + + + + + + + The message-destination-ref-name element specifies the name of + a message destination reference; its value is the + environment entry name used in the web application code. + The name is a JNDI name relative to the java:comp/env + context and must be unique within a web application. + + + + + + + + + + + The res-ref-name element specifies the name of a + resource manager connection factory reference. The name + is a JNDI name relative to the java:comp/env context. + The name must be unique within a web application. + + + + + + + + + + + The env-entry-name element contains the name of a web + application's environment entry. The name is a JNDI + name relative to the java:comp/env context. The name + must be unique within a web application. + + + + + + + + + + + A role-name-key is specified to allow the references + from the security-role-refs. + + + + + + + + + + + The keyref indicates the references from + security-role-ref to a specified role-name. + + + + + + + + + + + + + + + + + + + + When specified, this element provides a default context path + of the web application. An empty value for this element must cause + the web application to be deployed at the root for the container. + Otherwise, the default context path must start with + a "/" character but not end with a "/" character. + Servlet containers may provide vendor specific configuration + options that allows specifying a value that overrides the value + specified here. + + + + + + + + + When specified, this element provides a default request + character encoding of the web application. + + + + + + + + + When specified, this element provides a default response + character encoding of the web application. + + + + + + + + + When specified, this element causes uncovered http methods + to be denied. For every url-pattern that is the target of a + security-constrant, this element causes all HTTP methods that + are NOT covered (by a security constraint) at the url-pattern + to be denied. + + + + + + + + + + + + + + + + + Please see section 8.2.2 of the specification for details. + + + + + + + + + + diff --git a/appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/web-common_6_1.xsd b/appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/web-common_6_1.xsd new file mode 100644 index 00000000000..52f80feb777 --- /dev/null +++ b/appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/web-common_6_1.xsd @@ -0,0 +1,1507 @@ + + + + + + Copyright (c) 2009, 2021 Oracle and/or its affiliates. All rights reserved. + + This program and the accompanying materials are made available under the + terms of the Eclipse Public License v. 2.0, which is available at + http://www.eclipse.org/legal/epl-2.0. + + This Source Code may also be made available under the following Secondary + Licenses when the conditions for such availability set forth in the + Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + version 2 with the GNU Classpath Exception, which is available at + https://www.gnu.org/software/classpath/license.html. + + SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + + + + + + + + ... + + + The instance documents may indicate the published version of + the schema using the xsi:schemaLocation attribute for Jakarta EE + namespace with the following location: + + https://jakarta.ee/xml/ns/jakartaee/web-common_6_1.xsd + + ]]> + + + + + + + The following conventions apply to all Jakarta EE + deployment descriptor elements unless indicated otherwise. + + - In elements that specify a pathname to a file within the + same JAR file, relative filenames (i.e., those not + starting with "/") are considered relative to the root of + the JAR file's namespace. Absolute filenames (i.e., those + starting with "/") also specify names in the root of the + JAR file's namespace. In general, relative names are + preferred. The exception is .war files where absolute + names are preferred for consistency with the Servlet API. + + + + + + + + + + + + + + + + + The context-param element contains the declaration + of a web application's servlet context + initialization parameters. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The metadata-complete attribute defines whether this + deployment descriptor and other related deployment + descriptors for this module (e.g., web service + descriptors) are complete, or whether the class + files available to this module and packaged with + this application should be examined for annotations + that specify deployment information. + + If metadata-complete is set to "true", the deployment + tool must ignore any annotations that specify deployment + information, which might be present in the class files + of the application. + + If metadata-complete is not specified or is set to + "false", the deployment tool must examine the class + files of the application for annotations, as + specified by the specifications. + + + + + + + + + + + + + + This type is a general type that can be used to declare + attribute/value lists. + + + + + + + + + + The attribute-name element contains the name of an + attribute. + + + + + + + + + The attribute-value element contains the value of a + attribute. + + + + + + + + + + + + + + + + The auth-constraintType indicates the user roles that + should be permitted access to this resource + collection. The role-name used here must either correspond + to the role-name of one of the security-role elements + defined for this web application, or be the specially + reserved role-name "*" that is a compact syntax for + indicating all roles in the web application. If both "*" + and rolenames appear, the container interprets this as all + roles. If no roles are defined, no user is allowed access + to the portion of the web application described by the + containing security-constraint. The container matches + role names case sensitively when determining access. + + + + + + + + + + + + + + + + + + The auth-methodType is used to configure the authentication + mechanism for the web application. As a prerequisite to + gaining access to any web resources which are protected by + an authorization constraint, a user must have authenticated + using the configured mechanism. Legal values are "BASIC", + "DIGEST", "FORM", "CLIENT-CERT", or a vendor-specific + authentication scheme. + + Used in: login-config + + + + + + + + + + + + + + + + The dispatcher has five legal values: FORWARD, REQUEST, + INCLUDE, ASYNC, and ERROR. + + A value of FORWARD means the Filter will be applied under + RequestDispatcher.forward() calls. + A value of REQUEST means the Filter will be applied under + ordinary client calls to the path or servlet. + A value of INCLUDE means the Filter will be applied under + RequestDispatcher.include() calls. + A value of ASYNC means the Filter will be applied under + calls dispatched from an AsyncContext. + A value of ERROR means the Filter will be applied under the + error page mechanism. + + The absence of any dispatcher elements in a filter-mapping + indicates a default of applying filters only under ordinary + client calls to the path or servlet. + + + + + + + + + + + + + + + + + + + + + + The error-code contains an HTTP error code, ex: 404 + + Used in: error-page + + + + + + + + + + + + + + + + + + + The error-pageType contains a mapping between an error code + or exception type to the path of a resource in the web + application. + + Error-page declarations using the exception-type element in + the deployment descriptor must be unique up to the class name of + the exception-type. Similarly, error-page declarations using the + error-code element must be unique in the deployment descriptor + up to the status code. + + If an error-page element in the deployment descriptor does not + contain an exception-type or an error-code element, the error + page is a default error page. + + Used in: web-app + + + + + + + + + + + The exception-type contains a fully qualified class + name of a Java exception type. + + + + + + + + + + The location element contains the location of the + resource in the web application relative to the root of + the web application. The value of the location must have + a leading `/'. + + + + + + + + + + + + + + + + The filterType is used to declare a filter in the web + application. The filter is mapped to either a servlet or a + URL pattern in the filter-mapping element, using the + filter-name value to reference. Filters can access the + initialization parameters declared in the deployment + descriptor at runtime via the FilterConfig interface. + + Used in: web-app + + + + + + + + + + + The fully qualified classname of the filter. + + + + + + + + + + The init-param element contains a name/value pair as + an initialization param of a servlet filter + + + + + + + + + + + + + + + + Declaration of the filter mappings in this web + application is done by using filter-mappingType. + The container uses the filter-mapping + declarations to decide which filters to apply to a request, + and in what order. The container matches the request URI to + a Servlet in the normal way. To determine which filters to + apply it matches filter-mapping declarations either on + servlet-name, or on url-pattern for each filter-mapping + element, depending on which style is used. The order in + which filters are invoked is the order in which + filter-mapping declarations that match a request URI for a + servlet appear in the list of filter-mapping elements.The + filter-name value must be the value of the filter-name + sub-elements of one of the filter declarations in the + deployment descriptor. + + + + + + + + + + + + + + + + + + + + + + This type defines a string which contains at least one + character. + + + + + + + + + + + + + + + + + + The logical name of the filter is declare + by using filter-nameType. This name is used to map the + filter. Each filter name is unique within the web + application. + + Used in: filter, filter-mapping + + + + + + + + + + + + + + + + The form-login-configType specifies the login and error + pages that should be used in form based login. If form based + authentication is not used, these elements are ignored. + + Used in: login-config + + + + + + + + + The form-login-page element defines the location in the web + app where the page that can be used for login can be + found. The path begins with a leading / and is interpreted + relative to the root of the WAR. + + + + + + + + + The form-error-page element defines the location in + the web app where the error page that is displayed + when login is not successful can be found. + The path begins with a leading / and is interpreted + relative to the root of the WAR. + + + + + + + + + + + + + A HTTP method type as defined in HTTP 1.1 section 2.2. + + + + + + + + + + + + + + + + + + + + + + + + + + The login-configType is used to configure the authentication + method that should be used, the realm name that should be + used for this application, and the attributes that are + needed by the form login mechanism. + + Used in: web-app + + + + + + + + + + The realm name element specifies the realm name to + use in HTTP Basic authorization. + + + + + + + + + + + + + + + + + The mime-mappingType defines a mapping between an extension + and a mime type. + + Used in: web-app + + + + + + + + The extension element contains a string describing an + extension. example: "txt" + + + + + + + + + + + + + + + + + The mime-typeType is used to indicate a defined mime type. + + Example: + "text/plain" + + Used in: mime-mapping + + + + + + + + + + + + + + + + + + The security-constraintType is used to associate + security constraints with one or more web resource + collections + + Used in: web-app + + + + + + + + + + + + + + + + + + + + The servletType is used to declare a servlet. + It contains the declarative data of a + servlet. If a jsp-file is specified and the load-on-startup + element is present, then the JSP should be precompiled and + loaded. + + Used in: web-app + + + + + + + + + + + + The servlet-class element contains the fully + qualified class name of the servlet. + + + + + + + + + + + + The load-on-startup element indicates that this + servlet should be loaded (instantiated and have + its init() called) on the startup of the web + application. The optional contents of these + element must be an integer indicating the order in + which the servlet should be loaded. If the value + is a negative integer, or the element is not + present, the container is free to load the servlet + whenever it chooses. If the value is a positive + integer or 0, the container must load and + initialize the servlet as the application is + deployed. The container must guarantee that + servlets marked with lower integers are loaded + before servlets marked with higher integers. The + container may choose the order of loading of + servlets with the same load-on-start-up value. + + + + + + + + + + + + + + + + + + + + + The servlet-mappingType defines a mapping between a + servlet and a url pattern. + + Used in: web-app + + + + + + + + + + + + + + + + + + The servlet-name element contains the canonical name of the + servlet. Each servlet name is unique within the web + application. + + + + + + + + + + + + + + + + The session-configType defines the session parameters + for this web application. + + Used in: web-app + + + + + + + + + The session-timeout element defines the default + session timeout interval for all sessions created + in this web application. The specified timeout + must be expressed in a whole number of minutes. + If the timeout is 0 or less, the container ensures + the default behaviour of sessions is never to time + out. If this element is not specified, the container + must set its default timeout period. + + + + + + + + + The cookie-config element defines the configuration of the + session tracking cookies created by this web application. + + + + + + + + + The tracking-mode element defines the tracking modes + for sessions created by this web application + + + + + + + + + + + + + + + + The cookie-configType defines the configuration for the + session tracking cookies of this web application. + + Used in: session-config + + + + + + + + + The name that will be assigned to any session tracking + cookies created by this web application. + The default is JSESSIONID + + + + + + + + + The domain name that will be assigned to any session tracking + cookies created by this web application. + + + + + + + + + The path that will be assigned to any session tracking + cookies created by this web application. + + + + + + + + + The comment that will be assigned to any session tracking + cookies created by this web application. + + + + + + + + + Specifies whether any session tracking cookies created + by this web application will be marked as HttpOnly + + + + + + + + + Specifies whether any session tracking cookies created + by this web application will be marked as secure. + When true, all session tracking cookies must be marked + as secure independent of the nature of the request that + initiated the corresponding session. + When false, the session cookie should only be marked secure + if the request that initiated the session was secure. + + + + + + + + + The lifetime (in seconds) that will be assigned to any + session tracking cookies created by this web application. + Default is -1 + + + + + + + + + The attribute-param element contains a name/value pair to + be added as an attribute to every session cookie. + + + + + + + + + + + + + + + + The name that will be assigned to any session tracking + cookies created by this web application. + The default is JSESSIONID + + Used in: cookie-config + + + + + + + + + + + + + + + + The domain name that will be assigned to any session tracking + cookies created by this web application. + + Used in: cookie-config + + + + + + + + + + + + + + + + The path that will be assigned to any session tracking + cookies created by this web application. + + Used in: cookie-config + + + + + + + + + + + + + + + + The comment that will be assigned to any session tracking + cookies created by this web application. + + Used in: cookie-config + + + + + + + + + + + + + + + + The tracking modes for sessions created by this web + application + + Used in: session-config + + + + + + + + + + + + + + + + + + + + The transport-guaranteeType specifies that the communication + between client and server should be NONE, INTEGRAL, or + CONFIDENTIAL. NONE means that the application does not + require any transport guarantees. A value of INTEGRAL means + that the application requires that the data sent between the + client and server be sent in such a way that it can't be + changed in transit. CONFIDENTIAL means that the application + requires that the data be transmitted in a fashion that + prevents other entities from observing the contents of the + transmission. In most cases, the presence of the INTEGRAL or + CONFIDENTIAL flag will indicate that the use of SSL is + required. + + Used in: user-data-constraint + + + + + + + + + + + + + + + + + + + + The user-data-constraintType is used to indicate how + data communicated between the client and container should be + protected. + + Used in: security-constraint + + + + + + + + + + + + + + + + + + The elements that use this type designate a path starting + with a "/" and interpreted relative to the root of a WAR + file. + + + + + + + + + + + + + + + This type contains the recognized versions of + web-application supported. It is used to designate the + version of the web application. + + + + + + + + + + + + + + + + The web-resource-collectionType is used to identify the + resources and HTTP methods on those resources to which a + security constraint applies. If no HTTP methods are specified, + then the security constraint applies to all HTTP methods. + If HTTP methods are specified by http-method-omission + elements, the security constraint applies to all methods + except those identified in the collection. + http-method-omission and http-method elements are never + mixed in the same collection. + + Used in: security-constraint + + + + + + + + + The web-resource-name contains the name of this web + resource collection. + + + + + + + + + + + + Each http-method names an HTTP method to which the + constraint applies. + + + + + + + + + Each http-method-omission names an HTTP method to + which the constraint does not apply. + + + + + + + + + + + + + + + + + The welcome-file-list contains an ordered list of welcome + files elements. + + Used in: web-app + + + + + + + + + The welcome-file element contains file name to use + as a default welcome file, such as index.html + + + + + + + + + + + + + The localeType defines valid locale defined by ISO-639-1 + and ISO-3166. + + + + + + + + + + + + + The encodingType defines IANA character sets. + + + + + + + + + + + + + + + + The locale-encoding-mapping-list contains one or more + locale-encoding-mapping(s). + + + + + + + + + + + + + + + + + The locale-encoding-mapping contains locale name and + encoding name. The locale name must be either "Language-code", + such as "ja", defined by ISO-639 or "Language-code_Country-code", + such as "ja_JP". "Country code" is defined by ISO-3166. + + + + + + + + + + + + + + + + + + This element indicates that the ordering sub-element in which + it was placed should take special action regarding the ordering + of this application resource relative to other application + configuration resources. + See section 8.2.2 of the specification for details. + + + + + + + + + + + + + + This element specifies configuration information related to the + handling of multipart/form-data requests. + + + + + + + + + The directory location where uploaded files will be stored + + + + + + + + + The maximum size limit of uploaded files + + + + + + + + + The maximum size limit of multipart/form-data requests + + + + + + + + + The size threshold after which an uploaded file will be + written to disk + + + + + + + + diff --git a/appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/web-jsptaglibrary_3_1.xsd b/appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/web-jsptaglibrary_3_1.xsd new file mode 100644 index 00000000000..e0dde1a814a --- /dev/null +++ b/appserver/deployment/schemas/src/main/resources/glassfish/lib/schemas/web-jsptaglibrary_3_1.xsd @@ -0,0 +1,1109 @@ + + + + + + Copyright (c) 2009, 2021 Oracle and/or its affiliates. All rights reserved. + + This program and the accompanying materials are made available under the + terms of the Eclipse Public License v. 2.0, which is available at + http://www.eclipse.org/legal/epl-2.0. + + This Source Code may also be made available under the following Secondary + Licenses when the conditions for such availability set forth in the + Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + version 2 with the GNU Classpath Exception, which is available at + https://www.gnu.org/software/classpath/license.html. + + SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + + + + + + + + ... + + + The instance documents may indicate the published + version of the schema using xsi:schemaLocation attribute + for Jakarta EE namespace with the following location: + + https://jakarta.ee/xml/ns/jakartaee/web-jsptaglibrary_3_1.xsd + + ]]> + + + + + + + + + + + + + The taglib tag is the document root. + The definition of taglib is provided + by the tldTaglibType. + + + + + + + + The taglib element contains, among other things, tag and + tag-file elements. + The name subelements of these elements must each be unique. + + + + + + + + + + + The taglib element contains function elements. + The name subelements of these elements must each be unique. + + + + + + + + + + + + + + + + Specifies the type of body that is valid for a tag. + This value is used by the JSP container to validate + that a tag invocation has the correct body syntax and + by page composition tools to assist the page author + in providing a valid tag body. + + There are currently four values specified: + + tagdependent The body of the tag is interpreted by the tag + implementation itself, and is most likely + in a different "language", e.g embedded SQL + statements. + + JSP The body of the tag contains nested JSP + syntax. + + empty The body must be empty + + scriptless The body accepts only template text, EL + Expressions, and JSP action elements. No + scripting elements are allowed. + + + + + + + + + + + + + + + + + + + + + Defines the canonical name of a tag or attribute being + defined. + + The name must conform to the lexical rules for an NMTOKEN. + + + + + + + + + + + + + + + + A validator that can be used to validate + the conformance of a JSP page to using this tag library is + defined by a validatorType. + + + + + + + + + + Defines the TagLibraryValidator class that can be used + to validate the conformance of a JSP page to using this + tag library. + + + + + + + + + The init-param element contains a name/value pair as an + initialization param. + + + + + + + + + + + + + + + + The tag defines a unique tag in this tag library. It has one + attribute, id. + + The tag element may have several subelements defining: + + description Optional tag-specific information + + display-name A short name that is intended to be + displayed by tools + + icon Optional icon element that can be used + by tools + + name The unique action name + + tag-class The tag handler class implementing + jakarta.servlet.jsp.tagext.JspTag + + tei-class An optional subclass of + jakarta.servlet.jsp.tagext.TagExtraInfo + + body-content The body content type + + variable Optional scripting variable information + + attribute All attributes of this action that are + evaluated prior to invocation. + + dynamic-attributes Whether this tag supports additional + attributes with dynamic names. If + true, the tag-class must implement the + jakarta.servlet.jsp.tagext.DynamicAttributes + interface. Defaults to false. + + example Optional informal description of an + example of a use of this tag + + tag-extension Zero or more extensions that provide extra + information about this tag, for tool + consumption + + + + + + + + + + + Defines the subclass of jakarta.servlet.jsp.tagext.JspTag + that implements the request time semantics for + this tag. (required) + + + + + + + + + Defines the subclass of jakarta.servlet.jsp.tagext.TagExtraInfo + for this tag. (optional) + + If this is not given, the class is not consulted at + translation time. + + + + + + + + + Specifies the format for the body of this tag. + The default in JSP 1.2 was "JSP" but because this + is an invalid setting for simple tag handlers, there + is no longer a default in JSP 2.0. A reasonable + default for simple tag handlers is "scriptless" if + the tag can have a body. + + + + + + + + + + + + The example element contains an informal description + of an example of the use of a tag. + + + + + + + + + Tag extensions are for tool use only and must not affect + the behavior of a container. + + + + + + + + + + + + + + + + Defines an action in this tag library that is implemented + as a .tag file. + + The tag-file element has two required subelements: + + description Optional tag-specific information + + display-name A short name that is intended to be + displayed by tools + + icon Optional icon element that can be used + by tools + + name The unique action name + + path Where to find the .tag file implementing this + action, relative to the root of the web + application or the root of the JAR file for a + tag library packaged in a JAR. This must + begin with /WEB-INF/tags if the .tag file + resides in the WAR, or /META-INF/tags if the + .tag file resides in a JAR. + + example Optional informal description of an + example of a use of this tag + + tag-extension Zero or more extensions that provide extra + information about this tag, for tool + consumption + + + + + + + + + + + + The example element contains an informal description + of an example of the use of a tag. + + + + + + + + + Tag extensions are for tool use only and must not affect + the behavior of a container. + + + + + + + + + + + + + + + + The function element is used to provide information on each + function in the tag library that is to be exposed to the EL. + + The function element may have several subelements defining: + + description Optional tag-specific information + + display-name A short name that is intended to be + displayed by tools + + icon Optional icon element that can be used + by tools + + name A unique name for this function + + function-class Provides the name of the Java class that + implements the function + + function-signature Provides the signature, as in the Java + Language Specification, of the Java + method that is to be used to implement + the function. + + example Optional informal description of an + example of a use of this function + + function-extension Zero or more extensions that provide extra + information about this function, for tool + consumption + + + + + + + + + + A unique name for this function. + + + + + + + + + Provides the fully-qualified class name of the Java + class containing the static method that implements + the function. + + + + + + + + + Provides the signature, of the static Java method that is + to be used to implement the function. The syntax of the + function-signature element is as follows: + + FunctionSignature ::= ReturnType S MethodName S? + '(' S? Parameters? S? ')' + + ReturnType ::= Type + + MethodName ::= Identifier + + Parameters ::= Parameter + | ( Parameter S? ',' S? Parameters ) + + Parameter ::= Type + + Where: + + * Type is a basic type or a fully qualified + Java class name (including package name), + as per the 'Type' production in the Java + Language Specification, Second Edition, + Chapter 18. + + * Identifier is a Java identifier, as per + the 'Identifier' production in the Java + Language Specification, Second + Edition, Chapter 18. + + Example: + + java.lang.String nickName( java.lang.String, int ) + + + + + + + + + The example element contains an informal description + of an example of the use of this function. + + + + + + + + + Function extensions are for tool use only and must not + affect the behavior of a container. + + + + + + + + + + + + + + + + The taglib tag is the document root, it defines: + + description a simple string describing the "use" of this + taglib, should be user discernable + + display-name the display-name element contains a + short name that is intended to be displayed + by tools + + icon optional icon that can be used by tools + + tlib-version the version of the tag library implementation + + short-name a simple default short name that could be + used by a JSP authoring tool to create + names with a mnemonic value; for example, + the it may be used as the prefered prefix + value in taglib directives + + uri a uri uniquely identifying this taglib + + validator optional TagLibraryValidator information + + listener optional event listener specification + + tag tags in this tag library + + tag-file tag files in this tag library + + function zero or more EL functions defined in this + tag library + + taglib-extension zero or more extensions that provide extra + information about this taglib, for tool + consumption + + + + + + + + + + Describes this version (number) of the taglibrary. + It is described as a dewey decimal. + + + + + + + + + Defines a simple default name that could be used by + a JSP authoring tool to create names with a + mnemonicvalue; for example, it may be used as the + preferred prefix value in taglib directives. Do + not use white space, and do not start with digits + or underscore. + + + + + + + + + Defines a public URI that uniquely identifies this + version of the taglibrary. Leave it empty if it + does not apply. + + + + + + + + + + + + + + + + Taglib extensions are for tool use only and must not + affect the behavior of a container. + + + + + + + + + + Describes the JSP version (number) this taglibrary + requires in order to function (dewey decimal) + + + + + + + + + + + + + + + The variableType provides information on the scripting + variables defined by using this tag. It is a (translation + time) error for a tag that has one or more variable + subelements to have a TagExtraInfo class that returns a + non-null value from a call to getVariableInfo(). + + The subelements of variableType are of the form: + + description Optional description of this + variable + + name-given The variable name as a constant + + name-from-attribute The name of an attribute whose + (translation time) value will + give the name of the + variable. One of name-given or + name-from-attribute is required. + + variable-class Name of the class of the variable. + java.lang.String is default. + + declare Whether the variable is declared + or not. True is the default. + + scope The scope of the scripting varaible + defined. NESTED is default. + + + + + + + + + + + The name for the scripting variable. + + + + + + + + + The name of an attribute whose + (translation-time) value will give the name of + the variable. + + + + + + + + + + The optional name of the class for the scripting + variable. The default is java.lang.String. + + + + + + + + + Whether the scripting variable is to be defined + or not. See TagExtraInfo for details. This + element is optional and "true" is the default. + + + + + + + + + The element is optional and "NESTED" is the default. + + + + + + + + + + + + + + + + This type defines scope of the scripting variable. See + TagExtraInfo for details. The allowed values are, + "NESTED", "AT_BEGIN" and "AT_END". + + + + + + + + + + + + + + + + + + + + The attribute element defines an attribute for the nesting + tag. The attribute element may have several subelements + defining: + + description a description of the attribute + + name the name of the attribute + + required whether the attribute is required or + optional + + rtexprvalue whether the attribute is a runtime attribute + + type the type of the attributes + + fragment whether this attribute is a fragment + + deferred-value present if this attribute is to be parsed as a + jakarta.el.ValueExpression + + deferred-method present if this attribute is to be parsed as a + jakarta.el.MethodExpression + + + + + + + + + + + Defines if the nesting attribute is required or + optional. + + If not present then the default is "false", i.e + the attribute is optional. + + + + + + + + + + + + Defines if the nesting attribute can have scriptlet + expressions as a value, i.e the value of the + attribute may be dynamically calculated at request + time, as opposed to a static value determined at + translation time. + If not present then the default is "false", i.e the + attribute has a static value + + + + + + + + + Defines the Java type of the attributes value. + If this element is omitted, the expected type is + assumed to be "java.lang.Object". + + + + + + + + + + + Present if the value for this attribute is to be + passed to the tag handler as a + jakarta.el.ValueExpression. This allows for deferred + evaluation of EL expressions. An optional subelement + will contain the expected type that the value will + be coerced to after evaluation of the expression. + The type defaults to Object if one is not provided. + + + + + + + + + Present if the value for this attribute is to be + passed to the tag handler as a + jakarta.el.MethodExpression. This allows for deferred + evaluation of an EL expression that identifies a + method to be invoked on an Object. An optional + subelement will contain the expected method + signature. The signature defaults to "void method()" + if one is not provided. + + + + + + + + + + + "true" if this attribute is of type + jakarta.servlet.jsp.tagext.JspFragment, representing dynamic + content that can be re-evaluated as many times + as needed by the tag handler. If omitted or "false", + the default is still type="java.lang.String" + + + + + + + + + + + + + + + + + Defines information about how to provide the value for a + tag handler attribute that accepts a jakarta.el.ValueExpression. + + The deferred-value element has one optional subelement: + + type the expected type of the attribute + + + + + + + + + The fully-qualified name of the Java type that is the + expected type for this deferred expression. If this + element is omitted, the expected type is assumed to be + "java.lang.Object". + + + + + + + + + + + + + + + + Defines information about how to provide the value for a + tag handler attribute that accepts a jakarta.el.MethodExpression. + + The deferred-method element has one optional subelement: + + method-signature Provides the signature, as in the Java + Language Specifies, that is expected for + the method being identified by the + expression. + + + + + + + + + Provides the expected signature of the method identified + by the jakarta.el.MethodExpression. + + This disambiguates overloaded methods and ensures that + the return value is of the expected type. + + The syntax of the method-signature element is identical + to that of the function-signature element. See the + documentation for function-signature for more details. + + The name of the method is for documentation purposes only + and is ignored by the JSP container. + + Example: + + boolean validate(java.lang.String) + + + + + + + + + + + + + + + + The tld-extensionType is used to indicate + extensions to a specific TLD element. + + It is used by elements to designate an extension block + that is targeted to a specific extension designated by + a set of extension elements that are declared by a + namespace. The namespace identifies the extension to + the tool that processes the extension. + + The type of the extension-element is abstract. Therefore, + a concrete type must be specified by the TLD using + xsi:type attribute for each extension-element. + + + + + + + + + + + + + + + + + + The extensibleType is an abstract base type that is used to + define the type of extension-elements. Instance documents + must substitute a known type to define the extension by + using xsi:type attribute to define the actual type of + extension-elements. + + + + + + + From a3384d8f941e50364b0e2bd85078104edf8de19e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mat=C4=9Bj=C4=8Dek?= Date: Wed, 15 May 2024 17:11:20 +0200 Subject: [PATCH 02/23] Updated dependency on concurrency TCK MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: David Matějček --- appserver/tests/tck/concurrency/pom.xml | 36 ++++++++++++------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/appserver/tests/tck/concurrency/pom.xml b/appserver/tests/tck/concurrency/pom.xml index 99de1478718..32c091f5ea1 100644 --- a/appserver/tests/tck/concurrency/pom.xml +++ b/appserver/tests/tck/concurrency/pom.xml @@ -58,7 +58,7 @@ jakarta.enterprise.concurrent jakarta.enterprise.concurrent-api - + jakarta.servlet jakarta.servlet-api @@ -67,15 +67,15 @@ jakarta.ejb jakarta.ejb-api - + jakarta.enterprise.concurrent jakarta.enterprise.concurrent-tck - 3.1.0-M1 + 3.1.0 - - + + @@ -84,7 +84,7 @@ arquillian-glassfish-server-managed 1.4 - + org.jboss.arquillian.junit5 arquillian-junit5-container @@ -105,7 +105,7 @@ ${junit.version} test - + org.netbeans.tools @@ -122,7 +122,7 @@ 17 - + maven-dependency-plugin @@ -148,41 +148,41 @@ - + maven-surefire-plugin - + -Xmx768m - + jakarta.enterprise.concurrent:jakarta.enterprise.concurrent-tck - + ${glassfish.root}/glassfish8 true 2048m - + jimage.dir=${project.build.directory}/jimage - + create-file-user --groups staff:mgr --passwordfile ${project.build.directory}/test-classes/j2ee.pass j2ee create-file-user --groups Manager --passwordfile ${project.build.directory}/test-classes/javajoe.pass javajoe - + - ${jakarta.tck.platform} + ${jakarta.tck.platform} ${jakarta.tck.platform} ${basedir}/src/main/java/ - + full @@ -202,4 +202,4 @@ - \ No newline at end of file + From 3047217e6a50d85de796d60c948168a45d0175aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mat=C4=9Bj=C4=8Dek?= Date: Wed, 15 May 2024 17:29:14 +0200 Subject: [PATCH 03/23] Added qualifiers annotation attribute processing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: David Matějček --- .../ManagedExecutorDefinitionDescriptor.java | 16 +++++++++++++-- ...ScheduledExecutorDefinitionDescriptor.java | 14 ++++++++++++- ...agedThreadFactoryDefinitionDescriptor.java | 14 ++++++++++++- .../ContextualResourceDefinition.java | 6 +++++- .../ManagedExecutorDefinitionConverter.java | 7 +++++-- .../ManagedExecutorDefinitionData.java | 20 ++++++++++++++----- .../ManagedExecutorDefinitionHandler.java | 3 +-- .../ManagedExecutorDefinitionListHandler.java | 3 +-- ...dScheduledExecutorDefinitionConverter.java | 6 +++++- ...anagedScheduledExecutorDefinitionData.java | 16 ++++++++++++++- ...nagedThreadFactoryDefinitionConverter.java | 6 +++++- .../ManagedThreadFactoryDefinitionData.java | 16 ++++++++++++++- 12 files changed, 107 insertions(+), 20 deletions(-) rename appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/{factory => handlers}/ManagedExecutorDefinitionData.java (85%) diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedExecutorDefinitionDescriptor.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedExecutorDefinitionDescriptor.java index d8e6bafbf19..214f4ef5241 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedExecutorDefinitionDescriptor.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedExecutorDefinitionDescriptor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, 2023 Eclipse Foundation and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -16,8 +16,8 @@ package com.sun.enterprise.deployment; -import com.sun.enterprise.deployment.annotation.factory.ManagedExecutorDefinitionData; import com.sun.enterprise.deployment.annotation.handlers.ContextualResourceDefinition; +import com.sun.enterprise.deployment.annotation.handlers.ManagedExecutorDefinitionData; import java.util.Objects; import java.util.Properties; @@ -70,6 +70,18 @@ public void setContext(String context) { } + @Override + public Class[] getQualifiers() { + return data.getQualifiers(); + } + + + @Override + public void setQualifiers(Class[] qualifiers) { + data.setQualifiers(qualifiers); + } + + public int getMaximumPoolSize() { return data.getMaximumPoolSize(); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedScheduledExecutorDefinitionDescriptor.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedScheduledExecutorDefinitionDescriptor.java index 2650eb86129..aac0a11f7f7 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedScheduledExecutorDefinitionDescriptor.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedScheduledExecutorDefinitionDescriptor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, 2023 Eclipse Foundation and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -70,6 +70,18 @@ public void setContext(String context) { } + @Override + public Class[] getQualifiers() { + return data.getQualifiers(); + } + + + @Override + public void setQualifiers(Class[] qualifiers) { + data.setQualifiers(qualifiers); + } + + public long getHungTaskThreshold() { return data.getHungTaskThreshold(); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedThreadFactoryDefinitionDescriptor.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedThreadFactoryDefinitionDescriptor.java index 05d364fe84c..17e9d09c1ad 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedThreadFactoryDefinitionDescriptor.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedThreadFactoryDefinitionDescriptor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Eclipse Foundation and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -70,6 +70,18 @@ public void setContext(String context) { } + @Override + public Class[] getQualifiers() { + return data.getQualifiers(); + } + + + @Override + public void setQualifiers(Class[] qualifiers) { + data.setQualifiers(qualifiers); + } + + public int getPriority() { return data.getPriority(); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextualResourceDefinition.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextualResourceDefinition.java index 69555f0f882..c34559b32c9 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextualResourceDefinition.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextualResourceDefinition.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Eclipse Foundation and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -33,6 +33,10 @@ public interface ContextualResourceDefinition extends Serializable { void setContext(String context); + Class[] getQualifiers(); + + void setQualifiers(Class[] qualifiers); + default SimpleJndiName getJndiName() { return new SimpleJndiName(getName()); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java index 20ec7909e2e..b9d487781c1 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Eclipse Foundation and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -18,7 +18,6 @@ import com.sun.enterprise.deployment.ManagedExecutorDefinitionDescriptor; import com.sun.enterprise.deployment.MetadataSource; -import com.sun.enterprise.deployment.annotation.factory.ManagedExecutorDefinitionData; import jakarta.enterprise.concurrent.ManagedExecutorDefinition; @@ -73,6 +72,7 @@ ManagedExecutorDefinitionData convert(ManagedExecutorDefinition annotation) { ManagedExecutorDefinitionData data = new ManagedExecutorDefinitionData(); data.setName(TranslatedConfigView.expandValue(annotation.name())); data.setContext(TranslatedConfigView.expandValue(annotation.context())); + data.setQualifiers(annotation.qualifiers()); if (annotation.hungTaskThreshold() < 0) { data.setHungAfterSeconds(0); @@ -95,6 +95,9 @@ void merge(ManagedExecutorDefinitionData annotationData, ManagedExecutorDefiniti throw new IllegalArgumentException("Cannot merge managed executors with different names: " + annotationData.getName() + " x " + descriptorData.getName()); } + if (descriptorData.getQualifiers().length == 0) { + descriptorData.setQualifiers(annotationData.getQualifiers()); + } if (descriptorData.getHungAfterSeconds() <= 0 && annotationData.getHungAfterSeconds() != 0) { descriptorData.setHungAfterSeconds(annotationData.getHungAfterSeconds()); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/factory/ManagedExecutorDefinitionData.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionData.java similarity index 85% rename from appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/factory/ManagedExecutorDefinitionData.java rename to appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionData.java index 988a83f2949..063c08ae87c 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/factory/ManagedExecutorDefinitionData.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Eclipse Foundation and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -14,9 +14,7 @@ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 */ -package com.sun.enterprise.deployment.annotation.factory; - -import com.sun.enterprise.deployment.annotation.handlers.ContextualResourceDefinition; +package com.sun.enterprise.deployment.annotation.handlers; import java.util.Properties; @@ -29,6 +27,7 @@ public class ManagedExecutorDefinitionData implements ContextualResourceDefiniti private String name; private String context; + private Class[] qualifiers; private int maximumPoolSize = Integer.MAX_VALUE; private long hungAfterSeconds; private final Properties properties = new Properties(); @@ -57,6 +56,18 @@ public void setContext(String context) { } + @Override + public Class[] getQualifiers() { + return qualifiers; + } + + + @Override + public void setQualifiers(Class[] qualifiers) { + this.qualifiers = qualifiers; + } + + public int getMaximumPoolSize() { return maximumPoolSize; } @@ -101,5 +112,4 @@ public void addManagedExecutorPropertyDescriptor(String name, String value) { public String toString() { return super.toString() + "[" + getName() + "]"; } - } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionHandler.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionHandler.java index 1489482a14d..7479b461ad3 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionHandler.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Eclipse Foundation and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -17,7 +17,6 @@ package com.sun.enterprise.deployment.annotation.handlers; import com.sun.enterprise.deployment.annotation.context.ResourceContainerContext; -import com.sun.enterprise.deployment.annotation.factory.ManagedExecutorDefinitionData; import jakarta.enterprise.concurrent.ManagedExecutorDefinition; import jakarta.inject.Inject; diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionListHandler.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionListHandler.java index 35e52cdba7a..25836b177f5 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionListHandler.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionListHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Eclipse Foundation and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -17,7 +17,6 @@ package com.sun.enterprise.deployment.annotation.handlers; import com.sun.enterprise.deployment.annotation.context.ResourceContainerContext; -import com.sun.enterprise.deployment.annotation.factory.ManagedExecutorDefinitionData; import jakarta.enterprise.concurrent.ManagedExecutorDefinition; import jakarta.inject.Inject; diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java index c23b29124c0..be236a5a2c9 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Eclipse Foundation and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -70,6 +70,7 @@ ManagedScheduledExecutorDefinitionData convert(ManagedScheduledExecutorDefinitio LOG.log(Level.DEBUG, "convert(annotation={0})", annotation); ManagedScheduledExecutorDefinitionData data = new ManagedScheduledExecutorDefinitionData(); data.setName(TranslatedConfigView.expandValue(annotation.name())); + data.setQualifiers(annotation.qualifiers()); data.setContext(TranslatedConfigView.expandValue(annotation.context())); if (annotation.hungTaskThreshold() < 0) { @@ -93,6 +94,9 @@ void merge(ManagedScheduledExecutorDefinitionData annotationData, ManagedSchedul throw new IllegalArgumentException("Cannot merge managed executors with different names: " + annotationData.getName() + " x " + descriptorData.getName()); } + if (descriptorData.getQualifiers().length == 0) { + descriptorData.setQualifiers(annotationData.getQualifiers()); + } if (descriptorData.getHungTaskThreshold() <= 0 && annotationData.getHungTaskThreshold() != 0) { descriptorData.setHungTaskThreshold(annotationData.getHungTaskThreshold()); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionData.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionData.java index 05ffbface06..c7b3d6b1fa8 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionData.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Eclipse Foundation and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -23,8 +23,10 @@ */ public class ManagedScheduledExecutorDefinitionData implements ContextualResourceDefinition { + private static final long serialVersionUID = -5569777558325563130L; private String name; private String context; + private Class[] qualifiers; private long hungTaskThreshold; private int maxAsync = Integer.MAX_VALUE; private Properties properties = new Properties(); @@ -53,6 +55,18 @@ public void setContext(String context) { } + @Override + public Class[] getQualifiers() { + return qualifiers; + } + + + @Override + public void setQualifiers(Class[] qualifiers) { + this.qualifiers = qualifiers; + } + + public long getHungTaskThreshold() { return hungTaskThreshold; } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java index 40dd8745945..1cbebe7ffa9 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Eclipse Foundation and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -71,6 +71,7 @@ ManagedThreadFactoryDefinitionData convert(ManagedThreadFactoryDefinition annota LOG.log(Level.DEBUG, "convert(annotation={0})", annotation); ManagedThreadFactoryDefinitionData data = new ManagedThreadFactoryDefinitionData(); data.setName(TranslatedConfigView.expandValue(annotation.name())); + data.setQualifiers(annotation.qualifiers()); data.setContext(TranslatedConfigView.expandValue(annotation.context())); if (annotation.priority() <= 0) { data.setPriority(Thread.NORM_PRIORITY); @@ -89,6 +90,9 @@ void merge(ManagedThreadFactoryDefinitionData annotationData, throw new IllegalArgumentException("Cannot merge managed thread factories with different names: " + annotationData.getName() + " x " + descriptorData.getName()); } + if (descriptorData.getQualifiers().length == 0) { + descriptorData.setQualifiers(annotationData.getQualifiers()); + } if (descriptorData.getPriority() == -1 && annotationData.getPriority() != -1) { descriptorData.setPriority(annotationData.getPriority()); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionData.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionData.java index 94398f7b7ac..773c774d483 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionData.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Eclipse Foundation and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -26,9 +26,11 @@ public class ManagedThreadFactoryDefinitionData implements ContextualResourceDef private String name; private String context; + private Class[] qualifiers; private int priority = Thread.NORM_PRIORITY; private Properties properties = new Properties(); + @Override public String getName() { return name; @@ -53,6 +55,18 @@ public void setContext(String context) { } + @Override + public Class[] getQualifiers() { + return qualifiers; + } + + + @Override + public void setQualifiers(Class[] qualifiers) { + this.qualifiers = qualifiers; + } + + public int getPriority() { return priority; } From d3f8bbfd5609a64281ddb6ac893ffbeedb4e65da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mat=C4=9Bj=C4=8Dek?= Date: Wed, 15 May 2024 17:29:38 +0200 Subject: [PATCH 04/23] Dependency on Concurro snapshot version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: David Matějček --- appserver/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appserver/pom.xml b/appserver/pom.xml index 80e038c93e2..ffb0347b50f 100644 --- a/appserver/pom.xml +++ b/appserver/pom.xml @@ -90,7 +90,7 @@ 3.1.0 - 3.1.0-M3 + 3.1.0-SNAPSHOT 2.2.0 From 3effb6bfacf114c7cab126fa37b3c62bf3bc1220 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mat=C4=9Bj=C4=8Dek?= Date: Fri, 17 May 2024 22:28:11 +0200 Subject: [PATCH 05/23] Added the attribute 'virtual', new in Concurrency 3.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: David Matějček --- .../ManagedExecutorDefinitionDescriptor.java | 12 ++++++++++++ ...anagedScheduledExecutorDefinitionDescriptor.java | 12 ++++++++++++ .../ManagedThreadFactoryDefinitionDescriptor.java | 12 ++++++++++++ .../handlers/ContextualResourceDefinition.java | 5 +++++ .../ManagedExecutorDefinitionConverter.java | 4 ++++ .../handlers/ManagedExecutorDefinitionData.java | 13 +++++++++++++ ...ManagedScheduledExecutorDefinitionConverter.java | 5 ++++- .../ManagedScheduledExecutorDefinitionData.java | 13 +++++++++++++ .../ManagedThreadFactoryDefinitionConverter.java | 4 ++++ .../ManagedThreadFactoryDefinitionData.java | 13 +++++++++++++ 10 files changed, 92 insertions(+), 1 deletion(-) diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedExecutorDefinitionDescriptor.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedExecutorDefinitionDescriptor.java index 214f4ef5241..e9b6a6b6a81 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedExecutorDefinitionDescriptor.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedExecutorDefinitionDescriptor.java @@ -82,6 +82,18 @@ public void setQualifiers(Class[] qualifiers) { } + @Override + public boolean isVirtual() { + return data.isVirtual(); + } + + + @Override + public void setVirtual(boolean virtual) { + data.setVirtual(virtual); + } + + public int getMaximumPoolSize() { return data.getMaximumPoolSize(); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedScheduledExecutorDefinitionDescriptor.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedScheduledExecutorDefinitionDescriptor.java index aac0a11f7f7..8927bc8a3ca 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedScheduledExecutorDefinitionDescriptor.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedScheduledExecutorDefinitionDescriptor.java @@ -82,6 +82,18 @@ public void setQualifiers(Class[] qualifiers) { } + @Override + public boolean isVirtual() { + return data.isVirtual(); + } + + + @Override + public void setVirtual(boolean virtual) { + data.setVirtual(virtual); + } + + public long getHungTaskThreshold() { return data.getHungTaskThreshold(); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedThreadFactoryDefinitionDescriptor.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedThreadFactoryDefinitionDescriptor.java index 17e9d09c1ad..808307b287f 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedThreadFactoryDefinitionDescriptor.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedThreadFactoryDefinitionDescriptor.java @@ -82,6 +82,18 @@ public void setQualifiers(Class[] qualifiers) { } + @Override + public boolean isVirtual() { + return data.isVirtual(); + } + + + @Override + public void setVirtual(boolean virtual) { + data.setVirtual(virtual); + } + + public int getPriority() { return data.getPriority(); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextualResourceDefinition.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextualResourceDefinition.java index c34559b32c9..e3ba0142e1c 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextualResourceDefinition.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextualResourceDefinition.java @@ -37,6 +37,11 @@ public interface ContextualResourceDefinition extends Serializable { void setQualifiers(Class[] qualifiers); + boolean isVirtual(); + + void setVirtual(boolean virtual); + + default SimpleJndiName getJndiName() { return new SimpleJndiName(getName()); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java index b9d487781c1..9a7de2c111a 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java @@ -73,6 +73,7 @@ ManagedExecutorDefinitionData convert(ManagedExecutorDefinition annotation) { data.setName(TranslatedConfigView.expandValue(annotation.name())); data.setContext(TranslatedConfigView.expandValue(annotation.context())); data.setQualifiers(annotation.qualifiers()); + data.setVirtual(annotation.virtual()); if (annotation.hungTaskThreshold() < 0) { data.setHungAfterSeconds(0); @@ -98,6 +99,9 @@ void merge(ManagedExecutorDefinitionData annotationData, ManagedExecutorDefiniti if (descriptorData.getQualifiers().length == 0) { descriptorData.setQualifiers(annotationData.getQualifiers()); } + if (!descriptorData.isVirtual()) { + descriptorData.setVirtual(annotationData.isVirtual()); + } if (descriptorData.getHungAfterSeconds() <= 0 && annotationData.getHungAfterSeconds() != 0) { descriptorData.setHungAfterSeconds(annotationData.getHungAfterSeconds()); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionData.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionData.java index 063c08ae87c..c79e25eaa97 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionData.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionData.java @@ -30,6 +30,7 @@ public class ManagedExecutorDefinitionData implements ContextualResourceDefiniti private Class[] qualifiers; private int maximumPoolSize = Integer.MAX_VALUE; private long hungAfterSeconds; + private boolean virtual; private final Properties properties = new Properties(); @Override @@ -68,6 +69,18 @@ public void setQualifiers(Class[] qualifiers) { } + @Override + public boolean isVirtual() { + return virtual; + } + + + @Override + public void setVirtual(boolean virtual) { + this.virtual = virtual; + } + + public int getMaximumPoolSize() { return maximumPoolSize; } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java index be236a5a2c9..882fb1ee7a3 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java @@ -72,7 +72,7 @@ ManagedScheduledExecutorDefinitionData convert(ManagedScheduledExecutorDefinitio data.setName(TranslatedConfigView.expandValue(annotation.name())); data.setQualifiers(annotation.qualifiers()); data.setContext(TranslatedConfigView.expandValue(annotation.context())); - + data.setVirtual(annotation.virtual()); if (annotation.hungTaskThreshold() < 0) { data.setHungTaskThreshold(0); } else { @@ -97,6 +97,9 @@ void merge(ManagedScheduledExecutorDefinitionData annotationData, ManagedSchedul if (descriptorData.getQualifiers().length == 0) { descriptorData.setQualifiers(annotationData.getQualifiers()); } + if (!descriptorData.isVirtual()) { + descriptorData.setVirtual(annotationData.isVirtual()); + } if (descriptorData.getHungTaskThreshold() <= 0 && annotationData.getHungTaskThreshold() != 0) { descriptorData.setHungTaskThreshold(annotationData.getHungTaskThreshold()); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionData.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionData.java index c7b3d6b1fa8..e3d09d1d2ed 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionData.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionData.java @@ -27,6 +27,7 @@ public class ManagedScheduledExecutorDefinitionData implements ContextualResourc private String name; private String context; private Class[] qualifiers; + private boolean virtual; private long hungTaskThreshold; private int maxAsync = Integer.MAX_VALUE; private Properties properties = new Properties(); @@ -67,6 +68,18 @@ public void setQualifiers(Class[] qualifiers) { } + @Override + public boolean isVirtual() { + return virtual; + } + + + @Override + public void setVirtual(boolean virtual) { + this.virtual = virtual; + } + + public long getHungTaskThreshold() { return hungTaskThreshold; } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java index 1cbebe7ffa9..eee6ecce4a5 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java @@ -72,6 +72,7 @@ ManagedThreadFactoryDefinitionData convert(ManagedThreadFactoryDefinition annota ManagedThreadFactoryDefinitionData data = new ManagedThreadFactoryDefinitionData(); data.setName(TranslatedConfigView.expandValue(annotation.name())); data.setQualifiers(annotation.qualifiers()); + data.setVirtual(annotation.virtual()); data.setContext(TranslatedConfigView.expandValue(annotation.context())); if (annotation.priority() <= 0) { data.setPriority(Thread.NORM_PRIORITY); @@ -93,6 +94,9 @@ void merge(ManagedThreadFactoryDefinitionData annotationData, if (descriptorData.getQualifiers().length == 0) { descriptorData.setQualifiers(annotationData.getQualifiers()); } + if (!descriptorData.isVirtual()) { + descriptorData.setVirtual(annotationData.isVirtual()); + } if (descriptorData.getPriority() == -1 && annotationData.getPriority() != -1) { descriptorData.setPriority(annotationData.getPriority()); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionData.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionData.java index 773c774d483..935fefa58a3 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionData.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionData.java @@ -28,6 +28,7 @@ public class ManagedThreadFactoryDefinitionData implements ContextualResourceDef private String context; private Class[] qualifiers; private int priority = Thread.NORM_PRIORITY; + private boolean virtual; private Properties properties = new Properties(); @@ -67,6 +68,18 @@ public void setQualifiers(Class[] qualifiers) { } + @Override + public boolean isVirtual() { + return virtual; + } + + + @Override + public void setVirtual(boolean virtual) { + this.virtual = virtual; + } + + public int getPriority() { return priority; } From 1efa8973611cca411343f3bee0b20e3fbc5c7687 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mat=C4=9Bj=C4=8Dek?= Date: Sat, 18 May 2024 10:37:25 +0200 Subject: [PATCH 06/23] Fixed NPE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: David Matějček --- .../annotation/handlers/ManagedExecutorDefinitionConverter.java | 2 +- .../handlers/ManagedScheduledExecutorDefinitionConverter.java | 2 +- .../handlers/ManagedThreadFactoryDefinitionConverter.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java index 9a7de2c111a..3ba40942460 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java @@ -96,7 +96,7 @@ void merge(ManagedExecutorDefinitionData annotationData, ManagedExecutorDefiniti throw new IllegalArgumentException("Cannot merge managed executors with different names: " + annotationData.getName() + " x " + descriptorData.getName()); } - if (descriptorData.getQualifiers().length == 0) { + if (descriptorData.getQualifiers() == null || descriptorData.getQualifiers().length == 0) { descriptorData.setQualifiers(annotationData.getQualifiers()); } if (!descriptorData.isVirtual()) { diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java index 882fb1ee7a3..22698073341 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java @@ -94,7 +94,7 @@ void merge(ManagedScheduledExecutorDefinitionData annotationData, ManagedSchedul throw new IllegalArgumentException("Cannot merge managed executors with different names: " + annotationData.getName() + " x " + descriptorData.getName()); } - if (descriptorData.getQualifiers().length == 0) { + if (descriptorData.getQualifiers() == null || descriptorData.getQualifiers().length == 0) { descriptorData.setQualifiers(annotationData.getQualifiers()); } if (!descriptorData.isVirtual()) { diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java index eee6ecce4a5..60de021db05 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java @@ -91,7 +91,7 @@ void merge(ManagedThreadFactoryDefinitionData annotationData, throw new IllegalArgumentException("Cannot merge managed thread factories with different names: " + annotationData.getName() + " x " + descriptorData.getName()); } - if (descriptorData.getQualifiers().length == 0) { + if (descriptorData.getQualifiers() == null || descriptorData.getQualifiers().length == 0) { descriptorData.setQualifiers(annotationData.getQualifiers()); } if (!descriptorData.isVirtual()) { From 566d4bfa87c2d0689791230515e543fe2ebce6e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mat=C4=9Bj=C4=8Dek?= Date: Sun, 2 Jun 2024 17:17:49 +0200 Subject: [PATCH 07/23] integrate concurro and concurrency 3.1 # Conflicts: # appserver/common/glassfish-naming/src/main/java/com/sun/enterprise/naming/impl/GlassfishNamingManagerImpl.java # appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/util/DOLUtils.java --- appserver/common/container-common/pom.xml | 7 ++- .../common/impl/ComponentEnvManagerImpl.java | 46 ++++++++++++++++ .../impl/GlassfishNamingManagerImpl.java | 9 ++++ .../ContextServiceDefinitionDescriptor.java | 8 +++ .../ContextServiceDefinitionConverter.java | 52 ++++++++++++++++++- .../ContextServiceDefinitionData.java | 9 ++++ .../ContextServiceDefinitionHandler.java | 9 ++-- .../node/ContextServiceDefinitionNode.java | 3 ++ .../node/ManagedExecutorDefinitionNode.java | 3 ++ ...anagedScheduledExecutorDefinitionNode.java | 3 ++ .../ManagedThreadFactoryDefinitionNode.java | 3 ++ .../enterprise/deployment/util/DOLUtils.java | 3 ++ .../deployment/xml/ConcurrencyTagNames.java | 5 ++ 13 files changed, 152 insertions(+), 8 deletions(-) diff --git a/appserver/common/container-common/pom.xml b/appserver/common/container-common/pom.xml index b7c404ca7c6..0ad89898877 100755 --- a/appserver/common/container-common/pom.xml +++ b/appserver/common/container-common/pom.xml @@ -2,6 +2,7 @@ + + + + diff --git a/appserver/common/container-common/src/main/java/com/sun/enterprise/container/common/impl/ComponentEnvManagerImpl.java b/appserver/common/container-common/src/main/java/com/sun/enterprise/container/common/impl/ComponentEnvManagerImpl.java index 7154d456ef8..6bd4bfbed31 100644 --- a/appserver/common/container-common/src/main/java/com/sun/enterprise/container/common/impl/ComponentEnvManagerImpl.java +++ b/appserver/common/container-common/src/main/java/com/sun/enterprise/container/common/impl/ComponentEnvManagerImpl.java @@ -83,7 +83,7 @@ import org.glassfish.api.naming.JNDIBinding; import org.glassfish.api.naming.NamingObjectProxy; import org.glassfish.api.naming.SimpleJndiName; -import org.glassfish.concurro.internal.ConcurrencyManagedCDIBeans; +//import org.glassfish.concurro.internal.ConcurrencyManagedCDIBeans; import org.glassfish.deployment.common.Descriptor; import org.glassfish.deployment.common.JavaEEResourceType; import org.glassfish.hk2.api.ServiceLocator; @@ -393,6 +393,7 @@ private void addAllDescriptorBindings(JndiNameEnvironment jndiEnv, ScopeType sco private void registerConcurrencyCDIQualifiers(Collection jndiBindings, Set concurrencyDescs) { if (!concurrencyDescs.isEmpty()) { + /* ConcurrencyManagedCDIBeans setup = new ConcurrencyManagedCDIBeans(); for (ResourceDescriptor desc : concurrencyDescs) { // TODO: preferably introduce common predecessor for all the descriptors @@ -417,6 +418,7 @@ private void registerConcurrencyCDIQualifiers(Collection jndiBindin } } jndiBindings.add(new CompEnvBinding(new SimpleJndiName(ConcurrencyManagedCDIBeans.JDNI_NAME), setup)); + */ } } From 30083a3a7955d068b1824a428b284a4c7a39e593 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mat=C4=9Bj=C4=8Dek?= Date: Mon, 20 May 2024 09:30:04 +0200 Subject: [PATCH 09/23] More robust work with qualifiers in descriptors and annotations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: David Matějček --- .../ContextServiceDefinitionDescriptor.java | 15 +++++++-- .../ManagedExecutorDefinitionDescriptor.java | 11 +++++-- ...ScheduledExecutorDefinitionDescriptor.java | 16 ++++++---- ...agedThreadFactoryDefinitionDescriptor.java | 16 ++++++---- .../ContextServiceDefinitionConverter.java | 16 +++++----- .../ContextServiceDefinitionData.java | 30 +++++++++++------ .../ContextServiceDefinitionHandler.java | 6 +--- .../ContextualResourceDefinition.java | 7 ++-- .../ManagedExecutorDefinitionConverter.java | 4 +-- .../ManagedExecutorDefinitionData.java | 17 +++++++--- ...dScheduledExecutorDefinitionConverter.java | 4 +-- ...anagedScheduledExecutorDefinitionData.java | 24 ++++++++------ ...nagedThreadFactoryDefinitionConverter.java | 4 +-- .../ManagedThreadFactoryDefinitionData.java | 24 ++++++++------ .../node/ContextServiceDefinitionNode.java | 26 +++++++++++++-- .../node/ManagedExecutorDefinitionNode.java | 32 +++++++++++++++++-- ...anagedScheduledExecutorDefinitionNode.java | 31 ++++++++++++++++-- .../ManagedThreadFactoryDefinitionNode.java | 32 +++++++++++++++++-- .../deployment/xml/ConcurrencyTagNames.java | 8 ++--- 19 files changed, 234 insertions(+), 89 deletions(-) diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ContextServiceDefinitionDescriptor.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ContextServiceDefinitionDescriptor.java index 1cea63b1489..4ef37dcba24 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ContextServiceDefinitionDescriptor.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ContextServiceDefinitionDescriptor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, 2023 Eclipse Foundation and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. All rights reserved. * Copyright (c) 2024 Payara Foundation and/or its affiliates * * This program and the accompanying materials are made available under the @@ -19,6 +19,7 @@ import com.sun.enterprise.deployment.annotation.handlers.ContextServiceDefinitionData; +import java.util.List; import java.util.Objects; import java.util.Properties; import java.util.Set; @@ -59,14 +60,22 @@ public void setName(String name) { this.data.setName(new SimpleJndiName(name)); } - public Class[] getQualifiers() { + + public List> getQualifiers() { return data.getQualifiers(); } - public void setQualifiers(Class[] qualifiers) { + + public void setQualifiers(List> qualifiers) { data.setQualifiers(qualifiers); } + + public void addQualifier(Class qualifier) { + data.addQualifier(qualifier); + } + + public Set getCleared() { return data.getCleared(); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedExecutorDefinitionDescriptor.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedExecutorDefinitionDescriptor.java index e9b6a6b6a81..eb70bb0d6d3 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedExecutorDefinitionDescriptor.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedExecutorDefinitionDescriptor.java @@ -19,6 +19,7 @@ import com.sun.enterprise.deployment.annotation.handlers.ContextualResourceDefinition; import com.sun.enterprise.deployment.annotation.handlers.ManagedExecutorDefinitionData; +import java.util.List; import java.util.Objects; import java.util.Properties; @@ -71,17 +72,23 @@ public void setContext(String context) { @Override - public Class[] getQualifiers() { + public List> getQualifiers() { return data.getQualifiers(); } @Override - public void setQualifiers(Class[] qualifiers) { + public void setQualifiers(List> qualifiers) { data.setQualifiers(qualifiers); } + @Override + public void addQualifier(Class qualifier) { + data.addQualifier(qualifier); + } + + @Override public boolean isVirtual() { return data.isVirtual(); diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedScheduledExecutorDefinitionDescriptor.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedScheduledExecutorDefinitionDescriptor.java index 8927bc8a3ca..a6232ed604c 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedScheduledExecutorDefinitionDescriptor.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedScheduledExecutorDefinitionDescriptor.java @@ -19,6 +19,7 @@ import com.sun.enterprise.deployment.annotation.handlers.ContextualResourceDefinition; import com.sun.enterprise.deployment.annotation.handlers.ManagedScheduledExecutorDefinitionData; +import java.util.List; import java.util.Objects; import java.util.Properties; @@ -71,17 +72,23 @@ public void setContext(String context) { @Override - public Class[] getQualifiers() { + public List> getQualifiers() { return data.getQualifiers(); } @Override - public void setQualifiers(Class[] qualifiers) { + public void setQualifiers(List> qualifiers) { data.setQualifiers(qualifiers); } + @Override + public void addQualifier(Class qualifier) { + data.addQualifier(qualifier); + } + + @Override public boolean isVirtual() { return data.isVirtual(); @@ -119,11 +126,6 @@ public Properties getProperties() { } - public void setProperties(Properties properties) { - data.setProperties(properties); - } - - public void addManagedScheduledExecutorDefinitionDescriptor(ResourcePropertyDescriptor properties) { data.addManagedScheduledExecutorDefinitionDescriptor(properties.getName(), properties.getValue()); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedThreadFactoryDefinitionDescriptor.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedThreadFactoryDefinitionDescriptor.java index 808307b287f..86bd481577b 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedThreadFactoryDefinitionDescriptor.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedThreadFactoryDefinitionDescriptor.java @@ -19,6 +19,7 @@ import com.sun.enterprise.deployment.annotation.handlers.ContextualResourceDefinition; import com.sun.enterprise.deployment.annotation.handlers.ManagedThreadFactoryDefinitionData; +import java.util.List; import java.util.Properties; import org.glassfish.deployment.common.JavaEEResourceType; @@ -71,17 +72,23 @@ public void setContext(String context) { @Override - public Class[] getQualifiers() { + public List> getQualifiers() { return data.getQualifiers(); } @Override - public void setQualifiers(Class[] qualifiers) { + public void setQualifiers(List> qualifiers) { data.setQualifiers(qualifiers); } + @Override + public void addQualifier(Class qualifier) { + data.addQualifier(qualifier); + } + + @Override public boolean isVirtual() { return data.isVirtual(); @@ -109,11 +116,6 @@ public Properties getProperties() { } - public void setProperties(Properties properties) { - data.setProperties(properties); - } - - public void addManagedThreadFactoryPropertyDescriptor(ResourcePropertyDescriptor property) { addManagedThreadFactoryPropertyDescriptor(property.getName(), property.getValue()); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionConverter.java index ad327b61577..2b95c2acf4f 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionConverter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Eclipse Foundation and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. All rights reserved. * Copyright (c) 2024 Payara Foundation and/or its affiliates * * This program and the accompanying materials are made available under the @@ -18,11 +18,10 @@ package com.sun.enterprise.deployment.annotation.handlers; import com.sun.enterprise.deployment.ContextServiceDefinitionDescriptor; -import com.sun.enterprise.deployment.ManagedExecutorDefinitionDescriptor; import com.sun.enterprise.deployment.MetadataSource; - import com.sun.enterprise.deployment.ResourceDescriptor; import com.sun.enterprise.deployment.annotation.context.ResourceContainerContext; + import jakarta.enterprise.concurrent.ContextServiceDefinition; import java.lang.System.Logger; @@ -31,7 +30,6 @@ import java.util.Collections; import java.util.HashSet; import java.util.List; -import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -63,7 +61,7 @@ ContextServiceDefinitionData convert(ContextServiceDefinition definition) { data.setPropagated(evaluateContexts(definition.propagated(), unused)); data.setCleared(evaluateContexts(definition.cleared(), unused)); data.setUnchanged(evaluateContexts(definition.unchanged(), unused)); - data.setQualifiers(definition.qualifiers()); + data.setQualifiers(Arrays.asList(definition.qualifiers())); return data; } @@ -123,7 +121,7 @@ void merge(ContextServiceDefinitionData csd, ContextServiceDefinitionData descri descriptor.setUnchanged(new HashSet<>(csd.getUnchanged())); } - if (descriptor.getQualifiers() == null && csd.getQualifiers() != null) { + if (descriptor.getQualifiers().isEmpty() && !csd.getQualifiers().isEmpty()) { descriptor.setQualifiers(csd.getQualifiers()); } } @@ -143,7 +141,9 @@ public void updateDescriptors(ContextServiceDefinitionData data, ResourceContain } } - protected static List getExisting(ContextServiceDefinitionData descriptor, Set resourceDescriptors) { - return resourceDescriptors.stream().filter(d -> d.getJndiName().equals(descriptor.toString())).toList(); + + protected static List getExisting(ContextServiceDefinitionData descriptor, + Set resourceDescriptors) { + return resourceDescriptors.stream().filter(d -> d.getJndiName().equals(descriptor.getName())).toList(); } } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionData.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionData.java index 90c54a82d3a..1c1b396ade2 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionData.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, 2023 Eclipse Foundation and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. All rights reserved. * Copyright (c) 2024 Payara Foundation and/or its affiliates * * This program and the accompanying materials are made available under the @@ -18,7 +18,9 @@ package com.sun.enterprise.deployment.annotation.handlers; import java.io.Serializable; +import java.util.ArrayList; import java.util.HashSet; +import java.util.List; import java.util.Objects; import java.util.Properties; import java.util.Set; @@ -35,11 +37,11 @@ public class ContextServiceDefinitionData implements Serializable { private static final long serialVersionUID = -6964391431010485710L; private SimpleJndiName name; - private Class[] qualifiers; private Set cleared = new HashSet<>(); private Set propagated = new HashSet<>(); private Set unchanged = new HashSet<>(); - private Properties properties = new Properties(); + private final List> qualifiers = new ArrayList<>(); + private final Properties properties = new Properties(); public SimpleJndiName getName() { return name; @@ -50,14 +52,23 @@ public void setName(SimpleJndiName name) { this.name = name; } - public Class[] getQualifiers() { + + public List> getQualifiers() { return qualifiers; } - public void setQualifiers(Class[] qualifiers) { - this.qualifiers = qualifiers; + + public void setQualifiers(List> qualifiers) { + this.qualifiers.clear(); + this.qualifiers.addAll(qualifiers); + } + + + public void addQualifier(Class qualifier) { + this.qualifiers.add(qualifier); } + public Set getCleared() { return cleared; } @@ -109,7 +120,8 @@ public Properties getProperties() { public void setProperties(Properties properties) { - this.properties = properties; + this.properties.clear(); + this.properties.putAll(properties); } @@ -136,7 +148,7 @@ public int hashCode() { @Override public String toString() { - return super.toString() + "[name=" + name + ", cleared=" + cleared + ", propagated=" + propagated - + ", unchanged=" + unchanged + ']'; + return super.toString() + "[name=" + name + ", qualifiers=" + qualifiers + ", cleared=" + cleared + + ", propagated=" + propagated + ", unchanged=" + unchanged + ']'; } } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionHandler.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionHandler.java index da49799880c..210e9a21c12 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionHandler.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Eclipse Foundation and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. All rights reserved. * Copyright (c) 2024 Payara Foundation and/or its affiliates * * This program and the accompanying materials are made available under the @@ -17,7 +17,6 @@ package com.sun.enterprise.deployment.annotation.handlers; -import com.sun.enterprise.deployment.ContextServiceDefinitionDescriptor; import com.sun.enterprise.deployment.annotation.context.ResourceContainerContext; import jakarta.enterprise.concurrent.ContextServiceDefinition; @@ -27,11 +26,8 @@ import org.glassfish.apf.AnnotationInfo; import org.glassfish.apf.AnnotationProcessorException; import org.glassfish.apf.HandlerProcessingResult; -import org.glassfish.deployment.common.JavaEEResourceType; import org.jvnet.hk2.annotations.Service; -import static com.sun.enterprise.deployment.MetadataSource.ANNOTATION; - @Service @AnnotationHandlerFor(ContextServiceDefinition.class) public class ContextServiceDefinitionHandler extends AbstractResourceHandler { diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextualResourceDefinition.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextualResourceDefinition.java index e3ba0142e1c..99bf2b635e9 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextualResourceDefinition.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextualResourceDefinition.java @@ -17,6 +17,7 @@ package com.sun.enterprise.deployment.annotation.handlers; import java.io.Serializable; +import java.util.List; import org.glassfish.api.naming.SimpleJndiName; @@ -33,9 +34,11 @@ public interface ContextualResourceDefinition extends Serializable { void setContext(String context); - Class[] getQualifiers(); + List> getQualifiers(); - void setQualifiers(Class[] qualifiers); + void setQualifiers(List> qualifiers); + + void addQualifier(Class qualifier); boolean isVirtual(); diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java index 3ba40942460..e1ac081b4b4 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java @@ -72,7 +72,7 @@ ManagedExecutorDefinitionData convert(ManagedExecutorDefinition annotation) { ManagedExecutorDefinitionData data = new ManagedExecutorDefinitionData(); data.setName(TranslatedConfigView.expandValue(annotation.name())); data.setContext(TranslatedConfigView.expandValue(annotation.context())); - data.setQualifiers(annotation.qualifiers()); + data.setQualifiers(Arrays.asList(annotation.qualifiers())); data.setVirtual(annotation.virtual()); if (annotation.hungTaskThreshold() < 0) { @@ -96,7 +96,7 @@ void merge(ManagedExecutorDefinitionData annotationData, ManagedExecutorDefiniti throw new IllegalArgumentException("Cannot merge managed executors with different names: " + annotationData.getName() + " x " + descriptorData.getName()); } - if (descriptorData.getQualifiers() == null || descriptorData.getQualifiers().length == 0) { + if (descriptorData.getQualifiers().isEmpty()) { descriptorData.setQualifiers(annotationData.getQualifiers()); } if (!descriptorData.isVirtual()) { diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionData.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionData.java index c79e25eaa97..d83b3bd67c7 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionData.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionData.java @@ -16,6 +16,8 @@ package com.sun.enterprise.deployment.annotation.handlers; +import java.util.ArrayList; +import java.util.List; import java.util.Properties; /** @@ -27,10 +29,10 @@ public class ManagedExecutorDefinitionData implements ContextualResourceDefiniti private String name; private String context; - private Class[] qualifiers; private int maximumPoolSize = Integer.MAX_VALUE; private long hungAfterSeconds; private boolean virtual; + private final List> qualifiers = new ArrayList<>(); private final Properties properties = new Properties(); @Override @@ -58,14 +60,21 @@ public void setContext(String context) { @Override - public Class[] getQualifiers() { + public List> getQualifiers() { return qualifiers; } @Override - public void setQualifiers(Class[] qualifiers) { - this.qualifiers = qualifiers; + public void setQualifiers(List> qualifiers) { + this.qualifiers.clear(); + this.qualifiers.addAll(qualifiers); + } + + + @Override + public void addQualifier(Class qualifier) { + this.qualifiers.add(qualifier); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java index 22698073341..004abc04b66 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java @@ -70,7 +70,7 @@ ManagedScheduledExecutorDefinitionData convert(ManagedScheduledExecutorDefinitio LOG.log(Level.DEBUG, "convert(annotation={0})", annotation); ManagedScheduledExecutorDefinitionData data = new ManagedScheduledExecutorDefinitionData(); data.setName(TranslatedConfigView.expandValue(annotation.name())); - data.setQualifiers(annotation.qualifiers()); + data.setQualifiers(Arrays.asList(annotation.qualifiers())); data.setContext(TranslatedConfigView.expandValue(annotation.context())); data.setVirtual(annotation.virtual()); if (annotation.hungTaskThreshold() < 0) { @@ -94,7 +94,7 @@ void merge(ManagedScheduledExecutorDefinitionData annotationData, ManagedSchedul throw new IllegalArgumentException("Cannot merge managed executors with different names: " + annotationData.getName() + " x " + descriptorData.getName()); } - if (descriptorData.getQualifiers() == null || descriptorData.getQualifiers().length == 0) { + if (descriptorData.getQualifiers().isEmpty()) { descriptorData.setQualifiers(annotationData.getQualifiers()); } if (!descriptorData.isVirtual()) { diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionData.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionData.java index e3d09d1d2ed..f0baaf6dead 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionData.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionData.java @@ -16,6 +16,8 @@ package com.sun.enterprise.deployment.annotation.handlers; +import java.util.ArrayList; +import java.util.List; import java.util.Properties; /** @@ -26,11 +28,11 @@ public class ManagedScheduledExecutorDefinitionData implements ContextualResourc private static final long serialVersionUID = -5569777558325563130L; private String name; private String context; - private Class[] qualifiers; private boolean virtual; private long hungTaskThreshold; private int maxAsync = Integer.MAX_VALUE; - private Properties properties = new Properties(); + private final List> qualifiers = new ArrayList<>(); + private final Properties properties = new Properties(); @Override public String getName() { @@ -57,14 +59,21 @@ public void setContext(String context) { @Override - public Class[] getQualifiers() { + public List> getQualifiers() { return qualifiers; } @Override - public void setQualifiers(Class[] qualifiers) { - this.qualifiers = qualifiers; + public void setQualifiers(List> qualifiers) { + this.qualifiers.clear(); + this.qualifiers.addAll(qualifiers); + } + + + @Override + public void addQualifier(Class qualifier) { + this.qualifiers.add(qualifier); } @@ -105,11 +114,6 @@ public Properties getProperties() { } - public void setProperties(Properties properties) { - this.properties = properties; - } - - public void addManagedScheduledExecutorDefinitionDescriptor(String name, String value) { properties.put(name, value); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java index 60de021db05..1bf2f434e84 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java @@ -71,7 +71,7 @@ ManagedThreadFactoryDefinitionData convert(ManagedThreadFactoryDefinition annota LOG.log(Level.DEBUG, "convert(annotation={0})", annotation); ManagedThreadFactoryDefinitionData data = new ManagedThreadFactoryDefinitionData(); data.setName(TranslatedConfigView.expandValue(annotation.name())); - data.setQualifiers(annotation.qualifiers()); + data.setQualifiers(Arrays.asList(annotation.qualifiers())); data.setVirtual(annotation.virtual()); data.setContext(TranslatedConfigView.expandValue(annotation.context())); if (annotation.priority() <= 0) { @@ -91,7 +91,7 @@ void merge(ManagedThreadFactoryDefinitionData annotationData, throw new IllegalArgumentException("Cannot merge managed thread factories with different names: " + annotationData.getName() + " x " + descriptorData.getName()); } - if (descriptorData.getQualifiers() == null || descriptorData.getQualifiers().length == 0) { + if (descriptorData.getQualifiers().isEmpty()) { descriptorData.setQualifiers(annotationData.getQualifiers()); } if (!descriptorData.isVirtual()) { diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionData.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionData.java index 935fefa58a3..73e8db6aa0e 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionData.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionData.java @@ -16,6 +16,8 @@ package com.sun.enterprise.deployment.annotation.handlers; +import java.util.ArrayList; +import java.util.List; import java.util.Properties; /** @@ -26,10 +28,10 @@ public class ManagedThreadFactoryDefinitionData implements ContextualResourceDef private String name; private String context; - private Class[] qualifiers; private int priority = Thread.NORM_PRIORITY; private boolean virtual; - private Properties properties = new Properties(); + private final List> qualifiers = new ArrayList<>(); + private final Properties properties = new Properties(); @Override @@ -57,14 +59,21 @@ public void setContext(String context) { @Override - public Class[] getQualifiers() { + public List> getQualifiers() { return qualifiers; } @Override - public void setQualifiers(Class[] qualifiers) { - this.qualifiers = qualifiers; + public void setQualifiers(List> qualifiers) { + this.qualifiers.clear(); + this.qualifiers.addAll(qualifiers); + } + + + @Override + public void addQualifier(Class qualifier) { + this.qualifiers.add(qualifier); } @@ -95,11 +104,6 @@ public Properties getProperties() { } - public void setProperties(Properties properties) { - this.properties = properties; - } - - public void addManagedThreadFactoryPropertyDescriptor(String name, String value) { properties.put(name, value); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ContextServiceDefinitionNode.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ContextServiceDefinitionNode.java index 21b11f278df..1d7ad869836 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ContextServiceDefinitionNode.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ContextServiceDefinitionNode.java @@ -20,6 +20,8 @@ import com.sun.enterprise.deployment.ContextServiceDefinitionDescriptor; +import java.lang.System.Logger; +import java.lang.System.Logger.Level; import java.util.Map; import org.w3c.dom.Node; @@ -27,12 +29,14 @@ import static com.sun.enterprise.deployment.xml.ConcurrencyTagNames.CONTEXT_SERVICE_CLEARED; import static com.sun.enterprise.deployment.xml.ConcurrencyTagNames.CONTEXT_SERVICE_PROPAGATED; import static com.sun.enterprise.deployment.xml.ConcurrencyTagNames.CONTEXT_SERVICE_UNCHANGED; -import static com.sun.enterprise.deployment.xml.ConcurrencyTagNames.CONTEXT_SERVICE_QUALIFIER; +import static com.sun.enterprise.deployment.xml.ConcurrencyTagNames.QUALIFIER; import static com.sun.enterprise.deployment.xml.TagNames.NAME; import static com.sun.enterprise.deployment.xml.TagNames.RESOURCE_PROPERTY; public class ContextServiceDefinitionNode extends DeploymentDescriptorNode { + private static final Logger LOG = System.getLogger(ContextServiceDefinitionNode.class.getName()); + public ContextServiceDefinitionNode() { registerElementHandler(new XMLElement(RESOURCE_PROPERTY), ResourcePropertyNode.class, "addContextServiceExecutorDescriptor"); @@ -52,15 +56,33 @@ protected Map getDispatchTable() { map.put(CONTEXT_SERVICE_PROPAGATED, "addPropagated"); map.put(CONTEXT_SERVICE_CLEARED, "addCleared"); map.put(CONTEXT_SERVICE_UNCHANGED, "addUnchanged"); - map.put(CONTEXT_SERVICE_QUALIFIER, "addQualifier"); return map; } + @Override + public void setElementValue(XMLElement element, String value) { + String qname = element.getQName(); + ContextServiceDefinitionDescriptor descriptor = getDescriptor(); + if (QUALIFIER.equals(qname)) { + try { + descriptor.addQualifier(Class.forName(value, false, Thread.currentThread().getContextClassLoader())); + } catch (ClassNotFoundException e) { + LOG.log(Level.WARNING, "Ignoring unresolvable qualifier " + value, e); + } + } else { + super.setElementValue(element, value); + } + } + + @Override public Node writeDescriptor(Node parent, String nodeName, ContextServiceDefinitionDescriptor descriptor) { Node node = appendChild(parent, nodeName); appendTextChild(node, NAME, descriptor.getName()); + for (Class qualifier : descriptor.getQualifiers()) { + appendTextChild(node, QUALIFIER, qualifier.getCanonicalName()); + } for (String cleared : descriptor.getCleared()) { appendTextChild(node, CONTEXT_SERVICE_CLEARED, cleared); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedExecutorDefinitionNode.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedExecutorDefinitionNode.java index e519690e9ed..4e923d4eb44 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedExecutorDefinitionNode.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedExecutorDefinitionNode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Contributors to the Eclipse Foundation + * Copyright (c) 2022, 2024 Contributors to the Eclipse Foundation * Copyright (c) 2024 Payara Foundation and/or its affiliates * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved. * @@ -20,6 +20,8 @@ import com.sun.enterprise.deployment.ManagedExecutorDefinitionDescriptor; +import java.lang.System.Logger; +import java.lang.System.Logger.Level; import java.util.Map; import org.w3c.dom.Node; @@ -27,12 +29,16 @@ import static com.sun.enterprise.deployment.xml.ConcurrencyTagNames.MANAGED_EXECUTOR_CONTEXT_SERVICE_REF; import static com.sun.enterprise.deployment.xml.ConcurrencyTagNames.MANAGED_EXECUTOR_HUNG_TASK_THRESHOLD; import static com.sun.enterprise.deployment.xml.ConcurrencyTagNames.MANAGED_EXECUTOR_MAX_ASYNC; -import static com.sun.enterprise.deployment.xml.ConcurrencyTagNames.MANAGED_EXECUTOR_QUALIFIER; +import static com.sun.enterprise.deployment.xml.ConcurrencyTagNames.QUALIFIER; +import static com.sun.enterprise.deployment.xml.ConcurrencyTagNames.VIRTUAL; import static com.sun.enterprise.deployment.xml.TagNames.NAME; import static com.sun.enterprise.deployment.xml.TagNames.RESOURCE_PROPERTY; public class ManagedExecutorDefinitionNode extends DeploymentDescriptorNode { + private static final Logger LOG = System.getLogger(ManagedExecutorDefinitionNode.class.getName()); + + public ManagedExecutorDefinitionNode() { registerElementHandler(new XMLElement(RESOURCE_PROPERTY), ResourcePropertyNode.class, "addManagedExecutorPropertyDescriptor"); @@ -49,18 +55,38 @@ public ManagedExecutorDefinitionDescriptor createDescriptor() { protected Map getDispatchTable() { Map map = super.getDispatchTable(); map.put(NAME, "setName"); + map.put(VIRTUAL, "setVirtual"); map.put(MANAGED_EXECUTOR_MAX_ASYNC, "setMaximumPoolSize"); map.put(MANAGED_EXECUTOR_HUNG_TASK_THRESHOLD, "setHungAfterSeconds"); map.put(MANAGED_EXECUTOR_CONTEXT_SERVICE_REF, "setContext"); - map.put(MANAGED_EXECUTOR_QUALIFIER, "addQualifier"); return map; } + @Override + public void setElementValue(XMLElement element, String value) { + String qname = element.getQName(); + ManagedExecutorDefinitionDescriptor descriptor = getDescriptor(); + if (QUALIFIER.equals(qname)) { + try { + descriptor.addQualifier(Class.forName(value, false, Thread.currentThread().getContextClassLoader())); + } catch (ClassNotFoundException e) { + LOG.log(Level.WARNING, "Ignoring unresolvable qualifier " + value, e); + } + } else { + super.setElementValue(element, value); + } + } + + @Override public Node writeDescriptor(Node parent, String nodeName, ManagedExecutorDefinitionDescriptor descriptor) { Node node = appendChild(parent, nodeName); appendTextChild(node, NAME, descriptor.getName()); + for (Class qualifier : descriptor.getQualifiers()) { + appendTextChild(node, QUALIFIER, qualifier.getCanonicalName()); + } + appendTextChild(node, VIRTUAL, descriptor.isVirtual()); appendTextChild(node, MANAGED_EXECUTOR_MAX_ASYNC, String.valueOf(descriptor.getMaximumPoolSize())); appendTextChild(node, MANAGED_EXECUTOR_HUNG_TASK_THRESHOLD, String.valueOf(descriptor.getHungAfterSeconds())); appendTextChild(node, MANAGED_EXECUTOR_CONTEXT_SERVICE_REF, descriptor.getContext()); diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedScheduledExecutorDefinitionNode.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedScheduledExecutorDefinitionNode.java index e472d3f02f0..1630ff3195c 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedScheduledExecutorDefinitionNode.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedScheduledExecutorDefinitionNode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, 2022 Eclipse Foundation and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. All rights reserved. * Copyright (c) 2024 Payara Foundation and/or its affiliates * * This program and the accompanying materials are made available under the @@ -18,6 +18,8 @@ import com.sun.enterprise.deployment.ManagedScheduledExecutorDefinitionDescriptor; +import java.lang.System.Logger; +import java.lang.System.Logger.Level; import java.util.Map; import org.w3c.dom.Node; @@ -25,13 +27,16 @@ import static com.sun.enterprise.deployment.xml.ConcurrencyTagNames.MANAGED_SCHEDULED_EXECUTOR_CONTEXT_SERVICE_REF; import static com.sun.enterprise.deployment.xml.ConcurrencyTagNames.MANAGED_SCHEDULED_EXECUTOR_HUNG_TASK_THRESHOLD; import static com.sun.enterprise.deployment.xml.ConcurrencyTagNames.MANAGED_SCHEDULED_EXECUTOR_MAX_ASYNC; -import static com.sun.enterprise.deployment.xml.ConcurrencyTagNames.MANAGED_SCHEDULED_EXECUTOR_QUALIFIER; +import static com.sun.enterprise.deployment.xml.ConcurrencyTagNames.QUALIFIER; +import static com.sun.enterprise.deployment.xml.ConcurrencyTagNames.VIRTUAL; import static com.sun.enterprise.deployment.xml.TagNames.NAME; import static com.sun.enterprise.deployment.xml.TagNames.RESOURCE_PROPERTY; public class ManagedScheduledExecutorDefinitionNode extends DeploymentDescriptorNode { + private static final Logger LOG = System.getLogger(ManagedScheduledExecutorDefinitionNode.class.getName()); + public ManagedScheduledExecutorDefinitionNode() { registerElementHandler(new XMLElement(RESOURCE_PROPERTY), ResourcePropertyNode.class, @@ -49,18 +54,38 @@ public ManagedScheduledExecutorDefinitionDescriptor createDescriptor() { protected Map getDispatchTable() { Map map = super.getDispatchTable(); map.put(NAME, "setName"); + map.put(VIRTUAL, "setVirtual"); map.put(MANAGED_SCHEDULED_EXECUTOR_MAX_ASYNC, "setMaxAsync"); map.put(MANAGED_SCHEDULED_EXECUTOR_CONTEXT_SERVICE_REF, "setContext"); map.put(MANAGED_SCHEDULED_EXECUTOR_HUNG_TASK_THRESHOLD, "setHungTaskThreshold"); - map.put(MANAGED_SCHEDULED_EXECUTOR_QUALIFIER, "addQualifier"); return map; } + @Override + public void setElementValue(XMLElement element, String value) { + String qname = element.getQName(); + ManagedScheduledExecutorDefinitionDescriptor descriptor = getDescriptor(); + if (QUALIFIER.equals(qname)) { + try { + descriptor.addQualifier(Class.forName(value, false, Thread.currentThread().getContextClassLoader())); + } catch (ClassNotFoundException e) { + LOG.log(Level.WARNING, "Ignoring unresolvable qualifier " + value, e); + } + } else { + super.setElementValue(element, value); + } + } + + @Override public Node writeDescriptor(Node parent, String nodeName, ManagedScheduledExecutorDefinitionDescriptor descriptor) { Node node = appendChild(parent, nodeName); appendTextChild(node, NAME, descriptor.getName()); + for (Class qualifier : descriptor.getQualifiers()) { + appendTextChild(node, QUALIFIER, qualifier.getCanonicalName()); + } + appendTextChild(node, VIRTUAL, descriptor.isVirtual()); appendTextChild(node, MANAGED_SCHEDULED_EXECUTOR_MAX_ASYNC, descriptor.getMaxAsync()); appendTextChild(node, MANAGED_SCHEDULED_EXECUTOR_CONTEXT_SERVICE_REF, descriptor.getContext()); appendTextChild(node, MANAGED_SCHEDULED_EXECUTOR_HUNG_TASK_THRESHOLD, String.valueOf(descriptor.getHungTaskThreshold())); diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedThreadFactoryDefinitionNode.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedThreadFactoryDefinitionNode.java index f676fc9884a..d2a240e2957 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedThreadFactoryDefinitionNode.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedThreadFactoryDefinitionNode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, 2022 Eclipse Foundation and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. All rights reserved. * Copyright (c) 2024 Payara Foundation and/or its affiliates * * This program and the accompanying materials are made available under the @@ -18,19 +18,25 @@ import com.sun.enterprise.deployment.ManagedThreadFactoryDefinitionDescriptor; +import java.lang.System.Logger; +import java.lang.System.Logger.Level; import java.util.Map; import org.w3c.dom.Node; import static com.sun.enterprise.deployment.xml.ConcurrencyTagNames.MANAGED_THREAD_FACTORY_CONTEXT_SERVICE_REF; import static com.sun.enterprise.deployment.xml.ConcurrencyTagNames.MANAGED_THREAD_FACTORY_PRIORITY; -import static com.sun.enterprise.deployment.xml.ConcurrencyTagNames.MANAGED_SCHEDULED_EXECUTOR_QUALIFIER; +import static com.sun.enterprise.deployment.xml.ConcurrencyTagNames.QUALIFIER; +import static com.sun.enterprise.deployment.xml.ConcurrencyTagNames.VIRTUAL; import static com.sun.enterprise.deployment.xml.TagNames.NAME; import static com.sun.enterprise.deployment.xml.TagNames.RESOURCE_PROPERTY; public class ManagedThreadFactoryDefinitionNode extends DeploymentDescriptorNode { + private static final Logger LOG = System.getLogger(ManagedThreadFactoryDefinitionNode.class.getName()); + + public ManagedThreadFactoryDefinitionNode() { registerElementHandler(new XMLElement(RESOURCE_PROPERTY), ResourcePropertyNode.class, "addManagedThreadFactoryPropertyDescriptor"); @@ -47,17 +53,37 @@ public ManagedThreadFactoryDefinitionDescriptor createDescriptor() { protected Map getDispatchTable() { Map map = super.getDispatchTable(); map.put(NAME, "setName"); + map.put(VIRTUAL, "setVirtual"); map.put(MANAGED_THREAD_FACTORY_CONTEXT_SERVICE_REF, "setContext"); map.put(MANAGED_THREAD_FACTORY_PRIORITY, "setPriority"); - map.put(MANAGED_SCHEDULED_EXECUTOR_QUALIFIER, "addQualifier"); return map; } + @Override + public void setElementValue(XMLElement element, String value) { + String qname = element.getQName(); + ManagedThreadFactoryDefinitionDescriptor descriptor = getDescriptor(); + if (QUALIFIER.equals(qname)) { + try { + descriptor.addQualifier(Class.forName(value, false, Thread.currentThread().getContextClassLoader())); + } catch (ClassNotFoundException e) { + LOG.log(Level.WARNING, "Ignoring unresolvable qualifier " + value, e); + } + } else { + super.setElementValue(element, value); + } + } + + @Override public Node writeDescriptor(Node parent, String nodeName, ManagedThreadFactoryDefinitionDescriptor descriptor) { Node node = appendChild(parent, nodeName); appendTextChild(node, NAME, descriptor.getName()); + for (Class qualifier : descriptor.getQualifiers()) { + appendTextChild(node, QUALIFIER, qualifier.getCanonicalName()); + } + appendTextChild(node, VIRTUAL, descriptor.isVirtual()); appendTextChild(node, MANAGED_THREAD_FACTORY_CONTEXT_SERVICE_REF, descriptor.getContext()); appendTextChild(node, MANAGED_THREAD_FACTORY_PRIORITY, String.valueOf(descriptor.getPriority())); return ResourcePropertyNode.write(node, descriptor); diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/xml/ConcurrencyTagNames.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/xml/ConcurrencyTagNames.java index 18411939cc3..568dce789c5 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/xml/ConcurrencyTagNames.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/xml/ConcurrencyTagNames.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Eclipse Foundation and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. All rights reserved. * Copyright (c) 2024 Payara Foundation and/or its affiliates * * This program and the accompanying materials are made available under the @@ -23,29 +23,27 @@ public interface ConcurrencyTagNames extends TagNames { String MANAGED_EXECUTOR_MAX_ASYNC = "max-async"; String MANAGED_EXECUTOR_HUNG_TASK_THRESHOLD = "hung-task-threshold"; String MANAGED_EXECUTOR_CONTEXT_SERVICE_REF = "context-service-ref"; - String MANAGED_EXECUTOR_QUALIFIER = "qualifier"; String MANAGED_THREAD_FACTORY = "managed-thread-factory"; String MANAGED_THREAD_FACTORY_CONTEXT_SERVICE_REF = "context-service-ref"; String MANAGED_THREAD_FACTORY_PRIORITY = "priority"; - String MANAGED_THREAD_FACTORY_QUALIFIER = "qualifier"; String MANAGED_SCHEDULED_EXECUTOR = "managed-scheduled-executor"; String MANAGED_SCHEDULED_EXECUTOR_CONTEXT_SERVICE_REF = "context-service-ref"; String MANAGED_SCHEDULED_EXECUTOR_MAX_ASYNC = "max-async"; String MANAGED_SCHEDULED_EXECUTOR_HUNG_TASK_THRESHOLD = "hung-task-threshold"; - String MANAGED_SCHEDULED_EXECUTOR_QUALIFIER = "qualifier"; String CONTEXT_SERVICE = "context-service"; String CONTEXT_SERVICE_CLEARED = "cleared"; String CONTEXT_SERVICE_PROPAGATED = "propagated"; String CONTEXT_SERVICE_UNCHANGED = "unchanged"; - String CONTEXT_SERVICE_QUALIFIER = "qualifier"; String CONTEXT_INFO = "context-info"; String CONTEXT_INFO_DEFAULT_VALUE = "Classloader,JNDI,Security,WorkArea"; String CONTEXT_INFO_ENABLED = "context-info-enabled"; + String QUALIFIER = "qualifier"; String THREAD_PRIORITY = "thread-priority"; + String VIRTUAL = "virtual"; String LONG_RUNNING_TASKS = "long-runnings-tasks"; String HUNG_AFTER_SECONDS = "hung-after-seconds"; String HUNG_LOGGER_PRINT_ONCE = "hung-logger-print-once"; From 04bef7d5f98ce10309b69e83bdb5203fde1dbcf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mat=C4=9Bj=C4=8Dek?= Date: Mon, 20 May 2024 20:28:16 +0200 Subject: [PATCH 10/23] Fixed classloader issues - qualifiers must be processed as strings in DOL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Classifiers may be distributed in a library which is not accessible to the deployment classloader yet. Signed-off-by: David Matějček --- appserver/common/container-common/pom.xml | 9 ++- .../common/impl/ComponentEnvManagerImpl.java | 61 +++++++++---------- .../ContextServiceDefinitionDescriptor.java | 9 +-- .../ManagedExecutorDefinitionDescriptor.java | 10 +-- ...ScheduledExecutorDefinitionDescriptor.java | 10 +-- ...agedThreadFactoryDefinitionDescriptor.java | 10 +-- .../ContextServiceDefinitionConverter.java | 18 +++--- .../ContextServiceDefinitionData.java | 8 +-- .../ContextualResourceDefinition.java | 6 +- .../ManagedExecutorDefinitionConverter.java | 4 +- .../ManagedExecutorDefinitionData.java | 15 +++-- ...dScheduledExecutorDefinitionConverter.java | 4 +- ...anagedScheduledExecutorDefinitionData.java | 9 ++- ...nagedThreadFactoryDefinitionConverter.java | 4 +- .../ManagedThreadFactoryDefinitionData.java | 9 ++- .../node/ContextServiceDefinitionNode.java | 27 ++------ .../node/ManagedExecutorDefinitionNode.java | 25 +------- ...anagedScheduledExecutorDefinitionNode.java | 25 +------- .../ManagedThreadFactoryDefinitionNode.java | 25 +------- 19 files changed, 95 insertions(+), 193 deletions(-) diff --git a/appserver/common/container-common/pom.xml b/appserver/common/container-common/pom.xml index 2c274141d74..0ad89898877 100755 --- a/appserver/common/container-common/pom.xml +++ b/appserver/common/container-common/pom.xml @@ -115,11 +115,10 @@ org.glassfish.ha ha-api - - - - - + + org.glassfish.concurro + concurro + diff --git a/appserver/common/container-common/src/main/java/com/sun/enterprise/container/common/impl/ComponentEnvManagerImpl.java b/appserver/common/container-common/src/main/java/com/sun/enterprise/container/common/impl/ComponentEnvManagerImpl.java index 6bd4bfbed31..1d5ab6937b0 100644 --- a/appserver/common/container-common/src/main/java/com/sun/enterprise/container/common/impl/ComponentEnvManagerImpl.java +++ b/appserver/common/container-common/src/main/java/com/sun/enterprise/container/common/impl/ComponentEnvManagerImpl.java @@ -36,10 +36,10 @@ import com.sun.enterprise.deployment.JndiNameEnvironment; import com.sun.enterprise.deployment.MailSessionDescriptor; import com.sun.enterprise.deployment.ManagedBeanDescriptor; -import com.sun.enterprise.deployment.MessageDestinationReferenceDescriptor; import com.sun.enterprise.deployment.ManagedExecutorDefinitionDescriptor; import com.sun.enterprise.deployment.ManagedScheduledExecutorDefinitionDescriptor; import com.sun.enterprise.deployment.ManagedThreadFactoryDefinitionDescriptor; +import com.sun.enterprise.deployment.MessageDestinationReferenceDescriptor; import com.sun.enterprise.deployment.ResourceDescriptor; import com.sun.enterprise.deployment.ResourceEnvReferenceDescriptor; import com.sun.enterprise.deployment.ResourceReferenceDescriptor; @@ -59,7 +59,6 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.Set; @@ -68,7 +67,6 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; -import java.util.stream.Collectors; import javax.naming.Context; import javax.naming.NameNotFoundException; @@ -83,7 +81,7 @@ import org.glassfish.api.naming.JNDIBinding; import org.glassfish.api.naming.NamingObjectProxy; import org.glassfish.api.naming.SimpleJndiName; -//import org.glassfish.concurro.internal.ConcurrencyManagedCDIBeans; +import org.glassfish.concurro.cdi.ConcurrencyManagedCDIBeans; import org.glassfish.deployment.common.Descriptor; import org.glassfish.deployment.common.JavaEEResourceType; import org.glassfish.hk2.api.ServiceLocator; @@ -103,6 +101,10 @@ import static org.glassfish.api.naming.SimpleJndiName.JNDI_CTX_JAVA; import static org.glassfish.api.naming.SimpleJndiName.JNDI_CTX_JAVA_COMPONENT; import static org.glassfish.api.naming.SimpleJndiName.JNDI_CTX_JAVA_COMPONENT_ENV; +import static org.glassfish.concurro.cdi.ConcurrencyManagedCDIBeans.Type.CONTEXT_SERVICE; +import static org.glassfish.concurro.cdi.ConcurrencyManagedCDIBeans.Type.MANAGED_EXECUTOR_SERVICE; +import static org.glassfish.concurro.cdi.ConcurrencyManagedCDIBeans.Type.MANAGED_SCHEDULED_EXECUTOR_SERVICE; +import static org.glassfish.concurro.cdi.ConcurrencyManagedCDIBeans.Type.MANAGED_THREAD_FACTORY; import static org.glassfish.deployment.common.JavaEEResourceType.AODD; import static org.glassfish.deployment.common.JavaEEResourceType.CFD; import static org.glassfish.deployment.common.JavaEEResourceType.CSDD; @@ -387,39 +389,36 @@ private void addAllDescriptorBindings(JndiNameEnvironment jndiEnv, ScopeType sco concurrencyDescs.addAll(managedThreadfactoryDefintions); concurrencyDescs.addAll(managedScheduledDefinitions); concurrencyDescs.addAll(contextServiceDefinitions); - registerConcurrencyCDIQualifiers(jndiBindings, concurrencyDescs); + if (!concurrencyDescs.isEmpty()) { + registerConcurrencyCDIQualifiers(jndiBindings, concurrencyDescs); + } } } private void registerConcurrencyCDIQualifiers(Collection jndiBindings, Set concurrencyDescs) { - if (!concurrencyDescs.isEmpty()) { - /* - ConcurrencyManagedCDIBeans setup = new ConcurrencyManagedCDIBeans(); - for (ResourceDescriptor desc : concurrencyDescs) { - // TODO: preferably introduce common predecessor for all the descriptors - if (desc instanceof ContextServiceDefinitionDescriptor) { - Set qualifiers = Arrays.asList(((ContextServiceDefinitionDescriptor)desc).getQualifiers()).stream().map(c -> c.getName()).collect(Collectors.toSet()); - String concurrencyType = "CONTEXT_SERVICE"; - setup.addDefinition(ConcurrencyManagedCDIBeans.Type.valueOf(concurrencyType), qualifiers, desc.getName()); - } else if (desc instanceof ManagedExecutorDefinitionDescriptor) { - Set qualifiers = Arrays.asList(((ManagedExecutorDefinitionDescriptor)desc).getQualifiers()).stream().map(c -> c.getName()).collect(Collectors.toSet()); - String concurrencyType = "MANAGED_EXECUTOR_SERVICE"; - setup.addDefinition(ConcurrencyManagedCDIBeans.Type.valueOf(concurrencyType), qualifiers, desc.getName()); - } else if (desc instanceof ManagedScheduledExecutorDefinitionDescriptor) { - Set qualifiers = Arrays.asList(((ManagedScheduledExecutorDefinitionDescriptor)desc).getQualifiers()).stream().map(c -> c.getName()).collect(Collectors.toSet()); - String concurrencyType = "MANAGED_SCHEDULED_EXECUTOR_SERVICE"; - setup.addDefinition(ConcurrencyManagedCDIBeans.Type.valueOf(concurrencyType), qualifiers, desc.getName()); - } else if (desc instanceof ManagedThreadFactoryDefinitionDescriptor) { - Set qualifiers = Arrays.asList(((ManagedThreadFactoryDefinitionDescriptor)desc).getQualifiers()).stream().map(c -> c.getName()).collect(Collectors.toSet()); - String concurrencyType = "MANAGED_THREAD_FACTORY"; - setup.addDefinition(ConcurrencyManagedCDIBeans.Type.valueOf(concurrencyType), qualifiers, desc.getName()); - } else { - LOG.severe(() -> "Unexpected Concurrency type! Expected ContextServiceDefinitionDescriptor, ManagedExecutorDefinitionDescriptor, ManagedScheduledExecutorDefinitionDescriptor, or ManagedThreadFactoryDefinitionDescriptor, got " + desc); - } + ConcurrencyManagedCDIBeans setup = new ConcurrencyManagedCDIBeans(); + for (ResourceDescriptor desc : concurrencyDescs) { + String jndiName = desc.getJndiName().toString(); + if (desc instanceof ContextServiceDefinitionDescriptor) { + Set qualifiers = new HashSet<>(((ContextServiceDefinitionDescriptor) desc).getQualifiers()); + setup.addDefinition(CONTEXT_SERVICE, qualifiers, jndiName); + } else if (desc instanceof ManagedExecutorDefinitionDescriptor) { + Set qualifiers = new HashSet<>(((ManagedExecutorDefinitionDescriptor) desc).getQualifiers()); + setup.addDefinition(MANAGED_EXECUTOR_SERVICE, qualifiers, jndiName); + } else if (desc instanceof ManagedScheduledExecutorDefinitionDescriptor) { + Set qualifiers = new HashSet<>(((ManagedScheduledExecutorDefinitionDescriptor) desc).getQualifiers()); + setup.addDefinition(MANAGED_SCHEDULED_EXECUTOR_SERVICE, qualifiers, jndiName); + } else if (desc instanceof ManagedThreadFactoryDefinitionDescriptor) { + Set qualifiers = new HashSet<>(((ManagedThreadFactoryDefinitionDescriptor) desc).getQualifiers()); + setup.addDefinition(MANAGED_THREAD_FACTORY, qualifiers, jndiName); + } else { + throw new IllegalArgumentException("Unexpected Concurrency type!" + + " Expected ContextServiceDefinitionDescriptor, ManagedExecutorDefinitionDescriptor," + + " ManagedScheduledExecutorDefinitionDescriptor, or ManagedThreadFactoryDefinitionDescriptor," + + " got " + desc); } - jndiBindings.add(new CompEnvBinding(new SimpleJndiName(ConcurrencyManagedCDIBeans.JDNI_NAME), setup)); - */ } + jndiBindings.add(new CompEnvBinding(new SimpleJndiName(ConcurrencyManagedCDIBeans.JDNI_NAME), setup)); } private ResourceDeployer getResourceDeployer(Object resource) { diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ContextServiceDefinitionDescriptor.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ContextServiceDefinitionDescriptor.java index 4ef37dcba24..a9e42fde55b 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ContextServiceDefinitionDescriptor.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ContextServiceDefinitionDescriptor.java @@ -61,17 +61,12 @@ public void setName(String name) { } - public List> getQualifiers() { + public List getQualifiers() { return data.getQualifiers(); } - public void setQualifiers(List> qualifiers) { - data.setQualifiers(qualifiers); - } - - - public void addQualifier(Class qualifier) { + public void addQualifier(String qualifier) { data.addQualifier(qualifier); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedExecutorDefinitionDescriptor.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedExecutorDefinitionDescriptor.java index eb70bb0d6d3..1a09f38e27e 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedExecutorDefinitionDescriptor.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedExecutorDefinitionDescriptor.java @@ -72,19 +72,13 @@ public void setContext(String context) { @Override - public List> getQualifiers() { + public List getQualifiers() { return data.getQualifiers(); } @Override - public void setQualifiers(List> qualifiers) { - data.setQualifiers(qualifiers); - } - - - @Override - public void addQualifier(Class qualifier) { + public void addQualifier(String qualifier) { data.addQualifier(qualifier); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedScheduledExecutorDefinitionDescriptor.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedScheduledExecutorDefinitionDescriptor.java index a6232ed604c..a773f54f46d 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedScheduledExecutorDefinitionDescriptor.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedScheduledExecutorDefinitionDescriptor.java @@ -72,19 +72,13 @@ public void setContext(String context) { @Override - public List> getQualifiers() { + public List getQualifiers() { return data.getQualifiers(); } @Override - public void setQualifiers(List> qualifiers) { - data.setQualifiers(qualifiers); - } - - - @Override - public void addQualifier(Class qualifier) { + public void addQualifier(String qualifier) { data.addQualifier(qualifier); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedThreadFactoryDefinitionDescriptor.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedThreadFactoryDefinitionDescriptor.java index 86bd481577b..3131d77a7e5 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedThreadFactoryDefinitionDescriptor.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedThreadFactoryDefinitionDescriptor.java @@ -72,19 +72,13 @@ public void setContext(String context) { @Override - public List> getQualifiers() { + public List getQualifiers() { return data.getQualifiers(); } @Override - public void setQualifiers(List> qualifiers) { - data.setQualifiers(qualifiers); - } - - - @Override - public void addQualifier(Class qualifier) { + public void addQualifier(String qualifier) { data.addQualifier(qualifier); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionConverter.java index 2b95c2acf4f..057abb3c900 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionConverter.java @@ -53,15 +53,17 @@ Set convert(ContextServiceDefinition[] definitions return Arrays.stream(definitions).map(this::convert).collect(Collectors.toSet()); } - ContextServiceDefinitionData convert(ContextServiceDefinition definition) { - LOG.log(Level.DEBUG, "convert(definition={0})", definition); - Set unused = collectUnusedContexts(definition); + ContextServiceDefinitionData convert(ContextServiceDefinition annotation) { + LOG.log(Level.DEBUG, "convert(definition={0})", annotation); + Set unused = collectUnusedContexts(annotation); ContextServiceDefinitionData data = new ContextServiceDefinitionData(); - data.setName(new SimpleJndiName(TranslatedConfigView.expandValue(definition.name()))); - data.setPropagated(evaluateContexts(definition.propagated(), unused)); - data.setCleared(evaluateContexts(definition.cleared(), unused)); - data.setUnchanged(evaluateContexts(definition.unchanged(), unused)); - data.setQualifiers(Arrays.asList(definition.qualifiers())); + data.setName(new SimpleJndiName(TranslatedConfigView.expandValue(annotation.name()))); + data.setPropagated(evaluateContexts(annotation.propagated(), unused)); + data.setCleared(evaluateContexts(annotation.cleared(), unused)); + data.setUnchanged(evaluateContexts(annotation.unchanged(), unused)); + for (Class clazz : annotation.qualifiers()) { + data.addQualifier(clazz.getCanonicalName()); + } return data; } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionData.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionData.java index 1c1b396ade2..31eb055c03f 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionData.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionData.java @@ -40,7 +40,7 @@ public class ContextServiceDefinitionData implements Serializable { private Set cleared = new HashSet<>(); private Set propagated = new HashSet<>(); private Set unchanged = new HashSet<>(); - private final List> qualifiers = new ArrayList<>(); + private final List qualifiers = new ArrayList<>(); private final Properties properties = new Properties(); public SimpleJndiName getName() { @@ -53,18 +53,18 @@ public void setName(SimpleJndiName name) { } - public List> getQualifiers() { + public List getQualifiers() { return qualifiers; } - public void setQualifiers(List> qualifiers) { + public void setQualifiers(List qualifiers) { this.qualifiers.clear(); this.qualifiers.addAll(qualifiers); } - public void addQualifier(Class qualifier) { + public void addQualifier(String qualifier) { this.qualifiers.add(qualifier); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextualResourceDefinition.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextualResourceDefinition.java index 99bf2b635e9..383e2519cc7 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextualResourceDefinition.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextualResourceDefinition.java @@ -34,11 +34,9 @@ public interface ContextualResourceDefinition extends Serializable { void setContext(String context); - List> getQualifiers(); + List getQualifiers(); - void setQualifiers(List> qualifiers); - - void addQualifier(Class qualifier); + void addQualifier(String qualifier); boolean isVirtual(); diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java index e1ac081b4b4..e707520d0ac 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java @@ -72,7 +72,9 @@ ManagedExecutorDefinitionData convert(ManagedExecutorDefinition annotation) { ManagedExecutorDefinitionData data = new ManagedExecutorDefinitionData(); data.setName(TranslatedConfigView.expandValue(annotation.name())); data.setContext(TranslatedConfigView.expandValue(annotation.context())); - data.setQualifiers(Arrays.asList(annotation.qualifiers())); + for (Class clazz : annotation.qualifiers()) { + data.addQualifier(clazz.getCanonicalName()); + } data.setVirtual(annotation.virtual()); if (annotation.hungTaskThreshold() < 0) { diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionData.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionData.java index d83b3bd67c7..e5e47897e3d 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionData.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionData.java @@ -32,7 +32,7 @@ public class ManagedExecutorDefinitionData implements ContextualResourceDefiniti private int maximumPoolSize = Integer.MAX_VALUE; private long hungAfterSeconds; private boolean virtual; - private final List> qualifiers = new ArrayList<>(); + private final List qualifiers = new ArrayList<>(); private final Properties properties = new Properties(); @Override @@ -60,21 +60,20 @@ public void setContext(String context) { @Override - public List> getQualifiers() { + public List getQualifiers() { return qualifiers; } @Override - public void setQualifiers(List> qualifiers) { - this.qualifiers.clear(); - this.qualifiers.addAll(qualifiers); + public void addQualifier(String qualifier) { + this.qualifiers.add(qualifier); } - @Override - public void addQualifier(Class qualifier) { - this.qualifiers.add(qualifier); + public void setQualifiers(List qualifiers) { + this.qualifiers.clear(); + this.qualifiers.addAll(qualifiers); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java index 004abc04b66..f3bc9ae9e1b 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java @@ -70,7 +70,9 @@ ManagedScheduledExecutorDefinitionData convert(ManagedScheduledExecutorDefinitio LOG.log(Level.DEBUG, "convert(annotation={0})", annotation); ManagedScheduledExecutorDefinitionData data = new ManagedScheduledExecutorDefinitionData(); data.setName(TranslatedConfigView.expandValue(annotation.name())); - data.setQualifiers(Arrays.asList(annotation.qualifiers())); + for (Class clazz : annotation.qualifiers()) { + data.addQualifier(clazz.getCanonicalName()); + } data.setContext(TranslatedConfigView.expandValue(annotation.context())); data.setVirtual(annotation.virtual()); if (annotation.hungTaskThreshold() < 0) { diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionData.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionData.java index f0baaf6dead..05b45824799 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionData.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionData.java @@ -31,7 +31,7 @@ public class ManagedScheduledExecutorDefinitionData implements ContextualResourc private boolean virtual; private long hungTaskThreshold; private int maxAsync = Integer.MAX_VALUE; - private final List> qualifiers = new ArrayList<>(); + private final List qualifiers = new ArrayList<>(); private final Properties properties = new Properties(); @Override @@ -59,20 +59,19 @@ public void setContext(String context) { @Override - public List> getQualifiers() { + public List getQualifiers() { return qualifiers; } - @Override - public void setQualifiers(List> qualifiers) { + public void setQualifiers(List qualifiers) { this.qualifiers.clear(); this.qualifiers.addAll(qualifiers); } @Override - public void addQualifier(Class qualifier) { + public void addQualifier(String qualifier) { this.qualifiers.add(qualifier); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java index 1bf2f434e84..24c9acb857c 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java @@ -71,7 +71,9 @@ ManagedThreadFactoryDefinitionData convert(ManagedThreadFactoryDefinition annota LOG.log(Level.DEBUG, "convert(annotation={0})", annotation); ManagedThreadFactoryDefinitionData data = new ManagedThreadFactoryDefinitionData(); data.setName(TranslatedConfigView.expandValue(annotation.name())); - data.setQualifiers(Arrays.asList(annotation.qualifiers())); + for (Class clazz : annotation.qualifiers()) { + data.addQualifier(clazz.getCanonicalName()); + } data.setVirtual(annotation.virtual()); data.setContext(TranslatedConfigView.expandValue(annotation.context())); if (annotation.priority() <= 0) { diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionData.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionData.java index 73e8db6aa0e..70630be1be5 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionData.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionData.java @@ -30,7 +30,7 @@ public class ManagedThreadFactoryDefinitionData implements ContextualResourceDef private String context; private int priority = Thread.NORM_PRIORITY; private boolean virtual; - private final List> qualifiers = new ArrayList<>(); + private final List qualifiers = new ArrayList<>(); private final Properties properties = new Properties(); @@ -59,20 +59,19 @@ public void setContext(String context) { @Override - public List> getQualifiers() { + public List getQualifiers() { return qualifiers; } - @Override - public void setQualifiers(List> qualifiers) { + public void setQualifiers(List qualifiers) { this.qualifiers.clear(); this.qualifiers.addAll(qualifiers); } @Override - public void addQualifier(Class qualifier) { + public void addQualifier(String qualifier) { this.qualifiers.add(qualifier); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ContextServiceDefinitionNode.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ContextServiceDefinitionNode.java index 1d7ad869836..b01f49c40be 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ContextServiceDefinitionNode.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ContextServiceDefinitionNode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Contributors to the Eclipse Foundation + * Copyright (c) 2022, 2024 Contributors to the Eclipse Foundation * Copyright (c) 2024 Payara Foundation and/or its affiliates * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved. * @@ -20,8 +20,6 @@ import com.sun.enterprise.deployment.ContextServiceDefinitionDescriptor; -import java.lang.System.Logger; -import java.lang.System.Logger.Level; import java.util.Map; import org.w3c.dom.Node; @@ -35,8 +33,6 @@ public class ContextServiceDefinitionNode extends DeploymentDescriptorNode { - private static final Logger LOG = System.getLogger(ContextServiceDefinitionNode.class.getName()); - public ContextServiceDefinitionNode() { registerElementHandler(new XMLElement(RESOURCE_PROPERTY), ResourcePropertyNode.class, "addContextServiceExecutorDescriptor"); @@ -53,6 +49,7 @@ public ContextServiceDefinitionDescriptor createDescriptor() { protected Map getDispatchTable() { Map map = super.getDispatchTable(); map.put(NAME, "setName"); + map.put(QUALIFIER, "addQualifier"); map.put(CONTEXT_SERVICE_PROPAGATED, "addPropagated"); map.put(CONTEXT_SERVICE_CLEARED, "addCleared"); map.put(CONTEXT_SERVICE_UNCHANGED, "addUnchanged"); @@ -60,28 +57,12 @@ protected Map getDispatchTable() { } - @Override - public void setElementValue(XMLElement element, String value) { - String qname = element.getQName(); - ContextServiceDefinitionDescriptor descriptor = getDescriptor(); - if (QUALIFIER.equals(qname)) { - try { - descriptor.addQualifier(Class.forName(value, false, Thread.currentThread().getContextClassLoader())); - } catch (ClassNotFoundException e) { - LOG.log(Level.WARNING, "Ignoring unresolvable qualifier " + value, e); - } - } else { - super.setElementValue(element, value); - } - } - - @Override public Node writeDescriptor(Node parent, String nodeName, ContextServiceDefinitionDescriptor descriptor) { Node node = appendChild(parent, nodeName); appendTextChild(node, NAME, descriptor.getName()); - for (Class qualifier : descriptor.getQualifiers()) { - appendTextChild(node, QUALIFIER, qualifier.getCanonicalName()); + for (String qualifier : descriptor.getQualifiers()) { + appendTextChild(node, QUALIFIER, qualifier); } for (String cleared : descriptor.getCleared()) { appendTextChild(node, CONTEXT_SERVICE_CLEARED, cleared); diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedExecutorDefinitionNode.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedExecutorDefinitionNode.java index 4e923d4eb44..cb1c5d11b39 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedExecutorDefinitionNode.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedExecutorDefinitionNode.java @@ -20,8 +20,6 @@ import com.sun.enterprise.deployment.ManagedExecutorDefinitionDescriptor; -import java.lang.System.Logger; -import java.lang.System.Logger.Level; import java.util.Map; import org.w3c.dom.Node; @@ -36,8 +34,6 @@ public class ManagedExecutorDefinitionNode extends DeploymentDescriptorNode { - private static final Logger LOG = System.getLogger(ManagedExecutorDefinitionNode.class.getName()); - public ManagedExecutorDefinitionNode() { registerElementHandler(new XMLElement(RESOURCE_PROPERTY), ResourcePropertyNode.class, @@ -55,6 +51,7 @@ public ManagedExecutorDefinitionDescriptor createDescriptor() { protected Map getDispatchTable() { Map map = super.getDispatchTable(); map.put(NAME, "setName"); + map.put(QUALIFIER, "addQualifier"); map.put(VIRTUAL, "setVirtual"); map.put(MANAGED_EXECUTOR_MAX_ASYNC, "setMaximumPoolSize"); map.put(MANAGED_EXECUTOR_HUNG_TASK_THRESHOLD, "setHungAfterSeconds"); @@ -63,28 +60,12 @@ protected Map getDispatchTable() { } - @Override - public void setElementValue(XMLElement element, String value) { - String qname = element.getQName(); - ManagedExecutorDefinitionDescriptor descriptor = getDescriptor(); - if (QUALIFIER.equals(qname)) { - try { - descriptor.addQualifier(Class.forName(value, false, Thread.currentThread().getContextClassLoader())); - } catch (ClassNotFoundException e) { - LOG.log(Level.WARNING, "Ignoring unresolvable qualifier " + value, e); - } - } else { - super.setElementValue(element, value); - } - } - - @Override public Node writeDescriptor(Node parent, String nodeName, ManagedExecutorDefinitionDescriptor descriptor) { Node node = appendChild(parent, nodeName); appendTextChild(node, NAME, descriptor.getName()); - for (Class qualifier : descriptor.getQualifiers()) { - appendTextChild(node, QUALIFIER, qualifier.getCanonicalName()); + for (String qualifier : descriptor.getQualifiers()) { + appendTextChild(node, QUALIFIER, qualifier); } appendTextChild(node, VIRTUAL, descriptor.isVirtual()); appendTextChild(node, MANAGED_EXECUTOR_MAX_ASYNC, String.valueOf(descriptor.getMaximumPoolSize())); diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedScheduledExecutorDefinitionNode.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedScheduledExecutorDefinitionNode.java index 1630ff3195c..809a0b21d5b 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedScheduledExecutorDefinitionNode.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedScheduledExecutorDefinitionNode.java @@ -18,8 +18,6 @@ import com.sun.enterprise.deployment.ManagedScheduledExecutorDefinitionDescriptor; -import java.lang.System.Logger; -import java.lang.System.Logger.Level; import java.util.Map; import org.w3c.dom.Node; @@ -35,8 +33,6 @@ public class ManagedScheduledExecutorDefinitionNode extends DeploymentDescriptorNode { - private static final Logger LOG = System.getLogger(ManagedScheduledExecutorDefinitionNode.class.getName()); - public ManagedScheduledExecutorDefinitionNode() { registerElementHandler(new XMLElement(RESOURCE_PROPERTY), ResourcePropertyNode.class, @@ -54,6 +50,7 @@ public ManagedScheduledExecutorDefinitionDescriptor createDescriptor() { protected Map getDispatchTable() { Map map = super.getDispatchTable(); map.put(NAME, "setName"); + map.put(QUALIFIER, "addQualifier"); map.put(VIRTUAL, "setVirtual"); map.put(MANAGED_SCHEDULED_EXECUTOR_MAX_ASYNC, "setMaxAsync"); map.put(MANAGED_SCHEDULED_EXECUTOR_CONTEXT_SERVICE_REF, "setContext"); @@ -62,28 +59,12 @@ protected Map getDispatchTable() { } - @Override - public void setElementValue(XMLElement element, String value) { - String qname = element.getQName(); - ManagedScheduledExecutorDefinitionDescriptor descriptor = getDescriptor(); - if (QUALIFIER.equals(qname)) { - try { - descriptor.addQualifier(Class.forName(value, false, Thread.currentThread().getContextClassLoader())); - } catch (ClassNotFoundException e) { - LOG.log(Level.WARNING, "Ignoring unresolvable qualifier " + value, e); - } - } else { - super.setElementValue(element, value); - } - } - - @Override public Node writeDescriptor(Node parent, String nodeName, ManagedScheduledExecutorDefinitionDescriptor descriptor) { Node node = appendChild(parent, nodeName); appendTextChild(node, NAME, descriptor.getName()); - for (Class qualifier : descriptor.getQualifiers()) { - appendTextChild(node, QUALIFIER, qualifier.getCanonicalName()); + for (String qualifier : descriptor.getQualifiers()) { + appendTextChild(node, QUALIFIER, qualifier); } appendTextChild(node, VIRTUAL, descriptor.isVirtual()); appendTextChild(node, MANAGED_SCHEDULED_EXECUTOR_MAX_ASYNC, descriptor.getMaxAsync()); diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedThreadFactoryDefinitionNode.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedThreadFactoryDefinitionNode.java index d2a240e2957..81ac57eb2d3 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedThreadFactoryDefinitionNode.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ManagedThreadFactoryDefinitionNode.java @@ -18,8 +18,6 @@ import com.sun.enterprise.deployment.ManagedThreadFactoryDefinitionDescriptor; -import java.lang.System.Logger; -import java.lang.System.Logger.Level; import java.util.Map; import org.w3c.dom.Node; @@ -34,8 +32,6 @@ public class ManagedThreadFactoryDefinitionNode extends DeploymentDescriptorNode { - private static final Logger LOG = System.getLogger(ManagedThreadFactoryDefinitionNode.class.getName()); - public ManagedThreadFactoryDefinitionNode() { registerElementHandler(new XMLElement(RESOURCE_PROPERTY), ResourcePropertyNode.class, @@ -53,6 +49,7 @@ public ManagedThreadFactoryDefinitionDescriptor createDescriptor() { protected Map getDispatchTable() { Map map = super.getDispatchTable(); map.put(NAME, "setName"); + map.put(QUALIFIER, "addQualifier"); map.put(VIRTUAL, "setVirtual"); map.put(MANAGED_THREAD_FACTORY_CONTEXT_SERVICE_REF, "setContext"); map.put(MANAGED_THREAD_FACTORY_PRIORITY, "setPriority"); @@ -60,28 +57,12 @@ protected Map getDispatchTable() { } - @Override - public void setElementValue(XMLElement element, String value) { - String qname = element.getQName(); - ManagedThreadFactoryDefinitionDescriptor descriptor = getDescriptor(); - if (QUALIFIER.equals(qname)) { - try { - descriptor.addQualifier(Class.forName(value, false, Thread.currentThread().getContextClassLoader())); - } catch (ClassNotFoundException e) { - LOG.log(Level.WARNING, "Ignoring unresolvable qualifier " + value, e); - } - } else { - super.setElementValue(element, value); - } - } - - @Override public Node writeDescriptor(Node parent, String nodeName, ManagedThreadFactoryDefinitionDescriptor descriptor) { Node node = appendChild(parent, nodeName); appendTextChild(node, NAME, descriptor.getName()); - for (Class qualifier : descriptor.getQualifiers()) { - appendTextChild(node, QUALIFIER, qualifier.getCanonicalName()); + for (String qualifier : descriptor.getQualifiers()) { + appendTextChild(node, QUALIFIER, qualifier); } appendTextChild(node, VIRTUAL, descriptor.isVirtual()); appendTextChild(node, MANAGED_THREAD_FACTORY_CONTEXT_SERVICE_REF, descriptor.getContext()); From b62f472aa985cb96fd2b55638bf2d909e626c70d Mon Sep 17 00:00:00 2001 From: Petr Aubrecht Date: Tue, 21 May 2024 23:56:27 +0200 Subject: [PATCH 11/23] never override qualifiers by annotation in concurrency definitions --- .../handlers/ManagedThreadFactoryDefinitionConverter.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java index 24c9acb857c..4edfe0581d3 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java @@ -93,9 +93,10 @@ void merge(ManagedThreadFactoryDefinitionData annotationData, throw new IllegalArgumentException("Cannot merge managed thread factories with different names: " + annotationData.getName() + " x " + descriptorData.getName()); } - if (descriptorData.getQualifiers().isEmpty()) { - descriptorData.setQualifiers(annotationData.getQualifiers()); - } + // never override qualifiers via annotation + //if (descriptorData.getQualifiers().isEmpty()) { + // descriptorData.setQualifiers(annotationData.getQualifiers()); + //} if (!descriptorData.isVirtual()) { descriptorData.setVirtual(annotationData.isVirtual()); } From 064b29053546cb116596ff18bbe08ed7c925e86c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mat=C4=9Bj=C4=8Dek?= Date: Wed, 22 May 2024 15:42:51 +0200 Subject: [PATCH 12/23] Revert "never override qualifiers by annotation in concurrency definitions" This reverts commit 2615369dda56c4e8d01b6963a8c2bd55d2f14b7d. --- .../handlers/ManagedThreadFactoryDefinitionConverter.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java index 4edfe0581d3..24c9acb857c 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java @@ -93,10 +93,9 @@ void merge(ManagedThreadFactoryDefinitionData annotationData, throw new IllegalArgumentException("Cannot merge managed thread factories with different names: " + annotationData.getName() + " x " + descriptorData.getName()); } - // never override qualifiers via annotation - //if (descriptorData.getQualifiers().isEmpty()) { - // descriptorData.setQualifiers(annotationData.getQualifiers()); - //} + if (descriptorData.getQualifiers().isEmpty()) { + descriptorData.setQualifiers(annotationData.getQualifiers()); + } if (!descriptorData.isVirtual()) { descriptorData.setVirtual(annotationData.isVirtual()); } From 15a21e94add0b85e343c7a788bf9db9dc695c716 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mat=C4=9Bj=C4=8Dek?= Date: Wed, 22 May 2024 19:41:50 +0200 Subject: [PATCH 13/23] The ContextServiceDefinitionConverter improved MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Now follows the same pattern as other concurrency converters Signed-off-by: David Matějček --- .../ContextServiceDefinitionConverter.java | 58 ++++++++++++------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionConverter.java index 057abb3c900..f2ac2d1ee94 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionConverter.java @@ -30,6 +30,7 @@ import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; @@ -38,6 +39,8 @@ import org.glassfish.deployment.common.JavaEEResourceType; import org.jvnet.hk2.annotations.Service; +import static com.sun.enterprise.deployment.ResourceDescriptor.getJavaComponentJndiName; + /** * @author David Matejcek */ @@ -108,44 +111,55 @@ private Set evaluateContexts(String[] sourceContexts, Set unused return contexts; } - void merge(ContextServiceDefinitionData csd, ContextServiceDefinitionData descriptor) { - if (descriptor.getName().equals(csd.getName())) { + private void merge(ContextServiceDefinitionData annotation, ContextServiceDefinitionData descriptor) { + LOG.log(Level.DEBUG, "merge(annotation={0}, descriptor={1})", annotation, descriptor); + if (!annotation.getName().equals(descriptor.getName())) { + throw new IllegalArgumentException("Cannot merge context services with different names: " + + annotation.getName() + " x " + descriptor.getName()); + } - if (descriptor.getCleared() == null && csd.getCleared() != null) { - descriptor.setCleared(new HashSet<>(csd.getCleared())); - } + if (descriptor.getCleared() == null && annotation.getCleared() != null) { + descriptor.setCleared(new HashSet<>(annotation.getCleared())); + } - if (descriptor.getPropagated() == null && csd.getPropagated() != null) { - descriptor.setPropagated(new HashSet<>(csd.getPropagated())); - } + if (descriptor.getPropagated() == null && annotation.getPropagated() != null) { + descriptor.setPropagated(new HashSet<>(annotation.getPropagated())); + } - if (descriptor.getUnchanged() == null && csd.getUnchanged() != null) { - descriptor.setUnchanged(new HashSet<>(csd.getUnchanged())); - } + if (descriptor.getUnchanged() == null && annotation.getUnchanged() != null) { + descriptor.setUnchanged(new HashSet<>(annotation.getUnchanged())); + } - if (descriptor.getQualifiers().isEmpty() && !csd.getQualifiers().isEmpty()) { - descriptor.setQualifiers(csd.getQualifiers()); - } + // FIXME: descriptor can have one empty qualifier, then it should override annotation. + // TODO: null or yet another additional attribute? 4ALL concurrency descriptors. + if (descriptor.getQualifiers().isEmpty() && !annotation.getQualifiers().isEmpty()) { + descriptor.setQualifiers(annotation.getQualifiers()); } } - public void updateDescriptors(ContextServiceDefinitionData data, ResourceContainerContext[] contexts) { + public void updateDescriptors(ContextServiceDefinitionData annotation, ResourceContainerContext[] contexts) { for (ResourceContainerContext context : contexts) { Set descriptors = context.getResourceDescriptors(JavaEEResourceType.CSDD); - List existing = getExisting(data, descriptors); + List existing = getExisting(annotation, descriptors); if (existing.isEmpty()) { - descriptors.add(new ContextServiceDefinitionDescriptor(data, MetadataSource.ANNOTATION)); + descriptors.add(new ContextServiceDefinitionDescriptor(annotation, MetadataSource.ANNOTATION)); } else { - for (ResourceDescriptor existingData : existing) { - merge(data, ((ContextServiceDefinitionDescriptor) existingData).getData()); + for (ContextServiceDefinitionData existingData : existing) { + merge(annotation, existingData); } } } } + private List getExisting(ContextServiceDefinitionData data, Set descriptors) { + return descriptors.stream().filter(d -> isSameDefinition(data, d)).map(d -> ((ContextServiceDefinitionDescriptor) d).getData()) + .collect(Collectors.toList()); + } + - protected static List getExisting(ContextServiceDefinitionData descriptor, - Set resourceDescriptors) { - return resourceDescriptors.stream().filter(d -> d.getJndiName().equals(descriptor.getName())).toList(); + private boolean isSameDefinition(ContextServiceDefinitionData data, ResourceDescriptor descriptor) { + return descriptor instanceof ContextServiceDefinitionDescriptor + && Objects.equals(getJavaComponentJndiName(descriptor.getJndiName().toString()), + getJavaComponentJndiName(data.getName().toString())); } } From 4e5d5fc3abea59b20f93bafd1e5de5c39b539745 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mat=C4=9Bj=C4=8Dek?= Date: Wed, 22 May 2024 21:40:56 +0200 Subject: [PATCH 14/23] ContextServiceDefinitionDescriptor adapted to ContextualResourceDefinition MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: David Matějček --- .../deployer/cfg/ContextServiceCfg.java | 4 +- .../ContextServiceDefinitionDescriptor.java | 10 ++-- .../ConcurrencyDefinitionConvertor.java | 13 ++++- .../ConcurrencyResourceDefinition.java | 40 +++++++++++++ .../ContextServiceDefinitionConverter.java | 56 +++++++------------ .../ContextServiceDefinitionData.java | 15 ++--- .../ContextServiceDefinitionListHandler.java | 11 +--- .../ContextualResourceDefinition.java | 21 +------ ...dScheduledExecutorDefinitionConverter.java | 2 +- ...nagedThreadFactoryDefinitionConverter.java | 2 +- 10 files changed, 93 insertions(+), 81 deletions(-) create mode 100644 appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ConcurrencyResourceDefinition.java diff --git a/appserver/concurrent/concurrent-impl/src/main/java/org/glassfish/concurrent/runtime/deployer/cfg/ContextServiceCfg.java b/appserver/concurrent/concurrent-impl/src/main/java/org/glassfish/concurrent/runtime/deployer/cfg/ContextServiceCfg.java index e3535ef9269..492547933c4 100644 --- a/appserver/concurrent/concurrent-impl/src/main/java/org/glassfish/concurrent/runtime/deployer/cfg/ContextServiceCfg.java +++ b/appserver/concurrent/concurrent-impl/src/main/java/org/glassfish/concurrent/runtime/deployer/cfg/ContextServiceCfg.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Eclipse Foundation and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -38,7 +38,7 @@ public class ContextServiceCfg implements Serializable { private final Set unchangedContexts; public ContextServiceCfg(ContextServiceDefinitionData data) { - this.serviceConfig = new ConcurrentServiceCfg(data.getName()); + this.serviceConfig = new ConcurrentServiceCfg(data.getJndiName()); this.propagatedContexts = CfgParser.standardize(data.getPropagated()); this.clearedContexts = CfgParser.standardize(data.getCleared()); this.unchangedContexts = CfgParser.standardize(data.getUnchanged()); diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ContextServiceDefinitionDescriptor.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ContextServiceDefinitionDescriptor.java index a9e42fde55b..780c9ebe8a4 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ContextServiceDefinitionDescriptor.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ContextServiceDefinitionDescriptor.java @@ -17,6 +17,7 @@ package com.sun.enterprise.deployment; +import com.sun.enterprise.deployment.annotation.handlers.ConcurrencyResourceDefinition; import com.sun.enterprise.deployment.annotation.handlers.ContextServiceDefinitionData; import java.util.List; @@ -24,14 +25,13 @@ import java.util.Properties; import java.util.Set; -import org.glassfish.api.naming.SimpleJndiName; import org.glassfish.deployment.common.JavaEEResourceType; /** * @author David Matejcek */ -public class ContextServiceDefinitionDescriptor extends ResourceDescriptor { +public class ContextServiceDefinitionDescriptor extends ResourceDescriptor implements ConcurrencyResourceDefinition { private static final long serialVersionUID = 2537143519647534821L; @@ -51,21 +51,23 @@ public ContextServiceDefinitionDescriptor(ContextServiceDefinitionData data, Met @Override public String getName() { - return this.data.getName().toString(); + return this.data.getName(); } @Override public void setName(String name) { - this.data.setName(new SimpleJndiName(name)); + this.data.setName(name); } + @Override public List getQualifiers() { return data.getQualifiers(); } + @Override public void addQualifier(String qualifier) { data.addQualifier(qualifier); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ConcurrencyDefinitionConvertor.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ConcurrencyDefinitionConvertor.java index 69d6abe44c9..1fc5e8dfdf9 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ConcurrencyDefinitionConvertor.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ConcurrencyDefinitionConvertor.java @@ -19,6 +19,7 @@ import com.sun.enterprise.deployment.ResourceDescriptor; import com.sun.enterprise.deployment.annotation.context.ResourceContainerContext; +import java.lang.System.Logger; import java.util.List; import java.util.Objects; import java.util.Set; @@ -27,11 +28,14 @@ import org.glassfish.deployment.common.JavaEEResourceType; import static com.sun.enterprise.deployment.ResourceDescriptor.getJavaComponentJndiName; +import static java.lang.System.Logger.Level.DEBUG; /** * @author David Matejcek */ -abstract class ConcurrencyDefinitionConvertor { +abstract class ConcurrencyDefinitionConvertor { + private static final Logger LOG = System.getLogger(ConcurrencyDefinitionConvertor.class.getName()); + private final Class descriptorClass; private final JavaEEResourceType descriptorType; @@ -48,14 +52,19 @@ abstract class ConcurrencyDefinitionConvertor descriptors = context.getResourceDescriptors(descriptorType); List existing = getExisting(data, descriptors); if (existing.isEmpty()) { - descriptors.add(createDescriptor(data)); + T descriptor = createDescriptor(data); + descriptors.add(descriptor); + LOG.log(DEBUG, () -> "Added new descriptor based on annotation: " + descriptor); } else { for (D existingData : existing) { merge(data, existingData); + LOG.log(DEBUG, + () -> "Merged data " + data + " into existing descriptor data, result: " + existingData); } } } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ConcurrencyResourceDefinition.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ConcurrencyResourceDefinition.java new file mode 100644 index 00000000000..34f2c7ab38f --- /dev/null +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ConcurrencyResourceDefinition.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0, which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the + * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + * version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ + +package com.sun.enterprise.deployment.annotation.handlers; + +import java.io.Serializable; +import java.util.List; + +import org.glassfish.api.naming.SimpleJndiName; + +/** + * @author David Matejcek + */ +public interface ConcurrencyResourceDefinition extends Serializable { + + String getName(); + + void setName(String name); + + List getQualifiers(); + + void addQualifier(String qualifier); + + default SimpleJndiName getJndiName() { + return new SimpleJndiName(getName()); + } +} diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionConverter.java index f2ac2d1ee94..04d7a3cac21 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionConverter.java @@ -19,8 +19,6 @@ import com.sun.enterprise.deployment.ContextServiceDefinitionDescriptor; import com.sun.enterprise.deployment.MetadataSource; -import com.sun.enterprise.deployment.ResourceDescriptor; -import com.sun.enterprise.deployment.annotation.context.ResourceContainerContext; import jakarta.enterprise.concurrent.ContextServiceDefinition; @@ -29,25 +27,36 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashSet; -import java.util.List; -import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; -import org.glassfish.api.naming.SimpleJndiName; import org.glassfish.config.support.TranslatedConfigView; import org.glassfish.deployment.common.JavaEEResourceType; import org.jvnet.hk2.annotations.Service; -import static com.sun.enterprise.deployment.ResourceDescriptor.getJavaComponentJndiName; - /** * @author David Matejcek */ @Service -class ContextServiceDefinitionConverter { +class ContextServiceDefinitionConverter extends ConcurrencyDefinitionConvertor { private static final Logger LOG = System.getLogger(ContextServiceDefinitionConverter.class.getName()); + ContextServiceDefinitionConverter() { + super(ContextServiceDefinitionDescriptor.class, JavaEEResourceType.CSDD); + } + + + @Override + ContextServiceDefinitionDescriptor createDescriptor(ContextServiceDefinitionData annotation) { + return new ContextServiceDefinitionDescriptor(annotation, MetadataSource.ANNOTATION); + } + + + @Override + ContextServiceDefinitionData getData(ContextServiceDefinitionDescriptor descriptor) { + return descriptor.getData(); + } + Set convert(ContextServiceDefinition[] definitions) { LOG.log(Level.TRACE, "convert(definitions={0})", (Object) definitions); if (definitions == null) { @@ -60,7 +69,7 @@ ContextServiceDefinitionData convert(ContextServiceDefinition annotation) { LOG.log(Level.DEBUG, "convert(definition={0})", annotation); Set unused = collectUnusedContexts(annotation); ContextServiceDefinitionData data = new ContextServiceDefinitionData(); - data.setName(new SimpleJndiName(TranslatedConfigView.expandValue(annotation.name()))); + data.setName(TranslatedConfigView.expandValue(annotation.name())); data.setPropagated(evaluateContexts(annotation.propagated(), unused)); data.setCleared(evaluateContexts(annotation.cleared(), unused)); data.setUnchanged(evaluateContexts(annotation.unchanged(), unused)); @@ -111,7 +120,8 @@ private Set evaluateContexts(String[] sourceContexts, Set unused return contexts; } - private void merge(ContextServiceDefinitionData annotation, ContextServiceDefinitionData descriptor) { + @Override + void merge(ContextServiceDefinitionData annotation, ContextServiceDefinitionData descriptor) { LOG.log(Level.DEBUG, "merge(annotation={0}, descriptor={1})", annotation, descriptor); if (!annotation.getName().equals(descriptor.getName())) { throw new IllegalArgumentException("Cannot merge context services with different names: " @@ -136,30 +146,4 @@ private void merge(ContextServiceDefinitionData annotation, ContextServiceDefini descriptor.setQualifiers(annotation.getQualifiers()); } } - - public void updateDescriptors(ContextServiceDefinitionData annotation, ResourceContainerContext[] contexts) { - for (ResourceContainerContext context : contexts) { - Set descriptors = context.getResourceDescriptors(JavaEEResourceType.CSDD); - List existing = getExisting(annotation, descriptors); - if (existing.isEmpty()) { - descriptors.add(new ContextServiceDefinitionDescriptor(annotation, MetadataSource.ANNOTATION)); - } else { - for (ContextServiceDefinitionData existingData : existing) { - merge(annotation, existingData); - } - } - } - } - - private List getExisting(ContextServiceDefinitionData data, Set descriptors) { - return descriptors.stream().filter(d -> isSameDefinition(data, d)).map(d -> ((ContextServiceDefinitionDescriptor) d).getData()) - .collect(Collectors.toList()); - } - - - private boolean isSameDefinition(ContextServiceDefinitionData data, ResourceDescriptor descriptor) { - return descriptor instanceof ContextServiceDefinitionDescriptor - && Objects.equals(getJavaComponentJndiName(descriptor.getJndiName().toString()), - getJavaComponentJndiName(data.getName().toString())); - } } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionData.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionData.java index 31eb055c03f..6956a8702bd 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionData.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionData.java @@ -17,7 +17,6 @@ package com.sun.enterprise.deployment.annotation.handlers; -import java.io.Serializable; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -25,34 +24,35 @@ import java.util.Properties; import java.util.Set; -import org.glassfish.api.naming.SimpleJndiName; - import static com.sun.enterprise.universal.JavaLangUtils.nonNull; /** * @author David Matejcek */ -public class ContextServiceDefinitionData implements Serializable { +public class ContextServiceDefinitionData implements ConcurrencyResourceDefinition { private static final long serialVersionUID = -6964391431010485710L; - private SimpleJndiName name; + private String name; private Set cleared = new HashSet<>(); private Set propagated = new HashSet<>(); private Set unchanged = new HashSet<>(); private final List qualifiers = new ArrayList<>(); private final Properties properties = new Properties(); - public SimpleJndiName getName() { + @Override + public String getName() { return name; } - public void setName(SimpleJndiName name) { + @Override + public void setName(String name) { this.name = name; } + @Override public List getQualifiers() { return qualifiers; } @@ -64,6 +64,7 @@ public void setQualifiers(List qualifiers) { } + @Override public void addQualifier(String qualifier) { this.qualifiers.add(qualifier); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionListHandler.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionListHandler.java index d7fcb325fee..a7c04c84891 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionListHandler.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionListHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Eclipse Foundation and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -16,7 +16,6 @@ package com.sun.enterprise.deployment.annotation.handlers; -import com.sun.enterprise.deployment.ContextServiceDefinitionDescriptor; import com.sun.enterprise.deployment.annotation.context.ResourceContainerContext; import jakarta.enterprise.concurrent.ContextServiceDefinition; @@ -28,11 +27,8 @@ import org.glassfish.apf.AnnotationInfo; import org.glassfish.apf.AnnotationProcessorException; import org.glassfish.apf.HandlerProcessingResult; -import org.glassfish.deployment.common.JavaEEResourceType; import org.jvnet.hk2.annotations.Service; -import static com.sun.enterprise.deployment.MetadataSource.ANNOTATION; - @Service @AnnotationHandlerFor(ContextServiceDefinition.List.class) public class ContextServiceDefinitionListHandler extends AbstractResourceHandler { @@ -46,10 +42,7 @@ protected HandlerProcessingResult processAnnotation(AnnotationInfo ainfo, Resour ContextServiceDefinition.List annotation = (ContextServiceDefinition.List) ainfo.getAnnotation(); Set set = converter.convert(annotation.value()); for (ContextServiceDefinitionData data : set) { - ContextServiceDefinitionDescriptor descriptor = new ContextServiceDefinitionDescriptor(data, ANNOTATION); - for (ResourceContainerContext context : rcContexts) { - context.getResourceDescriptors(JavaEEResourceType.CSDD).add(descriptor); - } + converter.updateDescriptors(data, rcContexts); } return getDefaultProcessedResult(); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextualResourceDefinition.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextualResourceDefinition.java index 383e2519cc7..468868d9c70 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextualResourceDefinition.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextualResourceDefinition.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -16,34 +16,17 @@ package com.sun.enterprise.deployment.annotation.handlers; -import java.io.Serializable; -import java.util.List; - -import org.glassfish.api.naming.SimpleJndiName; - /** * @author David Matejcek */ -public interface ContextualResourceDefinition extends Serializable { - - String getName(); - - void setName(String name); +public interface ContextualResourceDefinition extends ConcurrencyResourceDefinition { String getContext(); void setContext(String context); - List getQualifiers(); - - void addQualifier(String qualifier); - boolean isVirtual(); void setVirtual(boolean virtual); - - default SimpleJndiName getJndiName() { - return new SimpleJndiName(getName()); - } } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java index f3bc9ae9e1b..55314168379 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java @@ -96,7 +96,7 @@ void merge(ManagedScheduledExecutorDefinitionData annotationData, ManagedSchedul throw new IllegalArgumentException("Cannot merge managed executors with different names: " + annotationData.getName() + " x " + descriptorData.getName()); } - if (descriptorData.getQualifiers().isEmpty()) { + if (descriptorData.getQualifiers().isEmpty() && !annotationData.getQualifiers().isEmpty()) { descriptorData.setQualifiers(annotationData.getQualifiers()); } if (!descriptorData.isVirtual()) { diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java index 24c9acb857c..791c12cc2cb 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java @@ -93,7 +93,7 @@ void merge(ManagedThreadFactoryDefinitionData annotationData, throw new IllegalArgumentException("Cannot merge managed thread factories with different names: " + annotationData.getName() + " x " + descriptorData.getName()); } - if (descriptorData.getQualifiers().isEmpty()) { + if (descriptorData.getQualifiers().isEmpty() && !annotationData.getQualifiers().isEmpty()) { descriptorData.setQualifiers(annotationData.getQualifiers()); } if (!descriptorData.isVirtual()) { From 9a8d90d30048e1db70002098fce171827c816636 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mat=C4=9Bj=C4=8Dek?= Date: Wed, 22 May 2024 23:26:37 +0200 Subject: [PATCH 15/23] Added more detailed toStrings for concurrency data objects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: David Matějček --- .../annotation/handlers/ContextServiceDefinitionData.java | 4 ++-- .../annotation/handlers/ManagedExecutorDefinitionData.java | 4 +++- .../handlers/ManagedScheduledExecutorDefinitionData.java | 4 +++- .../handlers/ManagedThreadFactoryDefinitionData.java | 3 ++- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionData.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionData.java index 6956a8702bd..2a7c6d63564 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionData.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionData.java @@ -149,7 +149,7 @@ public int hashCode() { @Override public String toString() { - return super.toString() + "[name=" + name + ", qualifiers=" + qualifiers + ", cleared=" + cleared - + ", propagated=" + propagated + ", unchanged=" + unchanged + ']'; + return super.toString() + "[name=" + name + ", cleared=" + cleared + ", propagated=" + propagated + + ", unchanged=" + unchanged + ", qualifiers=" + qualifiers + ", properties=" + properties + ']'; } } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionData.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionData.java index e5e47897e3d..cf7ec8a0d60 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionData.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionData.java @@ -131,6 +131,8 @@ public void addManagedExecutorPropertyDescriptor(String name, String value) { @Override public String toString() { - return super.toString() + "[" + getName() + "]"; + return super.toString() + "[name=" + getName() + ", context=" + context + ", virtual=" + virtual + + ", maximumPoolSize=" + maximumPoolSize + ", hungAfterSeconds=" + hungAfterSeconds + + ", qualifiers=" + qualifiers + ", properties=" + properties + "]"; } } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionData.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionData.java index 05b45824799..f7669a8d26a 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionData.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionData.java @@ -120,6 +120,8 @@ public void addManagedScheduledExecutorDefinitionDescriptor(String name, String @Override public String toString() { - return super.toString() + "[" + getName() + "]"; + return super.toString() + "[name=" + getName() + ", context=" + context + ", virtual=" + virtual + + ", hungTaskThreshold=" + hungTaskThreshold + ", maxAsync=" + maxAsync + + ", qualifiers=" + qualifiers + ", properties=" + properties + "]"; } } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionData.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionData.java index 70630be1be5..cb0e3f4ca81 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionData.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionData.java @@ -110,6 +110,7 @@ public void addManagedThreadFactoryPropertyDescriptor(String name, String value) @Override public String toString() { - return super.toString() + "[" + getName() + "]"; + return super.toString() + "[name=" + getName() + ", context=" + context + ", priority=" + priority + + ", virtual=" + virtual + ", qualifiers=" + qualifiers + ", properties=" + properties + "]"; } } From 0f876b15c0be8225d311da918d065cf7478fe648 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mat=C4=9Bj=C4=8Dek?= Date: Wed, 22 May 2024 23:47:26 +0200 Subject: [PATCH 16/23] Added log to ComponentEnvManagerImpl --- .../container/common/impl/ComponentEnvManagerImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/appserver/common/container-common/src/main/java/com/sun/enterprise/container/common/impl/ComponentEnvManagerImpl.java b/appserver/common/container-common/src/main/java/com/sun/enterprise/container/common/impl/ComponentEnvManagerImpl.java index 1d5ab6937b0..2054177ecea 100644 --- a/appserver/common/container-common/src/main/java/com/sun/enterprise/container/common/impl/ComponentEnvManagerImpl.java +++ b/appserver/common/container-common/src/main/java/com/sun/enterprise/container/common/impl/ComponentEnvManagerImpl.java @@ -398,6 +398,7 @@ private void addAllDescriptorBindings(JndiNameEnvironment jndiEnv, ScopeType sco private void registerConcurrencyCDIQualifiers(Collection jndiBindings, Set concurrencyDescs) { ConcurrencyManagedCDIBeans setup = new ConcurrencyManagedCDIBeans(); for (ResourceDescriptor desc : concurrencyDescs) { + LOG.log(FINE, () -> "Registering concurrency CDI qualifiers for descriptor: " + desc); String jndiName = desc.getJndiName().toString(); if (desc instanceof ContextServiceDefinitionDescriptor) { Set qualifiers = new HashSet<>(((ContextServiceDefinitionDescriptor) desc).getQualifiers()); From cabc0cc23dbe8f93ec73d6ac21b1a589e3cdb0ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mat=C4=9Bj=C4=8Dek?= Date: Thu, 23 May 2024 03:22:35 +0200 Subject: [PATCH 17/23] Correct merging qualifiers respecting a special empty element MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Depends on elementsAllowingEmptyValue() specified by a root node, but now I am not sure which is the right one. That part will be committed tomorrow. Signed-off-by: David Matějček --- .../ContextServiceDefinitionDescriptor.java | 6 ++++ .../ManagedExecutorDefinitionDescriptor.java | 6 ++++ ...ScheduledExecutorDefinitionDescriptor.java | 6 ++++ ...agedThreadFactoryDefinitionDescriptor.java | 6 ++++ .../ConcurrencyDefinitionConvertor.java | 18 +++++++++- .../ConcurrencyResourceDefinition.java | 2 ++ .../ContextServiceDefinitionConverter.java | 6 +--- .../ManagedExecutorDefinitionConverter.java | 34 +++++++++---------- ...dScheduledExecutorDefinitionConverter.java | 32 ++++++++--------- ...nagedThreadFactoryDefinitionConverter.java | 29 ++++++++-------- 10 files changed, 91 insertions(+), 54 deletions(-) diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ContextServiceDefinitionDescriptor.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ContextServiceDefinitionDescriptor.java index 780c9ebe8a4..cc7a0e3a5c9 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ContextServiceDefinitionDescriptor.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ContextServiceDefinitionDescriptor.java @@ -73,6 +73,12 @@ public void addQualifier(String qualifier) { } + @Override + public void setQualifiers(List qualifiers) { + data.setQualifiers(qualifiers); + } + + public Set getCleared() { return data.getCleared(); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedExecutorDefinitionDescriptor.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedExecutorDefinitionDescriptor.java index 1a09f38e27e..79201b5faec 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedExecutorDefinitionDescriptor.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedExecutorDefinitionDescriptor.java @@ -83,6 +83,12 @@ public void addQualifier(String qualifier) { } + @Override + public void setQualifiers(List qualifiers) { + data.setQualifiers(qualifiers); + } + + @Override public boolean isVirtual() { return data.isVirtual(); diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedScheduledExecutorDefinitionDescriptor.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedScheduledExecutorDefinitionDescriptor.java index a773f54f46d..bc8c86a94f6 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedScheduledExecutorDefinitionDescriptor.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedScheduledExecutorDefinitionDescriptor.java @@ -83,6 +83,12 @@ public void addQualifier(String qualifier) { } + @Override + public void setQualifiers(List qualifiers) { + data.setQualifiers(qualifiers); + } + + @Override public boolean isVirtual() { return data.isVirtual(); diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedThreadFactoryDefinitionDescriptor.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedThreadFactoryDefinitionDescriptor.java index 3131d77a7e5..f4692b4e8bd 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedThreadFactoryDefinitionDescriptor.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/ManagedThreadFactoryDefinitionDescriptor.java @@ -83,6 +83,12 @@ public void addQualifier(String qualifier) { } + @Override + public void setQualifiers(List qualifiers) { + data.setQualifiers(qualifiers); + } + + @Override public boolean isVirtual() { return data.isVirtual(); diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ConcurrencyDefinitionConvertor.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ConcurrencyDefinitionConvertor.java index 1fc5e8dfdf9..332e1a62544 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ConcurrencyDefinitionConvertor.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ConcurrencyDefinitionConvertor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Eclipse Foundation and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024 Eclipse Foundation and/or its affiliates. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at @@ -71,6 +71,22 @@ final void updateDescriptors(D data, ResourceContainerContext[] contexts) { } + /** + * The XML can have a single special value (empty element) which means to override annotation + * qualifiers to an empty list. + * + * @param annotation + * @param descriptor + */ + final void mergeQualifiers(D annotation, D descriptor) { + if (descriptor.getQualifiers().size() == 1 && descriptor.getQualifiers().get(0).isEmpty()) { + descriptor.setQualifiers(List.of()); + } else if (descriptor.getQualifiers().isEmpty() && !annotation.getQualifiers().isEmpty()) { + descriptor.setQualifiers(annotation.getQualifiers()); + } + } + + // isSameDefinition ensures it. @SuppressWarnings("unchecked") private List getExisting(D data, Set descriptors) { diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ConcurrencyResourceDefinition.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ConcurrencyResourceDefinition.java index 34f2c7ab38f..26b5be790bf 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ConcurrencyResourceDefinition.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ConcurrencyResourceDefinition.java @@ -34,6 +34,8 @@ public interface ConcurrencyResourceDefinition extends Serializable { void addQualifier(String qualifier); + void setQualifiers(List qualifiers); + default SimpleJndiName getJndiName() { return new SimpleJndiName(getName()); } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionConverter.java index 04d7a3cac21..ca5d7f7d332 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ContextServiceDefinitionConverter.java @@ -140,10 +140,6 @@ void merge(ContextServiceDefinitionData annotation, ContextServiceDefinitionData descriptor.setUnchanged(new HashSet<>(annotation.getUnchanged())); } - // FIXME: descriptor can have one empty qualifier, then it should override annotation. - // TODO: null or yet another additional attribute? 4ALL concurrency descriptors. - if (descriptor.getQualifiers().isEmpty() && !annotation.getQualifiers().isEmpty()) { - descriptor.setQualifiers(annotation.getQualifiers()); - } + mergeQualifiers(annotation, descriptor); } } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java index e707520d0ac..6bd24aab4b3 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedExecutorDefinitionConverter.java @@ -92,28 +92,28 @@ ManagedExecutorDefinitionData convert(ManagedExecutorDefinition annotation) { @Override - void merge(ManagedExecutorDefinitionData annotationData, ManagedExecutorDefinitionData descriptorData) { - LOG.log(Level.DEBUG, "merge(annotationData={0}, descriptorData={1})", annotationData, descriptorData); - if (!annotationData.getName().equals(descriptorData.getName())) { + void merge(ManagedExecutorDefinitionData annotation, ManagedExecutorDefinitionData descriptor) { + LOG.log(Level.DEBUG, "merge(annotation={0}, descriptor={1})", annotation, descriptor); + if (!annotation.getName().equals(descriptor.getName())) { throw new IllegalArgumentException("Cannot merge managed executors with different names: " - + annotationData.getName() + " x " + descriptorData.getName()); + + annotation.getName() + " x " + descriptor.getName()); } - if (descriptorData.getQualifiers().isEmpty()) { - descriptorData.setQualifiers(annotationData.getQualifiers()); - } - if (!descriptorData.isVirtual()) { - descriptorData.setVirtual(annotationData.isVirtual()); + + mergeQualifiers(annotation, descriptor); + + if (!descriptor.isVirtual()) { + descriptor.setVirtual(annotation.isVirtual()); } - if (descriptorData.getHungAfterSeconds() <= 0 && annotationData.getHungAfterSeconds() != 0) { - descriptorData.setHungAfterSeconds(annotationData.getHungAfterSeconds()); + if (descriptor.getHungAfterSeconds() <= 0 && annotation.getHungAfterSeconds() != 0) { + descriptor.setHungAfterSeconds(annotation.getHungAfterSeconds()); } - if (descriptorData.getMaximumPoolSize() <= 0 && annotationData.getMaximumPoolSize() > 0 - && annotationData.getMaximumPoolSize() < Integer.MAX_VALUE) { - descriptorData.setMaximumPoolSize(annotationData.getMaximumPoolSize()); + if (descriptor.getMaximumPoolSize() <= 0 && annotation.getMaximumPoolSize() > 0 + && annotation.getMaximumPoolSize() < Integer.MAX_VALUE) { + descriptor.setMaximumPoolSize(annotation.getMaximumPoolSize()); } - if (descriptorData.getContext() == null && annotationData.getContext() != null - && !annotationData.getContext().isBlank()) { - descriptorData.setContext(TranslatedConfigView.expandValue(annotationData.getContext())); + if (descriptor.getContext() == null && annotation.getContext() != null + && !annotation.getContext().isBlank()) { + descriptor.setContext(TranslatedConfigView.expandValue(annotation.getContext())); } } } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java index 55314168379..1d8de73ac8d 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedScheduledExecutorDefinitionConverter.java @@ -90,27 +90,27 @@ ManagedScheduledExecutorDefinitionData convert(ManagedScheduledExecutorDefinitio @Override - void merge(ManagedScheduledExecutorDefinitionData annotationData, ManagedScheduledExecutorDefinitionData descriptorData) { - LOG.log(Level.DEBUG, "merge(annotationData={0}, descriptorData={1})", annotationData, descriptorData); - if (!annotationData.getName().equals(descriptorData.getName())) { + void merge(ManagedScheduledExecutorDefinitionData annotation, ManagedScheduledExecutorDefinitionData descriptor) { + LOG.log(Level.DEBUG, "merge(annotation={0}, descriptor={1})", annotation, descriptor); + if (!annotation.getName().equals(descriptor.getName())) { throw new IllegalArgumentException("Cannot merge managed executors with different names: " - + annotationData.getName() + " x " + descriptorData.getName()); + + annotation.getName() + " x " + descriptor.getName()); } - if (descriptorData.getQualifiers().isEmpty() && !annotationData.getQualifiers().isEmpty()) { - descriptorData.setQualifiers(annotationData.getQualifiers()); - } - if (!descriptorData.isVirtual()) { - descriptorData.setVirtual(annotationData.isVirtual()); + + mergeQualifiers(annotation, descriptor); + + if (!descriptor.isVirtual()) { + descriptor.setVirtual(annotation.isVirtual()); } - if (descriptorData.getHungTaskThreshold() <= 0 && annotationData.getHungTaskThreshold() != 0) { - descriptorData.setHungTaskThreshold(annotationData.getHungTaskThreshold()); + if (descriptor.getHungTaskThreshold() <= 0 && annotation.getHungTaskThreshold() != 0) { + descriptor.setHungTaskThreshold(annotation.getHungTaskThreshold()); } - if (descriptorData.getMaxAsync() <= 0) { - descriptorData.setMaxAsync(annotationData.getMaxAsync()); + if (descriptor.getMaxAsync() <= 0) { + descriptor.setMaxAsync(annotation.getMaxAsync()); } - if (descriptorData.getContext() == null && annotationData.getContext() != null - && !annotationData.getContext().isBlank()) { - descriptorData.setContext(TranslatedConfigView.expandValue(annotationData.getContext())); + if (descriptor.getContext() == null && annotation.getContext() != null + && !annotation.getContext().isBlank()) { + descriptor.setContext(TranslatedConfigView.expandValue(annotation.getContext())); } } } diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java index 791c12cc2cb..cc180649bc1 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/annotation/handlers/ManagedThreadFactoryDefinitionConverter.java @@ -86,25 +86,24 @@ ManagedThreadFactoryDefinitionData convert(ManagedThreadFactoryDefinition annota @Override - void merge(ManagedThreadFactoryDefinitionData annotationData, - ManagedThreadFactoryDefinitionData descriptorData) { - LOG.log(Level.DEBUG, "merge(annotationData={0}, descriptorData={1})", annotationData, descriptorData); - if (!annotationData.getName().equals(descriptorData.getName())) { + void merge(ManagedThreadFactoryDefinitionData annotation, ManagedThreadFactoryDefinitionData descriptor) { + LOG.log(Level.DEBUG, "merge(annotation={0}, descriptor={1})", annotation, descriptor); + if (!annotation.getName().equals(descriptor.getName())) { throw new IllegalArgumentException("Cannot merge managed thread factories with different names: " - + annotationData.getName() + " x " + descriptorData.getName()); + + annotation.getName() + " x " + descriptor.getName()); } - if (descriptorData.getQualifiers().isEmpty() && !annotationData.getQualifiers().isEmpty()) { - descriptorData.setQualifiers(annotationData.getQualifiers()); - } - if (!descriptorData.isVirtual()) { - descriptorData.setVirtual(annotationData.isVirtual()); + + mergeQualifiers(annotation, descriptor); + + if (!descriptor.isVirtual()) { + descriptor.setVirtual(annotation.isVirtual()); } - if (descriptorData.getPriority() == -1 && annotationData.getPriority() != -1) { - descriptorData.setPriority(annotationData.getPriority()); + if (descriptor.getPriority() == -1 && annotation.getPriority() != -1) { + descriptor.setPriority(annotation.getPriority()); } - if (descriptorData.getContext() == null && annotationData.getContext() != null - && !annotationData.getContext().isBlank()) { - descriptorData.setContext(TranslatedConfigView.expandValue(annotationData.getContext())); + if (descriptor.getContext() == null && annotation.getContext() != null + && !annotation.getContext().isBlank()) { + descriptor.setContext(TranslatedConfigView.expandValue(annotation.getContext())); } } } From d3ca3f999a38fa00a2836c981ce95a433a2fee36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mat=C4=9Bj=C4=8Dek?= Date: Thu, 23 May 2024 03:46:23 +0200 Subject: [PATCH 18/23] Removing an empty String which may occur in XML as a special value MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: David Matějček --- .../container/common/impl/ComponentEnvManagerImpl.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/appserver/common/container-common/src/main/java/com/sun/enterprise/container/common/impl/ComponentEnvManagerImpl.java b/appserver/common/container-common/src/main/java/com/sun/enterprise/container/common/impl/ComponentEnvManagerImpl.java index 2054177ecea..48ac474a3e7 100644 --- a/appserver/common/container-common/src/main/java/com/sun/enterprise/container/common/impl/ComponentEnvManagerImpl.java +++ b/appserver/common/container-common/src/main/java/com/sun/enterprise/container/common/impl/ComponentEnvManagerImpl.java @@ -44,6 +44,7 @@ import com.sun.enterprise.deployment.ResourceEnvReferenceDescriptor; import com.sun.enterprise.deployment.ResourceReferenceDescriptor; import com.sun.enterprise.deployment.ServiceReferenceDescriptor; +import com.sun.enterprise.deployment.annotation.handlers.ConcurrencyResourceDefinition; import com.sun.enterprise.deployment.util.DOLUtils; import com.sun.enterprise.naming.spi.NamingObjectFactory; import com.sun.enterprise.naming.spi.NamingUtils; @@ -400,17 +401,18 @@ private void registerConcurrencyCDIQualifiers(Collection jndiBindin for (ResourceDescriptor desc : concurrencyDescs) { LOG.log(FINE, () -> "Registering concurrency CDI qualifiers for descriptor: " + desc); String jndiName = desc.getJndiName().toString(); + ConcurrencyResourceDefinition descriptor = (ConcurrencyResourceDefinition) desc; + Set qualifiers = new HashSet<>(descriptor.getQualifiers()); + // A special value which might occur in XML + // We don't need it any more. + qualifiers.remove(""); if (desc instanceof ContextServiceDefinitionDescriptor) { - Set qualifiers = new HashSet<>(((ContextServiceDefinitionDescriptor) desc).getQualifiers()); setup.addDefinition(CONTEXT_SERVICE, qualifiers, jndiName); } else if (desc instanceof ManagedExecutorDefinitionDescriptor) { - Set qualifiers = new HashSet<>(((ManagedExecutorDefinitionDescriptor) desc).getQualifiers()); setup.addDefinition(MANAGED_EXECUTOR_SERVICE, qualifiers, jndiName); } else if (desc instanceof ManagedScheduledExecutorDefinitionDescriptor) { - Set qualifiers = new HashSet<>(((ManagedScheduledExecutorDefinitionDescriptor) desc).getQualifiers()); setup.addDefinition(MANAGED_SCHEDULED_EXECUTOR_SERVICE, qualifiers, jndiName); } else if (desc instanceof ManagedThreadFactoryDefinitionDescriptor) { - Set qualifiers = new HashSet<>(((ManagedThreadFactoryDefinitionDescriptor) desc).getQualifiers()); setup.addDefinition(MANAGED_THREAD_FACTORY, qualifiers, jndiName); } else { throw new IllegalArgumentException("Unexpected Concurrency type!" From 1a95fb873c3e80359f79705cdbfffe1b3933218a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mat=C4=9Bj=C4=8Dek?= Date: Thu, 23 May 2024 12:41:39 +0200 Subject: [PATCH 19/23] ApplicationNode can contain empty qualifier element MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: David Matějček --- .../com/sun/enterprise/deployment/node/ApplicationNode.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ApplicationNode.java b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ApplicationNode.java index 37d31a52248..e6af97824b9 100644 --- a/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ApplicationNode.java +++ b/appserver/deployment/dol/src/main/java/com/sun/enterprise/deployment/node/ApplicationNode.java @@ -23,6 +23,7 @@ import com.sun.enterprise.deployment.io.ConfigurationDeploymentDescriptorFile; import com.sun.enterprise.deployment.util.DOLUtils; import com.sun.enterprise.deployment.xml.ApplicationTagNames; +import com.sun.enterprise.deployment.xml.ConcurrencyTagNames; import com.sun.enterprise.deployment.xml.TagNames; import com.sun.enterprise.deployment.xml.WebServicesTagNames; @@ -125,6 +126,7 @@ public Map> registerRuntimeBundle(final Map pub public Collection elementsAllowingEmptyValue() { final Set result = new HashSet<>(); result.add(ApplicationTagNames.LIBRARY_DIRECTORY); + result.add(ConcurrencyTagNames.QUALIFIER); return result; } From 05f9598f24a0f0b4b10400ef818f6a7e4023ec5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mat=C4=9Bj=C4=8Dek?= Date: Sun, 2 Jun 2024 18:06:27 +0200 Subject: [PATCH 20/23] Cleanups around deployments and JNDI, using module name in ComponentInvocation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: David Matějček # Conflicts: # appserver/web/weld-integration/src/main/java/org/glassfish/weld/WeldDeployer.java --- .../common/impl/ComponentEnvManagerImpl.java | 16 +++++++++------- .../java/org/glassfish/weld/WeldDeployer.java | 8 ++++---- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/appserver/common/container-common/src/main/java/com/sun/enterprise/container/common/impl/ComponentEnvManagerImpl.java b/appserver/common/container-common/src/main/java/com/sun/enterprise/container/common/impl/ComponentEnvManagerImpl.java index 48ac474a3e7..5c9ddac16fb 100644 --- a/appserver/common/container-common/src/main/java/com/sun/enterprise/container/common/impl/ComponentEnvManagerImpl.java +++ b/appserver/common/container-common/src/main/java/com/sun/enterprise/container/common/impl/ComponentEnvManagerImpl.java @@ -89,6 +89,7 @@ import org.glassfish.javaee.services.CommonResourceProxy; import org.glassfish.javaee.services.JMSCFResourcePMProxy; import org.glassfish.resourcebase.resources.api.ResourceDeployer; +import org.glassfish.resourcebase.resources.naming.ApplicationScopedResourceBinding; import org.glassfish.resourcebase.resources.util.ResourceManagerFactory; import org.jvnet.hk2.annotations.Service; @@ -400,28 +401,29 @@ private void registerConcurrencyCDIQualifiers(Collection jndiBindin ConcurrencyManagedCDIBeans setup = new ConcurrencyManagedCDIBeans(); for (ResourceDescriptor desc : concurrencyDescs) { LOG.log(FINE, () -> "Registering concurrency CDI qualifiers for descriptor: " + desc); - String jndiName = desc.getJndiName().toString(); + String jndiName = toLogicalJndiName(desc).toString(); ConcurrencyResourceDefinition descriptor = (ConcurrencyResourceDefinition) desc; Set qualifiers = new HashSet<>(descriptor.getQualifiers()); // A special value which might occur in XML // We don't need it any more. qualifiers.remove(""); - if (desc instanceof ContextServiceDefinitionDescriptor) { + if (descriptor instanceof ContextServiceDefinitionDescriptor) { setup.addDefinition(CONTEXT_SERVICE, qualifiers, jndiName); - } else if (desc instanceof ManagedExecutorDefinitionDescriptor) { + } else if (descriptor instanceof ManagedExecutorDefinitionDescriptor) { setup.addDefinition(MANAGED_EXECUTOR_SERVICE, qualifiers, jndiName); - } else if (desc instanceof ManagedScheduledExecutorDefinitionDescriptor) { + } else if (descriptor instanceof ManagedScheduledExecutorDefinitionDescriptor) { setup.addDefinition(MANAGED_SCHEDULED_EXECUTOR_SERVICE, qualifiers, jndiName); - } else if (desc instanceof ManagedThreadFactoryDefinitionDescriptor) { + } else if (descriptor instanceof ManagedThreadFactoryDefinitionDescriptor) { setup.addDefinition(MANAGED_THREAD_FACTORY, qualifiers, jndiName); } else { throw new IllegalArgumentException("Unexpected Concurrency type!" + " Expected ContextServiceDefinitionDescriptor, ManagedExecutorDefinitionDescriptor," + " ManagedScheduledExecutorDefinitionDescriptor, or ManagedThreadFactoryDefinitionDescriptor," - + " got " + desc); + + " got " + descriptor); } } - jndiBindings.add(new CompEnvBinding(new SimpleJndiName(ConcurrencyManagedCDIBeans.JDNI_NAME), setup)); + SimpleJndiName jndiName = new SimpleJndiName(ConcurrencyManagedCDIBeans.JDNI_NAME); + jndiBindings.add(new ApplicationScopedResourceBinding(jndiName, setup)); } private ResourceDeployer getResourceDeployer(Object resource) { diff --git a/appserver/web/weld-integration/src/main/java/org/glassfish/weld/WeldDeployer.java b/appserver/web/weld-integration/src/main/java/org/glassfish/weld/WeldDeployer.java index 25fc79f17c4..a3094a6554c 100644 --- a/appserver/web/weld-integration/src/main/java/org/glassfish/weld/WeldDeployer.java +++ b/appserver/web/weld-integration/src/main/java/org/glassfish/weld/WeldDeployer.java @@ -505,13 +505,13 @@ private void doBootstrapStartup(ApplicationInfo appInfo, WeldBootstrap bootstrap private ComponentInvocation createComponentInvocation(ApplicationInfo applicationInfo) { - BundleDescriptor bundleDescriptor = applicationInfo.getTransientAppMetaData(KEY_BUNDLE_DESCRIPTOR, - BundleDescriptor.class); - String componentEnvId = DOLUtils.getComponentEnvId((JndiNameEnvironment) bundleDescriptor); + JndiNameEnvironment bundleDescriptor = applicationInfo.getTransientAppMetaData(KEY_BUNDLE_DESCRIPTOR, + JndiNameEnvironment.class); + String componentEnvId = DOLUtils.getComponentEnvId(bundleDescriptor); LOG.log(Level.FINE, () -> "Computed component env id=" + componentEnvId + " for application name=" + applicationInfo.getName()); ComponentInvocation componentInvocation = new ComponentInvocation(componentEnvId, SERVLET_INVOCATION, - applicationInfo, applicationInfo.getName(), applicationInfo.getName()); + applicationInfo, applicationInfo.getName(), DOLUtils.getModuleName(bundleDescriptor)); componentInvocation.setJNDIEnvironment(bundleDescriptor); return componentInvocation; From a964a0642d6d51cc17b3fccd575825d1a3eb7aed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mat=C4=9Bj=C4=8Dek?= Date: Sun, 2 Jun 2024 18:14:44 +0200 Subject: [PATCH 21/23] Fixed lookup for java:app/ contexts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - This fixed the last concurrency TCK test Signed-off-by: David Matějček --- .../impl/GlassfishNamingManagerImpl.java | 70 +++++++++++-------- 1 file changed, 42 insertions(+), 28 deletions(-) diff --git a/appserver/common/glassfish-naming/src/main/java/com/sun/enterprise/naming/impl/GlassfishNamingManagerImpl.java b/appserver/common/glassfish-naming/src/main/java/com/sun/enterprise/naming/impl/GlassfishNamingManagerImpl.java index ddae6cdcc61..ca1e6cda896 100644 --- a/appserver/common/glassfish-naming/src/main/java/com/sun/enterprise/naming/impl/GlassfishNamingManagerImpl.java +++ b/appserver/common/glassfish-naming/src/main/java/com/sun/enterprise/naming/impl/GlassfishNamingManagerImpl.java @@ -350,20 +350,25 @@ private JavaNamespace getAppNamespace(String appName) throws NamingException { if (namespace == null) { namespace = new JavaNamespace(appName, "app"); appNamespaces.put(appName, namespace); - - // Create also component id mapping, so the java:app/ binding is found later, even when called from a component - ComponentIdInfo appComponentIdInfo = new ComponentIdInfo(); - appComponentIdInfo.appName = appName; - appComponentIdInfo.moduleName = appName; - appComponentIdInfo.componentId = appName; - appComponentIdInfo.treatComponentAsModule = true; - componentIdInfo.put(appName, appComponentIdInfo); } return namespace; } + private JavaNamespace getNamespace(SimpleJndiName logicalJndiName) throws NamingException { + LOG.log(TRACE, "getNamespace(info, logicalJndiName={0})", logicalJndiName); + final ComponentInvocation invocation = getComponentInvocation(); + if (logicalJndiName.isJavaModule()) { + return getModuleNamespace(new AppModuleKey(invocation.getAppName(), invocation.getModuleName())); + } else if (logicalJndiName.isJavaApp()) { + return getAppNamespace(invocation.getAppName()); + } else { + return getComponentNamespace(invocation.getComponentId()); + } + } + + private JavaNamespace getNamespace(ComponentIdInfo info, SimpleJndiName logicalJndiName) throws NamingException { LOG.log(TRACE, "getNamespace(info, logicalJndiName={0})", logicalJndiName); if (logicalJndiName.isJavaModule()) { @@ -592,20 +597,24 @@ public T lookup(String componentId, SimpleJndiName name) throws NamingExcept private T lookup(String componentId, SimpleJndiName name, Context ctx) throws NamingException { LOG.log(DEBUG, "lookup(componentId={0}, name={1}, ctx={2})", componentId, name, ctx); -// FIXME: added and commented out dmatej -// if (!name.hasJavaPrefix() && name.contains(":")) { -// // generic jndi names -// return (T) initialContext.lookup(name.toName()); -// } final ComponentIdInfo info = componentIdInfo.get(componentId); LOG.log(TRACE, "Found componentIdInfo={0}", info); - final boolean replaceName = info != null && info.treatComponentAsModule && name.isJavaComponent(); - final SimpleJndiName replacedName = replaceName ? name.changePrefix(JNDI_CTX_JAVA_MODULE) : name; - JavaNamespace namespace = info == null ? getComponentNamespace(componentId) : getNamespace(info, replacedName); - Object obj = namespace.get(replacedName); - LOG.log(TRACE, "For {0} found object={1} in namespace.name={2}", replacedName, obj, namespace.name); + final boolean replaceName; + final SimpleJndiName lookupName; + final JavaNamespace namespace; + if (info == null) { + replaceName = false; + lookupName = name; + namespace = getNamespace(lookupName); + } else { + replaceName = info.treatComponentAsModule && name.isJavaComponent(); + lookupName = replaceName ? name.changePrefix(JNDI_CTX_JAVA_MODULE) : name; + namespace = getNamespace(info, lookupName); + } + Object obj = namespace.get(lookupName); + LOG.log(TRACE, "For {0} found object={1} in namespace.name={2}", lookupName, obj, namespace.name); if (obj == null) { - throw new NameNotFoundException("No object bound to name " + replacedName + " in namespace " + namespace); + throw new NameNotFoundException("No object bound to name " + lookupName + " in namespace " + namespace); } if (obj instanceof NamingObjectProxy) { NamingObjectProxy namingProxy = (NamingObjectProxy) obj; @@ -691,6 +700,16 @@ private ArrayList listNames(SimpleJndiName name) throws NamingEx * @return the component id as a string. */ private String getComponentId() throws NamingException { + final ComponentInvocation invocation = getComponentInvocation(); + final String id = invocation.getComponentId(); + if (id == null) { + throw new NamingException("Invocation exception: ComponentId is null"); + } + return id; + } + + + private ComponentInvocation getComponentInvocation() throws NamingException { final ComponentInvocation invocation; if (invMgr == null) { invocation = serviceLocator. getService(InvocationManager.class).getCurrentInvocation(); @@ -701,12 +720,7 @@ private String getComponentId() throws NamingException { if (invocation == null) { throw new NamingException("Invocation exception: Got null ComponentInvocation!"); } - - String id = invocation.getComponentId(); - if (id == null) { - throw new NamingException("Invocation exception: Got null ComponentId!"); - } - return id; + return invocation; } @@ -736,18 +750,18 @@ private static class AppModuleKey implements Serializable { private final String app; private final String module; - public AppModuleKey(String appName, String moduleName) { + private AppModuleKey(String appName, String moduleName) { app = appName; module = moduleName; } - public String getAppName() { + private String getAppName() { return app; } - public String getModuleName() { + private String getModuleName() { return module; } From 2cb1ce529fea13b9a81b1cfa813ea4856a5ebe21 Mon Sep 17 00:00:00 2001 From: Arjan Tijms Date: Sun, 2 Jun 2024 22:02:42 +0200 Subject: [PATCH 22/23] Update pom.xml Use Concurro 3.1.0-M4 instead of SNAPSHOT --- appserver/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appserver/pom.xml b/appserver/pom.xml index ffb0347b50f..914b9867c2d 100644 --- a/appserver/pom.xml +++ b/appserver/pom.xml @@ -90,7 +90,7 @@ 3.1.0 - 3.1.0-SNAPSHOT + 3.1.0-M4 2.2.0 From da67edb759caccbe3185f10d7ba5d55fc2111e59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mat=C4=9Bj=C4=8Dek?= Date: Thu, 6 Jun 2024 15:36:44 +0200 Subject: [PATCH 23/23] Referring to custom built Concurrency TCK 3.1.1-SNAPSHOT MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - With 3.1.0 several tests fail - Required PRs were already merged to the TCK main, but we have to wait for the release. Signed-off-by: David Matějček --- appserver/tests/tck/concurrency/pom.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/appserver/tests/tck/concurrency/pom.xml b/appserver/tests/tck/concurrency/pom.xml index 32c091f5ea1..306fd27f746 100644 --- a/appserver/tests/tck/concurrency/pom.xml +++ b/appserver/tests/tck/concurrency/pom.xml @@ -72,7 +72,8 @@ jakarta.enterprise.concurrent jakarta.enterprise.concurrent-tck - 3.1.0 + + 3.1.1-SNAPSHOT