Skip to content
This repository was archived by the owner on Nov 15, 2022. It is now read-only.

Commit 4f148d8

Browse files
mskdeepak-oracleyaminikb
authored andcommitted
Prevent deletion of default JDBC resource (#21770)
*Change the object type of jdbc/__default to system-all-req effectively preventing the deletion of this resource (Note: Preventing deletion of the default JMS connection factory already happens in a similar way) *Add corresponding unit tests in devtests *Add logic to avoid deletion of the default JDBC and JMS resource-refs Because of these changes, deleting the default JDBC or JMS resource on gui is also prevented
1 parent e13f826 commit 4f148d8

File tree

5 files changed

+41
-9
lines changed

5 files changed

+41
-9
lines changed

main/appserver/admin/template/src/main/resources/config/domain.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
<system-applications />
6666
<resources>
6767
<jdbc-resource pool-name="__TimerPool" jndi-name="jdbc/__TimerPool" object-type="system-admin" />
68-
<jdbc-resource pool-name="DerbyPool" jndi-name="jdbc/__default" object-type="system-all" />
68+
<jdbc-resource pool-name="DerbyPool" jndi-name="jdbc/__default" object-type="system-all-req" />
6969
<jdbc-connection-pool name="__TimerPool" datasource-classname="org.apache.derby.jdbc.EmbeddedXADataSource" res-type="javax.sql.XADataSource">
7070
<property value="${com.sun.aas.instanceRoot}/lib/databases/ejbtimer" name="databaseName" />
7171
<property value=";create=true" name="connectionAttributes" />

main/appserver/jdbc/admin/src/main/java/org/glassfish/jdbc/admin/cli/JDBCResourceManager.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,15 @@ public ResourceStatus delete (final Resources resources, final String jndiName,
232232
return new ResourceStatus(ResourceStatus.FAILURE, msg);
233233
}
234234

235+
JdbcResource jdbcResource = (JdbcResource) ConnectorsUtil.getResourceByName(resources, JdbcResource.class, jndiName);
236+
// ensure we are not deleting resource of the type system-all-req
237+
if(ResourceConstants.SYSTEM_ALL_REQ.equals(jdbcResource.getObjectType())){
238+
String msg = localStrings.getLocalString("delete.jdbc.resource.system-all-req.object-type",
239+
"The jdbc resource [ {0} ] cannot be deleted as it is required to be configured in the system.",
240+
jndiName);
241+
return new ResourceStatus(ResourceStatus.FAILURE, msg);
242+
}
243+
235244
if (environment.isDas()) {
236245

237246
if ("domain".equals(target)) {
@@ -262,14 +271,6 @@ public ResourceStatus delete (final Resources resources, final String jndiName,
262271

263272
try {
264273

265-
JdbcResource jdbcResource = (JdbcResource) ConnectorsUtil.getResourceByName(resources, JdbcResource.class, jndiName);
266-
if(ResourceConstants.SYSTEM_ALL_REQ.equals(jdbcResource.getObjectType())){
267-
String msg = localStrings.getLocalString("delete.jdbc.resource.system-all-req.object-type",
268-
"The jdbc resource [ {0} ] cannot be deleted as it is required to be configured in the system.",
269-
jndiName);
270-
return new ResourceStatus(ResourceStatus.FAILURE, msg);
271-
}
272-
273274
// delete resource-ref
274275
resourceUtil.deleteResourceRef(jndiName, target);
275276

main/appserver/tests/appserv-tests/devtests/admin/cli/src/admin/JdbcResourceTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,9 @@ public void runTests() {
136136
testListJdbcResourceTargetServer();
137137
testDeleteJdbcResourceInServer();
138138

139+
testDeleteDefaultResource();
140+
testDeleteDefaultResourceRef();
141+
139142
testCreateJdbcesourceInCluster();
140143
testListJdbcResourceTargetCluster();
141144
testListJdbcResourceTargetInstance1();
@@ -557,6 +560,20 @@ public void testListJdbcResourceTargetStandaloneInstance() {
557560
reportUnexpectedResult(testName, result, INSTANCE1_NAME, INSTANCE2_NAME, CLUSTER_NAME);
558561
}
559562

563+
public void testDeleteDefaultResource() {
564+
String testName = "testDeleteDefaultResource";
565+
AsadminReturn result = asadminWithOutput(DELETE_JDBC_RESOURCE, DEFAULT_RESOURCE);
566+
reportFailureResultStatus(testName, result);
567+
reportExpectedFailureResult(testName, result, "jdbc resource [ jdbc/__default ] cannot be deleted");
568+
}
569+
570+
public void testDeleteDefaultResourceRef() {
571+
String testName = "testDeleteDefaultResourceRef";
572+
AsadminReturn result = asadminWithOutput(DELETE_RESOURCE_REF, DEFAULT_RESOURCE);
573+
reportFailureResultStatus(testName, result);
574+
reportExpectedFailureResult(testName, result, "Default JDBC resource ref cannot be deleted");
575+
}
576+
560577
private void reportFailureResultStatus(String testName, AsadminReturn result) {
561578
report(testName, !result.returnValue);
562579
report(testName, !result.err.isEmpty());

main/nucleus/admin/util/src/main/java/org/glassfish/admin/cli/resources/DeleteResourceRef.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,18 @@ public void execute(AdminCommandContext context) {
138138
final ActionReport report = context.getActionReport();
139139

140140
try {
141+
if (refName.equals("jdbc/__default")) {
142+
report.setActionExitCode(ActionReport.ExitCode.FAILURE);
143+
report.setMessage(localStrings.getLocalString("delete.resource.ref.jdbc.default",
144+
"Default JDBC resource ref cannot be deleted."));
145+
return;
146+
}
147+
if (refName.equals("jms/__defaultConnectionFactory")) {
148+
report.setActionExitCode(ActionReport.ExitCode.FAILURE);
149+
report.setMessage(localStrings.getLocalString("delete.resource.ref.jms.default",
150+
"Default JMS connection factory ref cannot be deleted."));
151+
return;
152+
}
141153
deleteResourceRef();
142154
if (refContainer instanceof Cluster) {
143155

main/nucleus/admin/util/src/main/java/org/glassfish/admin/cli/resources/LocalStrings.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ delete.resource.ref.reference_name=The name or JNDI name of the resource.
5050
delete.resource.ref.doesNotExist=resource-ref {0} does not exist for target {1}.
5151
delete.resource.ref.failed=resource-ref {0} deletion failed.
5252
delete.resource.ref.success=resource-ref {0} deleted successfully.
53+
delete.resource.ref.jdbc.default=Default JDBC resource ref cannot be deleted.
54+
delete.resource.ref.jms.default=Default JMS connection factory ref cannot be deleted.
5355
list.resource.refs=lists the existing resource references
5456
list.resource.refs.success=Command list-resource-refs executed successfully.
5557
list.resource.refs.fail=Command list-resource-refs failed.

0 commit comments

Comments
 (0)