KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > geronimo > console > jmsmanager > wizard > AbstractHandler


1 /**
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements. See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License. You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */

17 package org.apache.geronimo.console.jmsmanager.wizard;
18
19 import java.io.BufferedOutputStream JavaDoc;
20 import java.io.ByteArrayOutputStream JavaDoc;
21 import java.io.File JavaDoc;
22 import java.io.FileOutputStream JavaDoc;
23 import java.io.IOException JavaDoc;
24 import java.util.ArrayList JavaDoc;
25 import java.util.Iterator JavaDoc;
26 import java.util.List JavaDoc;
27 import java.util.Map JavaDoc;
28 import java.util.Properties JavaDoc;
29 import javax.enterprise.deploy.model.DDBean JavaDoc;
30 import javax.enterprise.deploy.model.DDBeanRoot JavaDoc;
31 import javax.enterprise.deploy.spi.DeploymentConfiguration JavaDoc;
32 import javax.enterprise.deploy.spi.DeploymentManager JavaDoc;
33 import javax.enterprise.deploy.spi.Target JavaDoc;
34 import javax.enterprise.deploy.spi.TargetModuleID JavaDoc;
35 import javax.enterprise.deploy.spi.status.ProgressObject JavaDoc;
36 import javax.portlet.ActionResponse;
37 import javax.portlet.PortletRequest;
38 import javax.portlet.PortletSession;
39 import org.apache.commons.logging.Log;
40 import org.apache.commons.logging.LogFactory;
41 import org.apache.geronimo.connector.deployment.jsr88.AdminObjectDCB;
42 import org.apache.geronimo.connector.deployment.jsr88.AdminObjectInstance;
43 import org.apache.geronimo.connector.deployment.jsr88.ConnectionDefinition;
44 import org.apache.geronimo.connector.deployment.jsr88.ConnectionDefinitionInstance;
45 import org.apache.geronimo.connector.deployment.jsr88.Connector15DCBRoot;
46 import org.apache.geronimo.connector.deployment.jsr88.ConnectorDCB;
47 import org.apache.geronimo.connector.deployment.jsr88.ResourceAdapter;
48 import org.apache.geronimo.connector.deployment.jsr88.ResourceAdapterInstance;
49 import org.apache.geronimo.connector.deployment.jsr88.SinglePool;
50 import org.apache.geronimo.console.MultiPageAbstractHandler;
51 import org.apache.geronimo.console.MultiPageModel;
52 import org.apache.geronimo.console.util.PortletManager;
53 import org.apache.geronimo.deployment.service.jsr88.EnvironmentData;
54 import org.apache.geronimo.deployment.tools.loader.ConnectorDeployable;
55 import org.apache.geronimo.kernel.repository.Artifact;
56 import org.apache.geronimo.naming.deployment.jsr88.GBeanLocator;
57
58 /**
59  * Base class for portlet helpers
60  *
61  * @version $Rev: 476061 $ $Date: 2006-11-17 01:36:50 -0500 (Fri, 17 Nov 2006) $
62  */

63 public abstract class AbstractHandler extends MultiPageAbstractHandler {
64     private final static Log log = LogFactory.getLog(AbstractHandler.class);
65     // ********** This part specific to JMS portlets **********
66

67     protected final static String JavaDoc LIST_MODE="list";
68     protected final static String JavaDoc SELECT_PROVIDER_MODE="provider";
69     protected final static String JavaDoc CONFIGURE_RA_MODE="ra";
70     protected final static String JavaDoc ADD_FACTORY_MODE="factory";
71     protected final static String JavaDoc SELECT_FACTORY_TYPE_MODE="factoryType";
72     protected final static String JavaDoc ADD_DESTINATION_MODE="destination";
73     protected final static String JavaDoc SELECT_DESTINATION_TYPE_MODE="destinationType";
74     protected final static String JavaDoc REVIEW_MODE="review";
75     protected final static String JavaDoc SHOW_PLAN_MODE="plan";
76     protected final static String JavaDoc DEPLOY_MODE="deploy";
77
78     protected final static String JavaDoc PROVIDER_PARAMETER="provider";
79     protected final static String JavaDoc RAR_FILE_PARAMETER="rar";
80     protected final static String JavaDoc DEPENDENCY_PARAMETER="dependency";
81     protected final static String JavaDoc INSTANCE_NAME_PARAMETER="instanceName";
82     protected final static String JavaDoc NAME_PARAMETER="name";
83     protected final static String JavaDoc CURRENT_FACTORY_PARAMETER="currentFactoryID";
84     protected final static String JavaDoc CURRENT_DEST_PARAMETER="currentDestinationID";
85     protected final static String JavaDoc FACTORY_TYPE_PARAMETER="factoryType";
86     protected final static String JavaDoc DEST_TYPE_PARAMETER="destinationType";
87     protected final static String JavaDoc TRANSACTION_PARAMETER="transaction";
88     protected final static String JavaDoc XA_TRANSACTION_PARAMETER="xaTransaction";
89     protected final static String JavaDoc XA_THREAD_PARAMETER="xaThread";
90     protected final static String JavaDoc MIN_SIZE_PARAMETER="poolMinSize";
91     protected final static String JavaDoc MAX_SIZE_PARAMETER="poolMaxSize";
92     protected final static String JavaDoc IDLE_TIME_PARAMETER="poolIdleTimeout";
93     protected final static String JavaDoc BLOCK_TIME_PARAMETER="poolBlockingTimeout";
94
95     public AbstractHandler(String JavaDoc mode, String JavaDoc viewName) {
96         super(mode, viewName);
97     }
98
99     public static class JMSResourceData implements MultiPageModel {
100         private String JavaDoc rarURI;
101         private String JavaDoc dependency;
102         private String JavaDoc instanceName;
103         private Properties JavaDoc instanceProps = new Properties JavaDoc();
104         private String JavaDoc workManager;
105         private int currentFactory = -1;
106         private int currentDestination = -1;
107         private int factoryType = -1;
108         private int destinationType = -1;
109         private List JavaDoc connectionFactories = new ArrayList JavaDoc();
110         private List JavaDoc adminObjects = new ArrayList JavaDoc();
111         // Used for editing an existing resource
112
private String JavaDoc objectName;
113
114         public JMSResourceData(PortletRequest request) {
115             Map JavaDoc map = request.getParameterMap();
116             rarURI = request.getParameter(RAR_FILE_PARAMETER);
117             dependency = request.getParameter(DEPENDENCY_PARAMETER);
118             instanceName = request.getParameter(INSTANCE_NAME_PARAMETER);
119             factoryType = isEmpty(request.getParameter(FACTORY_TYPE_PARAMETER)) ? -1 : Integer.parseInt(request.getParameter(FACTORY_TYPE_PARAMETER));
120             currentFactory = isEmpty(request.getParameter(CURRENT_FACTORY_PARAMETER)) ? -1 : Integer.parseInt(request.getParameter(CURRENT_FACTORY_PARAMETER));
121             destinationType = isEmpty(request.getParameter(DEST_TYPE_PARAMETER)) ? -1 : Integer.parseInt(request.getParameter(DEST_TYPE_PARAMETER));
122             currentDestination = isEmpty(request.getParameter(CURRENT_DEST_PARAMETER)) ? -1 : Integer.parseInt(request.getParameter(CURRENT_DEST_PARAMETER));
123             for(int i=0; i<20; i++) {
124                 String JavaDoc key = "instance-config-" + i;
125                 if(map.containsKey(key)) {
126                     instanceProps.setProperty(key, request.getParameter(key));
127                 }
128             }
129             workManager = "DefaultWorkManager"; //todo
130
int index = 0;
131             while(true) {
132                 String JavaDoc key = "factory."+(index++)+".";
133                 if(!map.containsKey(key+FACTORY_TYPE_PARAMETER)) {
134                     break;
135                 }
136                 JMSConnectionFactoryData data = new JMSConnectionFactoryData();
137                 data.load(request, key);
138                 connectionFactories.add(data);
139             }
140             index = 0;
141             while(true) {
142                 String JavaDoc key = "destination."+(index++)+".";
143                 if(!map.containsKey(key+DEST_TYPE_PARAMETER)) {
144                     break;
145                 }
146                 JMSAdminObjectData data = new JMSAdminObjectData();
147                 data.load(request, key);
148                 adminObjects.add(data);
149             }
150             createIfNecessary();
151         }
152
153         public void createIfNecessary() {
154             while(currentFactory >= connectionFactories.size()) {
155                 connectionFactories.add(new JMSConnectionFactoryData());
156             }
157             while(currentDestination >= adminObjects.size()) {
158                 adminObjects.add(new JMSAdminObjectData());
159             }
160         }
161
162         public void save(ActionResponse response, PortletSession session) {
163             if(!isEmpty(rarURI)) response.setRenderParameter(RAR_FILE_PARAMETER, rarURI);
164             if(!isEmpty(dependency)) response.setRenderParameter(DEPENDENCY_PARAMETER, dependency);
165             if(!isEmpty(instanceName)) response.setRenderParameter(INSTANCE_NAME_PARAMETER, instanceName);
166             for (Iterator JavaDoc it = instanceProps.entrySet().iterator(); it.hasNext();) {
167                 Map.Entry JavaDoc entry = (Map.Entry JavaDoc) it.next();
168                 if(!isEmpty((String JavaDoc)entry.getValue())) {
169                     response.setRenderParameter((String JavaDoc)entry.getKey(), (String JavaDoc)entry.getValue());
170                 }
171             }
172             if(!isEmpty(workManager)) response.setRenderParameter("workManager", workManager);
173             response.setRenderParameter(FACTORY_TYPE_PARAMETER, Integer.toString(factoryType));
174             response.setRenderParameter(DEST_TYPE_PARAMETER, Integer.toString(destinationType));
175             response.setRenderParameter(CURRENT_DEST_PARAMETER, Integer.toString(currentDestination));
176             response.setRenderParameter(CURRENT_FACTORY_PARAMETER, Integer.toString(currentFactory));
177             for (int i = 0; i < connectionFactories.size(); i++) {
178                 JMSConnectionFactoryData data = (JMSConnectionFactoryData) connectionFactories.get(i);
179                 String JavaDoc key = "factory."+i+".";
180                 data.save(response, key);
181             }
182             for (int i = 0; i < adminObjects.size(); i++) {
183                 JMSAdminObjectData data = (JMSAdminObjectData) adminObjects.get(i);
184                 String JavaDoc key = "destination."+i+".";
185                 data.save(response, key);
186             }
187         }
188
189         public int getFactoryType() {
190             return factoryType;
191         }
192
193         public void setFactoryType(int factoryType) {
194             this.factoryType = factoryType;
195         }
196
197         public int getDestinationType() {
198             return destinationType;
199         }
200
201         public void setDestinationType(int destinationType) {
202             this.destinationType = destinationType;
203         }
204
205         public int getCurrentFactoryID() {
206             return currentFactory;
207         }
208
209         public void setCurrentFactoryID(int id) {
210             currentFactory = id;
211         }
212
213         public int getCurrentDestinationID() {
214             return currentDestination;
215         }
216
217         public void setCurrentDestinationID(int id) {
218             currentDestination = id;
219         }
220
221         public String JavaDoc getRarURI() {
222             return rarURI;
223         }
224
225         public void setRarURI(String JavaDoc rarURI) {
226             this.rarURI = rarURI;
227         }
228
229         public String JavaDoc getDependency() {
230             return dependency;
231         }
232
233         public void setDependency(String JavaDoc dependency) {
234             this.dependency = dependency;
235         }
236
237         public String JavaDoc getInstanceName() {
238             return instanceName;
239         }
240
241         public void setInstanceName(String JavaDoc instanceName) {
242             this.instanceName = instanceName;
243         }
244
245         public String JavaDoc getWorkManager() {
246             return workManager;
247         }
248
249         public void setWorkManager(String JavaDoc workManager) {
250             this.workManager = workManager;
251         }
252
253         public Properties JavaDoc getInstanceProps() {
254             return instanceProps;
255         }
256
257         public List JavaDoc getConnectionFactories() {
258             return connectionFactories;
259         }
260
261         public List JavaDoc getAdminObjects() {
262             return adminObjects;
263         }
264
265         public JMSConnectionFactoryData getCurrentFactory() {
266             return (JMSConnectionFactoryData) connectionFactories.get(currentFactory);
267         }
268
269         public JMSAdminObjectData getCurrentDestination() {
270             return (JMSAdminObjectData) adminObjects.get(currentDestination);
271         }
272
273         public int getConnectionFactoryCount() {
274             return connectionFactories.size();
275         }
276
277         public int getDestinationCount() {
278             return adminObjects.size();
279         }
280     }
281
282     public static class JMSConnectionFactoryData {
283         private int factoryType;
284         private String JavaDoc instanceName;
285         private String JavaDoc transaction; //none, local, xa
286
private boolean xaTransactionCaching;
287         private boolean xaThreadCaching;
288         private Integer JavaDoc poolMinSize;
289         private Integer JavaDoc poolMaxSize;
290         private Integer JavaDoc poolBlockingTimeout;
291         private Integer JavaDoc poolIdleTimeout;
292         private Properties JavaDoc instanceProps = new Properties JavaDoc();
293
294         public void load(PortletRequest request, String JavaDoc prefix) {
295             factoryType = isEmpty(request.getParameter(prefix+FACTORY_TYPE_PARAMETER)) ? -1 : Integer.parseInt(request.getParameter(prefix+FACTORY_TYPE_PARAMETER));
296             instanceName = request.getParameter(prefix+INSTANCE_NAME_PARAMETER);
297             transaction = request.getParameter(prefix+TRANSACTION_PARAMETER);
298             xaThreadCaching = !isEmpty(request.getParameter(prefix+XA_THREAD_PARAMETER)) && request.getParameter(prefix+XA_THREAD_PARAMETER).equals("true");
299             xaTransactionCaching = isEmpty(request.getParameter(prefix+XA_TRANSACTION_PARAMETER)) || request.getParameter(prefix+XA_TRANSACTION_PARAMETER).equals("true");
300             poolMinSize = isEmpty(request.getParameter(prefix+MIN_SIZE_PARAMETER)) ? null : new Integer JavaDoc(request.getParameter(prefix+MIN_SIZE_PARAMETER));
301             poolMaxSize = isEmpty(request.getParameter(prefix+MAX_SIZE_PARAMETER)) ? null : new Integer JavaDoc(request.getParameter(prefix+MAX_SIZE_PARAMETER));
302             poolIdleTimeout = isEmpty(request.getParameter(prefix+IDLE_TIME_PARAMETER)) ? null : new Integer JavaDoc(request.getParameter(prefix+IDLE_TIME_PARAMETER));
303             poolBlockingTimeout = isEmpty(request.getParameter(prefix+BLOCK_TIME_PARAMETER)) ? null : new Integer JavaDoc(request.getParameter(prefix+BLOCK_TIME_PARAMETER));
304             Map JavaDoc map = request.getParameterMap();
305             for(int i=0; i<20; i++) {
306                 String JavaDoc key = prefix+"instance-config-" + i;
307                 if(map.containsKey(key)) {
308                     instanceProps.setProperty(key.substring(prefix.length()), request.getParameter(key));
309                 }
310             }
311         }
312
313         public void save(ActionResponse response, String JavaDoc prefix) {
314             if(factoryType > -1) response.setRenderParameter(prefix+FACTORY_TYPE_PARAMETER, Integer.toString(factoryType));
315             if(!isEmpty(instanceName)) response.setRenderParameter(prefix+INSTANCE_NAME_PARAMETER, instanceName);
316             if(!isEmpty(transaction)) response.setRenderParameter(prefix+TRANSACTION_PARAMETER, transaction);
317             response.setRenderParameter(prefix+XA_THREAD_PARAMETER, Boolean.toString(xaThreadCaching));
318             response.setRenderParameter(prefix+XA_TRANSACTION_PARAMETER, Boolean.toString(xaTransactionCaching));
319             if(poolMinSize != null) response.setRenderParameter(prefix+MIN_SIZE_PARAMETER, poolMinSize.toString());
320             if(poolMaxSize != null) response.setRenderParameter(prefix+MAX_SIZE_PARAMETER, poolMaxSize.toString());
321             if(poolBlockingTimeout != null) response.setRenderParameter(prefix+BLOCK_TIME_PARAMETER, poolBlockingTimeout.toString());
322             if(poolIdleTimeout != null) response.setRenderParameter(prefix+IDLE_TIME_PARAMETER, poolIdleTimeout.toString());
323             for (Iterator JavaDoc it = instanceProps.entrySet().iterator(); it.hasNext();) {
324                 Map.Entry JavaDoc entry = (Map.Entry JavaDoc) it.next();
325                 if(!isEmpty((String JavaDoc)entry.getValue())) {
326                     response.setRenderParameter(prefix+entry.getKey(), (String JavaDoc)entry.getValue());
327                 }
328             }
329         }
330
331         public int getFactoryType() {
332             return factoryType;
333         }
334
335         public void setFactoryType(int factoryType) {
336             this.factoryType = factoryType;
337         }
338
339         public String JavaDoc getInstanceName() {
340             return instanceName;
341         }
342
343         public void setInstanceName(String JavaDoc instanceName) {
344             this.instanceName = instanceName;
345         }
346
347         public String JavaDoc getTransaction() {
348             return transaction;
349         }
350
351         public void setTransaction(String JavaDoc transaction) {
352             this.transaction = transaction;
353         }
354
355         public boolean isXaTransactionCaching() {
356             return xaTransactionCaching;
357         }
358
359         public void setXaTransactionCaching(boolean xaTransactionCaching) {
360             this.xaTransactionCaching = xaTransactionCaching;
361         }
362
363         public boolean isXaThreadCaching() {
364             return xaThreadCaching;
365         }
366
367         public void setXaThreadCaching(boolean xaThreadCaching) {
368             this.xaThreadCaching = xaThreadCaching;
369         }
370
371         public Integer JavaDoc getPoolMinSize() {
372             return poolMinSize;
373         }
374
375         public void setPoolMinSize(Integer JavaDoc poolMinSize) {
376             this.poolMinSize = poolMinSize;
377         }
378
379         public Integer JavaDoc getPoolMaxSize() {
380             return poolMaxSize;
381         }
382
383         public void setPoolMaxSize(Integer JavaDoc poolMaxSize) {
384             this.poolMaxSize = poolMaxSize;
385         }
386
387         public Integer JavaDoc getPoolBlockingTimeout() {
388             return poolBlockingTimeout;
389         }
390
391         public void setPoolBlockingTimeout(Integer JavaDoc poolBlockingTimeout) {
392             this.poolBlockingTimeout = poolBlockingTimeout;
393         }
394
395         public Integer JavaDoc getPoolIdleTimeout() {
396             return poolIdleTimeout;
397         }
398
399         public void setPoolIdleTimeout(Integer JavaDoc poolIdleTimeout) {
400             this.poolIdleTimeout = poolIdleTimeout;
401         }
402
403         public Properties JavaDoc getInstanceProps() {
404             return instanceProps;
405         }
406     }
407
408     public static class JMSAdminObjectData {
409         private int destinationType;
410         private String JavaDoc name;
411         private Properties JavaDoc instanceProps = new Properties JavaDoc();
412
413         public void load(PortletRequest request, String JavaDoc prefix) {
414             destinationType = isEmpty(request.getParameter(prefix+DEST_TYPE_PARAMETER)) ? -1 : Integer.parseInt(request.getParameter(prefix+DEST_TYPE_PARAMETER));
415             name = request.getParameter(prefix+NAME_PARAMETER);
416             Map JavaDoc map = request.getParameterMap();
417             for(int i=0; i<20; i++) {
418                 String JavaDoc key = prefix+"instance-config-" + i;
419                 if(map.containsKey(key)) {
420                     instanceProps.setProperty(key.substring(prefix.length()), request.getParameter(key));
421                 }
422             }
423         }
424
425         public void save(ActionResponse response, String JavaDoc prefix) {
426             if(destinationType > -1) response.setRenderParameter(prefix+DEST_TYPE_PARAMETER, Integer.toString(destinationType));
427             if(!isEmpty(name)) response.setRenderParameter(prefix+NAME_PARAMETER, name);
428             for (Iterator JavaDoc it = instanceProps.entrySet().iterator(); it.hasNext();) {
429                 Map.Entry JavaDoc entry = (Map.Entry JavaDoc) it.next();
430                 if(!isEmpty((String JavaDoc)entry.getValue())) {
431                     response.setRenderParameter(prefix+entry.getKey(), (String JavaDoc)entry.getValue());
432                 }
433             }
434         }
435
436         public int getDestinationType() {
437             return destinationType;
438         }
439
440         public void setDestinationType(int destinationType) {
441             this.destinationType = destinationType;
442         }
443
444         public String JavaDoc getName() {
445             return name;
446         }
447
448         public void setName(String JavaDoc name) {
449             this.name = name;
450         }
451
452         public Properties JavaDoc getInstanceProps() {
453             return instanceProps;
454         }
455     }
456
457     private static String JavaDoc getPropertyName(String JavaDoc propertyKey, JMSProviderData.ConfigPropertyData[] configs) {
458         int pos = propertyKey.lastIndexOf('-');
459         String JavaDoc num = propertyKey.substring(pos+1);
460         return configs[Integer.parseInt(num)].getName();
461     }
462
463     protected static String JavaDoc save(PortletRequest request, ActionResponse response, JMSResourceData data, boolean planOnly) throws IOException JavaDoc {
464         JMSProviderData provider = JMSProviderData.getProviderData(data.rarURI, request);
465         if(data.objectName == null || data.objectName.equals("")) { // we're creating a new pool
466
//data.instanceName = data.instanceName.replaceAll("\\s", "");
467
DeploymentManager JavaDoc mgr = PortletManager.getDeploymentManager(request);
468             try {
469                 File JavaDoc rarFile = PortletManager.getRepositoryEntry(request, data.getRarURI());
470                 ConnectorDeployable deployable = new ConnectorDeployable(rarFile.toURL());
471                 DeploymentConfiguration JavaDoc config = mgr.createConfiguration(deployable);
472                 final DDBeanRoot JavaDoc ddBeanRoot = deployable.getDDBeanRoot();
473                 Connector15DCBRoot root = (Connector15DCBRoot) config.getDConfigBeanRoot(ddBeanRoot);
474                 ConnectorDCB connector = (ConnectorDCB) root.getDConfigBean(ddBeanRoot.getChildBean(root.getXpaths()[0])[0]);
475
476                 EnvironmentData environment = new EnvironmentData();
477                 connector.setEnvironment(environment);
478                 org.apache.geronimo.deployment.service.jsr88.Artifact configId = new org.apache.geronimo.deployment.service.jsr88.Artifact();
479                 environment.setConfigId(configId);
480                 configId.setGroupId("console.jms");
481                 configId.setArtifactId(data.instanceName);
482                 configId.setVersion("1.0");
483                 configId.setType("rar");
484                 if(data.dependency != null && !data.dependency.trim().equals("")) {
485                     Artifact artifact = Artifact.create(data.dependency.trim());
486                     org.apache.geronimo.deployment.service.jsr88.Artifact dep = new org.apache.geronimo.deployment.service.jsr88.Artifact();
487                     environment.setDependencies(new org.apache.geronimo.deployment.service.jsr88.Artifact[]{dep});
488                     dep.setArtifactId(artifact.getArtifactId());
489                     if(artifact.getGroupId() != null) {
490                         dep.setGroupId(artifact.getGroupId());
491                     }
492                     if(artifact.getGroupId() != null) {
493                         dep.setType(artifact.getType());
494                     }
495                     if(artifact.getVersion() != null) {
496                         dep.setVersion(artifact.getVersion().toString());
497                     }
498                 }
499                 
500                 // Basic settings on RA plan and RA instance
501
ResourceAdapter ra;
502                 if(connector.getResourceAdapter().length > 0) {
503                     ra = connector.getResourceAdapter(0);
504                 } else {
505                     ra = new ResourceAdapter();
506                     connector.setResourceAdapter(new ResourceAdapter[]{ra});
507                 }
508                 ResourceAdapterInstance raInstance = new ResourceAdapterInstance();
509                 ra.setResourceAdapterInstance(raInstance);
510                 raInstance.setResourceAdapterName(data.instanceName);
511                 for (Iterator JavaDoc it = data.instanceProps.entrySet().iterator(); it.hasNext();) {
512                     Map.Entry JavaDoc entry = (Map.Entry JavaDoc) it.next();
513                     String JavaDoc name = getPropertyName((String JavaDoc)entry.getKey(), provider.getInstanceConfigProperties());
514                     for(int i=0; i<raInstance.getConfigPropertySetting().length; i++) {
515                         if(raInstance.getConfigPropertySetting(i).getName().equals(name)) {
516                             raInstance.getConfigPropertySetting(i).setValue((String JavaDoc)entry.getValue());
517                             break;
518                         }
519                     }
520                 }
521                 GBeanLocator workManager = new GBeanLocator();
522                 raInstance.setWorkManager(workManager);
523                 workManager.setGBeanLink(data.workManager); //todo
524
// Connection Factories
525
if(data.getConnectionFactoryCount() > 0) {
526                     ConnectionDefinition[] defs = new ConnectionDefinition[data.getConnectionFactoryCount()];
527                     for (int i = 0; i < defs.length; i++) {
528                         defs[i] = new ConnectionDefinition();
529                     }
530                     ra.setConnectionDefinition(defs);
531                     for (int i = 0; i < data.getConnectionFactories().size(); i++) {
532                         JMSConnectionFactoryData factoryData = (JMSConnectionFactoryData) data.getConnectionFactories().get(i);
533                         JMSProviderData.ConnectionDefinition providerData = provider.getConnectionDefinitions()[factoryData.getFactoryType()];
534                         ConnectionDefinition def = defs[i];
535                         def.setConnectionFactoryInterface(providerData.getConnectionFactoryInterface());
536                         ConnectionDefinitionInstance instance = new ConnectionDefinitionInstance();
537                         def.setConnectionInstance(new ConnectionDefinitionInstance[]{instance});
538                         if(providerData.getConnectionFactoryInterface().equals("javax.jms.ConnectionFactory")) {
539                             instance.setImplementedInterface(new String JavaDoc[]{"javax.jms.QueueConnectionFactory","javax.jms.TopicConnectionFactory"});
540                         }
541                         instance.setName(factoryData.getInstanceName());
542                         SinglePool pool = new SinglePool();
543                         instance.getConnectionManager().setPoolSingle(pool);
544                         pool.setMatchOne(true);
545                         pool.setMaxSize(factoryData.getPoolMaxSize());
546                         pool.setMinSize(factoryData.getPoolMinSize());
547                         pool.setBlockingTimeoutMillis(factoryData.getPoolBlockingTimeout());
548                         pool.setIdleTimeoutMinutes(factoryData.getPoolIdleTimeout());
549                         if(factoryData.getTransaction().equals("none")) {
550                             instance.getConnectionManager().setTransactionNone(true);
551                         } else if(factoryData.getTransaction().equals("local")) {
552                             instance.getConnectionManager().setTransactionLocal(true);
553                         } else if(factoryData.getTransaction().equals("xa")) {
554                             instance.getConnectionManager().setTransactionXA(true);
555                             instance.getConnectionManager().setTransactionXACachingThread(factoryData.isXaThreadCaching());
556                             instance.getConnectionManager().setTransactionXACachingTransaction(factoryData.isXaTransactionCaching());
557                         }
558                         for (Iterator JavaDoc it = factoryData.instanceProps.entrySet().iterator(); it.hasNext();) {
559                             Map.Entry JavaDoc entry = (Map.Entry JavaDoc) it.next();
560                             String JavaDoc name = getPropertyName((String JavaDoc)entry.getKey(), providerData.getConfigProperties());
561                             for(int j=0; j<instance.getConfigPropertySetting().length; j++) {
562                                 if(instance.getConfigPropertySetting(j).getName().equals(name)) {
563                                     instance.getConfigPropertySetting(j).setValue((String JavaDoc)entry.getValue());
564                                     break;
565                                 }
566                             }
567                         }
568                     }
569                 }
570
571                 // Destinations
572
DDBean JavaDoc[] ddBeans = connector.getDDBean().getChildBean(connector.getXpaths()[0]);
573                 AdminObjectDCB[] adminDCBs = new AdminObjectDCB[ddBeans.length];
574                 for (int i = 0; i < adminDCBs.length; i++) {
575                     adminDCBs[i] = (AdminObjectDCB) connector.getDConfigBean(ddBeans[i]);
576                 }
577                 for (int i = 0; i < data.getAdminObjects().size(); i++) {
578                     JMSAdminObjectData admin = (JMSAdminObjectData) data.getAdminObjects().get(i);
579                     JMSProviderData.AdminObjectDefinition providerData = provider.getAdminObjectDefinitions()[admin.getDestinationType()];
580                     for (int j = 0; j < adminDCBs.length; j++) {
581                         AdminObjectDCB adminDCB = adminDCBs[j];
582                         if(adminDCB.getAdminObjectInterface().equals(providerData.getAdminObjectInterface())) {
583                             AdminObjectInstance[] before = adminDCB.getAdminObjectInstance();
584                             AdminObjectInstance[] after = new AdminObjectInstance[before.length+1];
585                             System.arraycopy(before, 0, after, 0, before.length);
586                             AdminObjectInstance instance = new AdminObjectInstance();
587                             after[before.length] = instance;
588                             adminDCB.setAdminObjectInstance(after);
589                             instance.setMessageDestinationName(admin.getName());
590                             for (Iterator JavaDoc it = admin.instanceProps.entrySet().iterator(); it.hasNext();) {
591                                 Map.Entry JavaDoc entry = (Map.Entry JavaDoc) it.next();
592                                 String JavaDoc name = getPropertyName((String JavaDoc)entry.getKey(), providerData.getConfigProperties());
593                                 for(int k=0; k<instance.getConfigPropertySetting().length; k++) {
594                                     if(instance.getConfigPropertySetting(k).getName().equals(name)) {
595                                         instance.getConfigPropertySetting(k).setValue((String JavaDoc)entry.getValue());
596                                         break;
597                                     }
598                                 }
599                             }
600                             break;
601                         }
602                     }
603                 }
604
605                 // Save
606
if(planOnly) {
607                     ByteArrayOutputStream JavaDoc out = new ByteArrayOutputStream JavaDoc();
608                     config.save(out);
609                     out.close();
610                     return new String JavaDoc(out.toByteArray(), "US-ASCII");
611                 } else {
612                     File JavaDoc tempFile = File.createTempFile("console-deployment",".xml");
613                     tempFile.deleteOnExit();
614                     log.debug("Writing JMS Resource deployment plan to "+tempFile.getAbsolutePath());
615                     BufferedOutputStream JavaDoc out = new BufferedOutputStream JavaDoc(new FileOutputStream JavaDoc(tempFile));
616                     config.save(out);
617                     out.flush();
618                     out.close();
619                     Target JavaDoc[] targets = mgr.getTargets();
620                     ProgressObject JavaDoc po = mgr.distribute(targets, rarFile, tempFile);
621                     waitForProgress(po);
622                     if(po.getDeploymentStatus().isCompleted()) {
623                         TargetModuleID JavaDoc[] ids = po.getResultTargetModuleIDs();
624                         po = mgr.start(ids);
625                         waitForProgress(po);
626                         if(po.getDeploymentStatus().isCompleted()) {
627                             ids = po.getResultTargetModuleIDs();
628                             log.info("Deployment completed successfully!");
629                         }
630                     }
631                 }
632             } catch (Exception JavaDoc e) {
633                 log.error("Unable to save connection pool", e);
634             } finally {
635                 if(mgr != null) mgr.release();
636             }
637         } else { // We're saving updates to an existing pool
638
if(planOnly) {
639                 throw new UnsupportedOperationException JavaDoc("Can't update a plan for an existing deployment");
640             }
641             throw new UnsupportedOperationException JavaDoc("Can't edit existing configurations yet");
642         }
643         return null;
644     }
645 }
646
647
Popular Tags