KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > wsif > providers > jca > WSIFUtils_JCA


1 /*
2  * The Apache Software License, Version 1.1
3  *
4  *
5  * Copyright (c) 2002 The Apache Software Foundation. All rights
6  * reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright
16  * notice, this list of conditions and the following disclaimer in
17  * the documentation and/or other materials provided with the
18  * distribution.
19  *
20  * 3. The end-user documentation included with the redistribution,
21  * if any, must include the following acknowledgment:
22  * "This product includes software developed by the
23  * Apache Software Foundation (http://www.apache.org/)."
24  * Alternately, this acknowledgment may appear in the software itself,
25  * if and wherever such third-party acknowledgments normally appear.
26  *
27  * 4. The names "WSIF" and "Apache Software Foundation" must
28  * not be used to endorse or promote products derived from this
29  * software without prior written permission. For written
30  * permission, please contact apache@apache.org.
31  *
32  * 5. Products derived from this software may not be called "Apache",
33  * nor may "Apache" appear in their name, without prior written
34  * permission of the Apache Software Foundation.
35  *
36  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
40  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47  * SUCH DAMAGE.
48  * ====================================================================
49  *
50  * This software consists of voluntary contributions made by many
51  * individuals on behalf of the Apache Software Foundation and was
52  * originally based on software copyright (c) 2001, 2002, International
53  * Business Machines, Inc., http://www.apache.org. For more
54  * information on the Apache Software Foundation, please see
55  * <http://www.apache.org/>.
56  */

57
58
59 package org.apache.wsif.providers.jca;
60
61 import java.net.MalformedURLException JavaDoc;
62 import java.net.URL JavaDoc;
63 import java.util.ArrayList JavaDoc;
64 import java.util.Iterator JavaDoc;
65 import java.util.List JavaDoc;
66 import java.util.StringTokenizer JavaDoc;
67
68 import javax.naming.*;
69 import javax.resource.cci.ConnectionFactory JavaDoc;
70 import javax.wsdl.*;
71 import javax.wsdl.Binding;
72 import javax.wsdl.extensions.ExtensibilityElement;
73
74 import org.apache.wsif.util.WSIFUtils;
75 import org.apache.wsif.wsdl.extensions.format.TypeMapping;
76 import org.apache.wsif.format.WSIFFormatHandler;
77
78
79 /**
80  * A utility class with methods simplifying the JNDI lookup of a ConnectionFactory.
81  *
82  * @author Piotr Przybylski <piotrp@ca.ibm.com>
83  */

84
85
86 public class WSIFUtils_JCA extends WSIFUtils{
87
88     private static final long serialVersionUID = 1L;
89     private static final String JavaDoc DOT = ".";
90     private static final String JavaDoc lookupPrefix = "java:comp/env/";
91     private static final String JavaDoc emptyString = "";
92
93     /**
94      * Returns the default lookup name created from the Service namespace,
95      * Service name and Port name. The default lookup name is used if there is no explicit lookup
96      * name value specified in the Resource Adapter address extensibility element.
97      *
98      * @param service
99      * @param port
100      * @return String
101      */

102     public static String JavaDoc getJNDILookupName(Service service, Port port) {
103         
104         String JavaDoc jndiName = getPackageNameFromNamespaceURI(service.getQName().getNamespaceURI());
105         if(!jndiName.endsWith(DOT))
106             jndiName = jndiName + DOT;
107         jndiName = jndiName.replace('.', '/');
108         jndiName = jndiName + WSIFUtils_JCA.getJavaNameFromXMLName(service.getQName().getLocalPart());
109         jndiName = jndiName + WSIFUtils_JCA.getJavaNameFromXMLName(port.getName());
110         return jndiName;
111         
112     }
113
114
115
116     /**
117      * Returns a Connection Factory from the JNDI context. The order of search
118      * is to use the component's local naming context (java:comp/env/) first, then the global naming context.
119      * If the lookup fails or the lookup result does not match <code>res_type</code>, null is returned.
120      *
121      * @param res_ref_name
122      * @param res_type
123      * @return ConnectionFactory
124      */

125     public static ConnectionFactory JavaDoc lookupConnectionFactory(String JavaDoc res_ref_name, String JavaDoc res_type){
126         
127         ConnectionFactory JavaDoc connectionFactory = null;
128         Context ctx = null;
129         try {
130             // Create the initial context
131
ctx = new InitialContext();
132             if (ctx == null) {
133                 return null;
134             }
135             connectionFactory = (ConnectionFactory JavaDoc) ctx.lookup(lookupPrefix + res_ref_name);
136
137             if (connectionFactory == null) {
138                 throw new NamingException();
139             }
140
141             // Verify that the retrieved factory is of type "res_type"
142
try {
143                 if (!(Class.forName(res_type, false, Thread.currentThread().getContextClassLoader()).isInstance(connectionFactory))) {
144                     return null;
145                 }
146             }
147             catch (ClassNotFoundException JavaDoc exn5) {
148                 return null;
149             }
150
151             ctx.close();
152         }
153         catch (NamingException exn2) {
154             try {
155                 if (ctx == null) {
156                     return null;
157                 }
158                 // Try lookup without lookup prefix (java:comp/env/)
159
connectionFactory = (ConnectionFactory JavaDoc) ctx.lookup(res_ref_name);
160
161                 if (connectionFactory == null) {
162                     return null;
163                 }
164                 // Verify that the retrieved factory is of type "res_type"
165
try {
166                     if (!(Class.forName(res_type, false, Thread.currentThread().getContextClassLoader()).isInstance(connectionFactory))) {
167                         return null;
168                     }
169                 }
170                 catch (ClassNotFoundException JavaDoc exn5) {
171                     return null;
172                 }
173                 ctx.close();
174             }
175             catch (NamingException exn3) {
176                 return null;
177             }
178         }
179         return connectionFactory;
180     }
181
182 }
183
Popular Tags