Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/java/rmi/activation/Activatable/createPrivateActivable/CreatePrivateActivatable.java
38829 views
1
/*
2
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/* @test
25
* @bug 4164971
26
* @summary allow non-public activatable class and/or constructor
27
* @author Laird Dornin
28
*
29
* @library ../../../testlibrary
30
* @build TestLibrary RMID ActivateMe
31
* @run main/othervm/policy=security.policy/timeout=240 CreatePrivateActivatable
32
*/
33
34
import java.io.*;
35
import java.rmi.*;
36
import java.rmi.server.*;
37
import java.rmi.activation.*;
38
import sun.rmi.server.ActivatableRef;
39
import java.lang.reflect.*;
40
import java.util.Properties;
41
42
/**
43
* Test creates a private inner class Activatable object with a
44
* private constructor and makes sure that the object can be
45
* activated.
46
*/
47
public class CreatePrivateActivatable
48
{
49
private static class PrivateActivatable extends Activatable
50
implements ActivateMe, Runnable
51
{
52
private PrivateActivatable(ActivationID id, MarshalledObject obj)
53
throws ActivationException, RemoteException
54
{
55
super(id, 0);
56
}
57
58
public void ping()
59
{}
60
61
/**
62
* Spawns a thread to deactivate the object.
63
*/
64
public void shutdown() throws Exception
65
{
66
(new Thread(this, "CreatePrivateActivatable$PrivateActivatable")).start();
67
}
68
69
/**
70
* Thread to deactivate object. First attempts to make object
71
* inactive (via the inactive method). If that fails (the
72
* object may still have pending/executing calls), then
73
* unexport the object forcibly.
74
*/
75
public void run() {
76
ActivationLibrary.deactivate(this, getID());
77
}
78
}
79
80
public static void main(String[] args) {
81
/*
82
* The following line is required with the JDK 1.2 VM so that the
83
* VM can exit gracefully when this test completes. Otherwise, the
84
* conservative garbage collector will find a handle to the server
85
* object on the native stack and not clear the weak reference to
86
* it in the RMI runtime's object table.
87
*/
88
Object dummy = new Object();
89
RMID rmid = null;
90
ActivateMe obj;
91
92
System.err.println("\nRegression test for bug 4164971\n");
93
System.err.println("java.security.policy = " +
94
System.getProperty("java.security.policy", "no policy"));
95
96
CreatePrivateActivatable server;
97
try {
98
TestLibrary.suggestSecurityManager(TestParams.defaultSecurityManager);
99
100
// start an rmid.
101
RMID.removeLog();
102
rmid = RMID.createRMID();
103
rmid.start();
104
105
/* Cause activation groups to have a security policy that will
106
* allow security managers to be downloaded and installed
107
*/
108
Properties p = new Properties();
109
// this test must always set policies/managers in its
110
// activation groups
111
p.put("java.security.policy",
112
TestParams.defaultGroupPolicy);
113
p.put("java.security.manager",
114
TestParams.defaultSecurityManager);
115
116
/*
117
* Activate an object by registering its object
118
* descriptor and invoking a method on the
119
* stub returned from the register call.
120
*/
121
ActivationGroupDesc groupDesc =
122
new ActivationGroupDesc(p, null);
123
ActivationSystem system = ActivationGroup.getSystem();
124
ActivationGroupID groupID = system.registerGroup(groupDesc);
125
126
System.err.println("Creating descriptor");
127
ActivationDesc desc =
128
new ActivationDesc(groupID,
129
"CreatePrivateActivatable$PrivateActivatable",
130
null, null);
131
132
System.err.println("Registering descriptor");
133
obj = (ActivateMe) Activatable.register(desc);
134
135
/*
136
* Loop a bunch of times to force activator to
137
* spawn VMs (groups)
138
*/
139
System.err.println("Activate object via method call");
140
obj.ping();
141
142
/*
143
* Clean up object too.
144
*/
145
System.err.println("Deactivate object via method call");
146
obj.shutdown();
147
148
System.err.println("\nsuccess: CreatePrivateActivatable test passed ");
149
150
} catch (Exception e) {
151
if (e instanceof java.security.PrivilegedActionException) {
152
e = ((java.security.PrivilegedActionException)e).getException();
153
}
154
TestLibrary.bomb("\nfailure: unexpected exception " +
155
e.getClass().getName(), e);
156
157
} finally {
158
ActivationLibrary.rmidCleanup(rmid);
159
obj = null;
160
}
161
}
162
}
163
164