001: /*
002: * The Apache Software License, Version 1.1
003: *
004: *
005: * Copyright (c) 2002 The Apache Software Foundation. All rights
006: * reserved.
007: *
008: * Redistribution and use in source and binary forms, with or without
009: * modification, are permitted provided that the following conditions
010: * are met:
011: *
012: * 1. Redistributions of source code must retain the above copyright
013: * notice, this list of conditions and the following disclaimer.
014: *
015: * 2. Redistributions in binary form must reproduce the above copyright
016: * notice, this list of conditions and the following disclaimer in
017: * the documentation and/or other materials provided with the
018: * distribution.
019: *
020: * 3. The end-user documentation included with the redistribution,
021: * if any, must include the following acknowledgment:
022: * "This product includes software developed by the
023: * Apache Software Foundation (http://www.apache.org/)."
024: * Alternately, this acknowledgment may appear in the software itself,
025: * if and wherever such third-party acknowledgments normally appear.
026: *
027: * 4. The names "WSIF" and "Apache Software Foundation" must
028: * not be used to endorse or promote products derived from this
029: * software without prior written permission. For written
030: * permission, please contact apache@apache.org.
031: *
032: * 5. Products derived from this software may not be called "Apache",
033: * nor may "Apache" appear in their name, without prior written
034: * permission of the Apache Software Foundation.
035: *
036: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
037: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
038: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
039: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
040: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
041: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
042: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
043: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
044: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
045: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
046: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
047: * SUCH DAMAGE.
048: * ====================================================================
049: *
050: * This software consists of voluntary contributions made by many
051: * individuals on behalf of the Apache Software Foundation and was
052: * originally based on software copyright (c) 2001, 2002, International
053: * Business Machines, Inc., http://www.apache.org. For more
054: * information on the Apache Software Foundation, please see
055: * <http://www.apache.org/>.
056: */
057: package com.myeis.j2c;
058:
059: import java.io.*;
060: import javax.resource.*;
061: import javax.resource.cci.*;
062: import javax.resource.spi.*;
063: import javax.security.auth.*;
064: import javax.transaction.xa.XAResource;
065: import org.apache.wsif.providers.jca.toolplugin.*;
066: import org.apache.wsif.providers.jca.WSIFFormatHandler_JCA;
067: import com.myeis.repository.*;
068: import com.myeis.*;
069: import org.apache.wsif.WSIFException;
070: import org.apache.wsif.providers.jca.*;
071:
072: public class MyEISManagedConnection implements ManagedConnection {
073:
074: private Subject fieldSubject = null;
075: private ConnectionRequestInfo fieldConnectionRequestInfo = null;
076: private MyEISManagedConnectionFactory fieldManagedConnectionFactory = null;
077:
078: /**
079: * Constructor
080: */
081: public MyEISManagedConnection(Subject subject,
082: ConnectionRequestInfo connectionRequestInfo,
083: ManagedConnectionFactory managedConnectionFactory) {
084:
085: this .fieldSubject = subject;
086: this .fieldConnectionRequestInfo = connectionRequestInfo;
087: this .fieldManagedConnectionFactory = (MyEISManagedConnectionFactory) managedConnectionFactory;
088: }
089:
090: /**
091: * @see ManagedConnection#getConnection(Subject, ConnectionRequestInfo)
092: */
093: public Object getConnection(Subject arg0, ConnectionRequestInfo arg1)
094: throws ResourceException {
095:
096: return new MyEISConnection(this );
097: }
098:
099: /**
100: * @see ManagedConnection#destroy()
101: */
102: public void destroy() throws ResourceException {
103: }
104:
105: /**
106: * @see ManagedConnection#cleanup()
107: */
108: public void cleanup() throws ResourceException {
109: }
110:
111: /**
112: * @see ManagedConnection#associateConnection(Object)
113: */
114: public void associateConnection(Object arg0)
115: throws ResourceException {
116: }
117:
118: /**
119: * @see ManagedConnection#addConnectionEventListener(ConnectionEventListener)
120: */
121: public void addConnectionEventListener(ConnectionEventListener arg0) {
122: }
123:
124: /**
125: * @see ManagedConnection#removeConnectionEventListener(ConnectionEventListener)
126: */
127: public void removeConnectionEventListener(
128: ConnectionEventListener arg0) {
129: }
130:
131: /**
132: * @see ManagedConnection#getXAResource()
133: */
134: public XAResource getXAResource() throws ResourceException {
135: return null;
136: }
137:
138: /**
139: * @see ManagedConnection#getLocalTransaction()
140: */
141: public javax.resource.spi.LocalTransaction getLocalTransaction()
142: throws ResourceException {
143: return null;
144: }
145:
146: /**
147: * @see ManagedConnection#getMetaData()
148: */
149: public ManagedConnectionMetaData getMetaData()
150: throws ResourceException {
151: return null;
152: }
153:
154: /**
155: * @see ManagedConnection#setLogWriter(PrintWriter)
156: */
157: public void setLogWriter(PrintWriter arg0) throws ResourceException {
158: }
159:
160: /**
161: * @see ManagedConnection#getLogWriter()
162: */
163: public PrintWriter getLogWriter() throws ResourceException {
164: return null;
165: }
166:
167: /**
168: * close()
169: */
170: public void close() throws ResourceException {
171:
172: }
173:
174: /**
175: * call
176: */
177: public boolean call(InteractionSpec interactionSpec,
178: Record inputRecord, Record outputRecord)
179: throws ResourceException {
180: /*
181: * Depending on the capabilities of the real EIS backend, the implementation of this method will differ. If the backend system
182: * supports the metadata browsing capabilities (as part of its normal business functions) then this method can simply delegate
183: * all the calls to the backend. If the EIS does not have this capability, then the resource adapter needs to implement the logic
184: * to run the getDefinition and getPortTypes operations.
185: *
186: * In the myEIS sample, the backend implements the import service as business functions. Hence all calls can be passed directly to
187: * the backend. As an illustration of how the resource adapter can implement the functions, we introduced the 'local' setting on the 'RepositoryLocation'
188: * property. If the property is set to 'local' then the resource adapter implements the logic.
189: */
190: try {
191: /*
192: * If the repository is 'local' then perform the import service logic here.
193: */
194: if ((this .fieldManagedConnectionFactory
195: .getRepositoryLocation().equals("local"))
196: && (((MyEISInteractionSpec) interactionSpec)
197: .getFunctionName()
198: .equals("IMPORT_PORTTYPES"))) {
199: // local import
200: String queryString = (String) ((WSIFMessage_JCAStreamable) inputRecord)
201: .getObjectPart("queryString");
202: PortTypeArray portTypeArray = (new Repository())
203: .getPortTypes(queryString);
204: ((WSIFMessage_JCAStreamable) outputRecord)
205: .setObjectPart("result", portTypeArray);
206:
207: return true;
208: }
209: if ((this .fieldManagedConnectionFactory
210: .getRepositoryLocation().equals("local"))
211: && (((MyEISInteractionSpec) interactionSpec)
212: .getFunctionName()
213: .equals("IMPORT_DEFINITION"))) {
214: // local import
215: PortTypeSelection selection = (PortTypeSelection) ((WSIFMessage_JCAStreamable) inputRecord)
216: .getObjectPart("portTypeSelection");
217: ImportDefinition importDefinition = (new Repository())
218: .getDefinition(selection);
219: ((WSIFMessage_JCAStreamable) outputRecord)
220: .setObjectPart("result", importDefinition);
221:
222: return true;
223: }
224: } catch (WSIFException e) {
225: e.printStackTrace();
226: throw new ResourceException(e.getMessage());
227: }
228:
229: // invocation of remote import and all other business services
230: try {
231: ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
232:
233: ObjectOutputStream objectOutputStream = new ObjectOutputStream(
234: outputStream);
235: objectOutputStream
236: .writeObject(((MyEISInteractionSpec) interactionSpec)
237: .getFunctionName());
238: objectOutputStream.flush();
239:
240: ((WSIFMessage_JCAStreamable) inputRecord)
241: .write(outputStream);
242:
243: // call my EIS
244: MyEIS myEIS = new MyEIS();
245: byte[] outBytes = myEIS.doIt(outputStream.toByteArray());
246:
247: ByteArrayInputStream inputStream = new ByteArrayInputStream(
248: outBytes);
249: ((WSIFMessage_JCAStreamable) outputRecord)
250: .read(inputStream);
251: } catch (IOException e) {
252: e.printStackTrace();
253: throw new ResourceException(e.getMessage());
254: }
255:
256: return true;
257: }
258: }
|