-
Notifications
You must be signed in to change notification settings - Fork 7
/
alternate-descriptors.html
310 lines (251 loc) · 13.8 KB
/
alternate-descriptors.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Alternate Descriptors</title>
<meta name="description" content="Apache TomEE">
<meta name="author" content="Apache TomEE">
<meta name="google-translate-customization" content="f36a520c08f4c9-0a04e86a9c075ce9-g265f3196f697cf8f-10">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
<meta http-equiv="Cache-Control" content="no-store, no-cache, must-revalidate, max-age=0">
<!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<!-- Le styles -->
<link href="./resources/css/bootstrap.css" rel="stylesheet">
<link href="./resources/css/prettify.css" rel="stylesheet">
<!--link href="./resources/css/bootstrap-mods.css" rel="stylesheet"-->
<link href="./resources/css/main.css" rel="stylesheet">
<link href="./resources/font-awesome-4.6.3/css/font-awesome.min.css" rel="stylesheet">
<script type="text/javascript">
var t = encodeURIComponent(document.title.replace(/^\s+|\s+$/g,""));
var u = encodeURIComponent(""+document.URL);
function fbshare () {
window.open(
"http://www.facebook.com/sharer/sharer.php?u="+u,
'Share on Facebook',
'width=640,height=426');
};
function gpshare () {
window.open(
"https://plus.google.com/share?url="+u,
'Share on Google+',
'width=584,height=385');
};
function twshare () {
window.open(
"https://twitter.com/intent/tweet?url="+u+"&text="+t,
'Share on Twitter',
'width=800,height=526');
};
function pinshare () {
window.open("//www.pinterest.com/pin/create/button/?url="+u+"&media=http%3A%2F%2Ftomee.apache.org%2Fresources%2Fimages%2Ffeather-logo.png&description="+t,
'Share on Pinterest',
'width=800,height=526');
};
</script>
<!-- Le fav and touch icons -->
<link rel="shortcut icon" href="./favicon.ico">
<link rel="apple-touch-icon" href="./resources/images/apple-touch-icon.png">
<link rel="apple-touch-icon" sizes="72x72" href="./resources/images/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="114x114" href="./resources/images/apple-touch-icon-114x114.png">
<script src="./resources/js/prettify.js" type="text/javascript"></script>
<script src="./resources/js/jquery-latest.js"></script>
<script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script>
<script src="./resources/js/common.js"></script>
<script src="./resources/js/prettyprint.js"></script>
<!--script src="//assets.pinterest.com/js/pinit.js" type="text/javascript" async></script//-->
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-2717626-1']);
_gaq.push(['_setDomainName', 'apache.org']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</head>
<body>
<div class="topbar" data-dropdown="dropdown">
<div class="fill">
<div class="container">
<a class="brand" href="./index.html">Apache TomEE</a>
<ul class="nav">
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
Apache
<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<!-- <li><a href="./misc/whoweare.html">Who we are?</a></li> -->
<!-- <li><a href="./misc/heritage.html">Heritage</a></li> -->
<li><a href="http://www.apache.org">Apache Home</a></li>
<!-- <li><a href="./misc/resources.html">Resources</a></li> -->
<li><a href="./misc/contact.html">Contact</a></li>
<li><a href="./misc/legal.html">Legal</a></li>
<li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
<li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
<li class="divider"/>
<li><a href="http://www.apache.org/security">Security</a></li>
</ul>
</li>
<li><a href="./index.html">Home</a></li>
<li><a href="./downloads.html">Downloads</a></li>
<li><a href="./documentation.html">Documentation</a></li>
<li><a href="./examples-trunk/index.html">Examples</a></li>
<li><a href="./support.html">Support</a></li>
<li><a href="./contribute.html">Contribute</a></li>
<li><a href="./security/index.html">Security</a></li>
</ul>
<!-- Google CSE Search Box Begins -->
<FORM class="pull-right" id="searchbox_010475492895890475512:_t4iqjrgx90" action="http://www.google.com/cse">
<INPUT type="hidden" name="cx" value="010475492895890475512:_t4iqjrgx90">
<INPUT type="hidden" name="cof" value="FORID:0">
<INPUT size="18" width="130" style="width:130px" name="q" type="text" placeholder="Search">
</FORM>
<!--<SCRIPT type="text/javascript" src="http://www.google.com/coop/cse/brand?form=searchbox_010475492895890475512:_t4iqjrgx90"></SCRIPT>-->
<!-- Google CSE Search Box Ends -->
</div>
</div>
</div>
<div class="container">
<div class="page-header">
<small><a href="./index.html">Home</a></small><br>
<h1>Alternate Descriptors
<div style="float: right; position: relative; bottom: -10px; ">
<a onclick="javascript:gpshare()" class="gp-share sprite" title="Share on Google+">share [gp]</a>
<a onclick="javascript:fbshare()" class="fb-share sprite" title="Share on Facebook">share [fb]</a>
<a onclick="javascript:twshare()" class="tw-share sprite" title="Share on Twitter">share [tw]</a>
<a onclick="javascript:pinshare()" class="pin-share sprite" title="Share on Pinterest">share [pin]</a>
<a data-toggle="modal" href="#edit" class="edit-page" title="Contribute to this Page">contribute</a>
</div>
</h1>
</div>
<p>As of OpenEJB 3.1.1, you have the ability to specify an alternate set of
deployment descriptors to use for a given environment. This is focused
mostly on testing where it is often desirable to use a slightly different
configuration for a set of tests or even a specific test.</p>
<h1>When nothing else does the trick</h1>
<p>Note that this approach was added as a catch-all for when one of the
simpler overriding techniques will not work. For the common case of
needing to tweak your persistence.xml, see the <a href="configuring-persistenceunits-in-tests.html">Configuring PersistenceUnits in Tests</a>
page for a simpler approach.</p>
<p>For many reasons it is very inconvenient to have to maintain two sets of
descriptors, one for production and one for testing. We aggressively add
features based on user feedback and questions. If you are looking for a
way to solve a problem without duplicating entire descriptors, please let
us know. You should never have to go the long way to do something simple.</p>
<p><a name="AlternateDescriptors-openejb.altdd.prefix"></a></p>
<h1>openejb.altdd.prefix</h1>
<p>To use this functionality, just set the new "openejb.altdd.prefix" system
property or <code>InitialContext</code> property to something like "<em>test</em>", then any
descriptors in your META-INF/ directory that start with "<em>test.</em>" will
override the regular descriptor. So for example with an app like this:</p>
<ul>
<li>META-INF/ejb-jar.xml</li>
<li>META-INF/<em>test</em>.ejb-jar.xml</li>
<li>META-INF/persistence.xml</li>
<li>META-INF/<em>test</em>.env-entry.properties</li>
</ul>
<p>Just initialize your test case like so:</p>
<pre><code> Properties properties = new Properties();
properties.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.client.LocalInitialContextFactory");
properties.setProperty("openejb.altdd.prefix", "test");
InitialContext initialContext = new InitialContext(properties);
</code></pre>
<p>The logical result will be the prefixed file replacing the non-prefixed
file as the active descriptor:</p>
<ul>
<li>META-INF/ejb-jar.xml -> <em>test</em>.ejb-jar.xml</li>
<li>META-INF/persistence.xml</li>
<li>META-INF/env-entry.properties -> <em>test</em>.env-entry.properties</li>
</ul>
<p>This will work in any environment in which OpenEJB works (embedded,
standalone, tomcat, geronimo, etc.).</p>
<p>Note that there does <em>not</em> have to be an equivalent non-prefixed version of
the file. In the example above, only a "test.env-entry.properties" file
exists and there is no equivalent plain "env-entry.properties" file. This
prefixing works for any deployment descriptor in the META-INF/ directory or
WEB-INF/ directory. The prefix does not have to be "test" and could be
anything you choose. You can also have as many prefixed files as you need
and could even go as far as to have one prefix per individual test.</p>
<p><a name="AlternateDescriptors-Morethanoneprefix"></a></p>
<h1>More than one prefix</h1>
<p>It is possible to have several prefixes, specified in order of preference,
so that it is possible to avoid duplicating descriptors that are used in
more than one "profile". For example, the "foo" test case uses the same
"env-entries.properties" file as the "bar" test case, but both have their
own ejb-jar.xml files:</p>
<ul>
<li>META-INF/ejb-jar.xml</li>
<li>META-INF/test.ejb-jar.xml</li>
<li>META-INF/footest.ejb-jar.xml</li>
<li>META-INF/bartest.ejb-jar.xml</li>
<li>META-INF/persistence.xml</li>
<li>META-INF/test.env-entry.properties</li>
</ul>
<p>The "foo" test case could set the <em>openejb.altdd.prefix</em> as follows:</p>
<pre><code> //...
properties.setProperty("openejb.altdd.prefix", "footest, test");
InitialContext initialContext = new InitialContext(properties);
</code></pre>
<p>Resulting the following logical view of the app:</p>
<ul>
<li>META-INF/ejb-jar.xml -> <em>footest</em>.ejb-jar.xml</li>
<li>META-INF/persistence.xml</li>
<li>META-INF/env-entry.properties -> test.env-entry.properties</li>
</ul>
<p>And the "bar" test case could set the <em>openejb.altdd.prefix</em> as follows:</p>
<pre><code> //...
properties.setProperty("openejb.altdd.prefix", "footest, test");
InitialContext initialContext = new InitialContext(properties);
</code></pre>
<p>Resulting the following logical view of the app:</p>
<ul>
<li>META-INF/ejb-jar.xml -> <em>bartest</em>.ejb-jar.xml</li>
<li>META-INF/persistence.xml</li>
<li>META-INF/env-entry.properties -> test.env-entry.properties</li>
</ul>
<p>In both scenarios the same env-entry.properties file
(test.env-entry.properties) is shared.</p>
<p>Note that there is a "test.ejb-jar.xml" file that is present, however in
both cases it is not used as the order of preference in the list is "left
to right" meaning most preferred first.</p>
<div id="edit" class="modal hide fade in" style="display: none; ">
<div class="modal-header">
<a class="close" data-dismiss="modal">x</a>
<h3>Thank you for contributing to the documentation!</h3>
</div>
<div class="modal-body">
<h4>Any help with the documentation is greatly appreciated.</h4>
<p>All edits are reviewed before going live, so feel free to do much more than fix typos or links. If you see a page that could benefit from an entire rewrite, we'd be thrilled to review it. Don't be surprised if we like it so much we ask you for help with other pages :)</p>
<small>NOTICE: unless indicated otherwise on the pages in question, all editable content available from apache.org is presumed to be licensed under the Apache License (AL) version 2.0 and hence all submissions to apache.org treated as formal Contributions under the license terms.</small>
<!--[if gt IE 6]>
<h4>Internet Explorer Users</h4>
<p>If you are not an Apache committer, click the Yes link and enter a <i>anonymous</i> for the username and leave the password empty</p>
<![endif]-->
</div>
<div class="modal-footer">
Do you have an Apache ID?
<a href="javascript:void(location.href='https://cms.apache.org/redirect?uri='+escape(location.href))" class="btn">Yes</a>
<a href="javascript:void(location.href='https://anonymous:@cms.apache.org/redirect?uri='+escape(location.href))" class="btn">No</a>
</div>
</div>
<script src="./resources/js/bootstrap-modal.js"></script>
<footer>
<p>Copyright © 1999-2016 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.
Apache TomEE, TomEE, Apache, the Apache feather logo, and the Apache TomEE project logo are trademarks of The Apache Software Foundation.
All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
</footer>
</div> <!-- /container -->
<!-- Javascript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="./resources/js/bootstrap-dropdown.js"></script>
</body>
</html>