001: /*
002: * This file is part of the WfMOpen project.
003: * Copyright (C) 2001-2003 Danet GmbH (www.danet.de), GS-AN.
004: * All rights reserved.
005: *
006: * This program is free software; you can redistribute it and/or modify
007: * it under the terms of the GNU General Public License as published by
008: * the Free Software Foundation; either version 2 of the License, or
009: * (at your option) any later version.
010: *
011: * This program is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
014: * GNU General Public License for more details.
015: *
016: * You should have received a copy of the GNU General Public License
017: * along with this program; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
019: *
020: * $Id: WorkflowServiceConnection.java,v 1.8 2007/02/08 15:26:28 mlipp Exp $
021: *
022: * $Log: WorkflowServiceConnection.java,v $
023: * Revision 1.8 2007/02/08 15:26:28 mlipp
024: * Properly propagate cause.
025: *
026: * Revision 1.7 2006/10/22 20:13:30 mlipp
027: * Added preferences for workflow service.
028: *
029: * Revision 1.6 2006/09/29 12:32:13 drmlipp
030: * Consistently using WfMOpen as projct name now.
031: *
032: * Revision 1.5 2006/09/27 12:49:14 drmlipp
033: * Removed specific configurability (done using JNDI environement entries).
034: *
035: * Revision 1.4 2006/09/26 16:12:45 drmlipp
036: * Made JNDI configurable.
037: *
038: * Revision 1.3 2005/11/07 14:36:11 drmlipp
039: * Adapted to revised request attribute handling.
040: *
041: * Revision 1.2 2005/10/14 12:45:35 drmlipp
042: * Added information.
043: *
044: * Revision 1.1 2005/09/28 15:11:00 drmlipp
045: * Optimized and simplified.
046: *
047: * Revision 1.4 2005/09/16 15:06:51 drmlipp
048: * Fixed typo.
049: *
050: * Revision 1.3 2005/06/22 15:14:27 drmlipp
051: * Improved lifecycle handling.
052: *
053: * Revision 1.2 2005/05/11 15:17:40 drmlipp
054: * Changed scope to session.
055: *
056: * Revision 1.1 2005/05/11 14:28:07 drmlipp
057: * Started JSF utility package.
058: *
059: */
060: package de.danet.an.workflow.clients.mgmtportlets;
061:
062: import java.io.Serializable;
063: import java.util.Hashtable;
064:
065: import javax.faces.context.ExternalContext;
066: import javax.faces.context.FacesContext;
067: import javax.faces.el.EvaluationException;
068: import javax.naming.Context;
069: import javax.portlet.PortletConfig;
070: import javax.portlet.PortletPreferences;
071: import javax.portlet.PortletRequest;
072:
073: import de.danet.an.util.ResourceNotAvailableException;
074: import de.danet.an.workflow.api.FactoryConfigurationError;
075: import de.danet.an.workflow.api.WorkflowService;
076: import de.danet.an.workflow.api.WorkflowServiceFactory;
077:
078: /**
079: * This class implements a managed bean that holds the connection to the
080: * workflow service.
081: */
082: public class WorkflowServiceConnection implements Serializable {
083:
084: private static final org.apache.commons.logging.Log logger = org.apache.commons.logging.LogFactory
085: .getLog(WorkflowServiceConnection.class);
086:
087: private transient WorkflowService wfs = null;
088:
089: /**
090: * Create a new instance initializing all attributes to default values.
091: */
092: public WorkflowServiceConnection() {
093: if (logger.isDebugEnabled()) {
094: logger.debug("Created managed bean");
095: }
096: }
097:
098: /**
099: * Utility function to get the workflow engine.
100: * @return the workflow engine stub.
101: * @throws ResourceNotAvailableException if the engine is not available.
102: */
103: public WorkflowService getWorkflowService()
104: throws EvaluationException {
105: try {
106: if (wfs == null) {
107: if (logger.isDebugEnabled()) {
108: logger
109: .debug("Creating connection to workflow service");
110: }
111: // Get workflow service
112: WorkflowServiceFactory wfsf = WorkflowServiceFactory
113: .newInstance();
114: Object req = FacesContext.getCurrentInstance()
115: .getExternalContext().getRequest();
116: if (req instanceof PortletRequest) {
117: String wejn = ((PortletRequest) req)
118: .getPreferences().getValue(
119: "workflowEngineJndiName", "");
120: if (wejn != null && wejn.length() > 0) {
121: wfsf.setProperty("de.danet.an.workflow.engine",
122: wejn);
123: }
124: String icf = ((PortletRequest) req)
125: .getPreferences().getValue(
126: "initialContextFactory", "");
127: String icu = ((PortletRequest) req)
128: .getPreferences().getValue(
129: "initialContextUrl", "");
130: if (icf != null && icf.length() > 0 || icu != null
131: && icu.length() > 0) {
132: Hashtable env = new Hashtable();
133: if (icf != null && icf.length() > 0) {
134: env.put(Context.INITIAL_CONTEXT_FACTORY,
135: icf);
136: }
137: if (icu != null && icu.length() > 0) {
138: env.put(Context.PROVIDER_URL, icu);
139: }
140: wfsf
141: .setProperty(
142: "javax.naming.InitialContext.Environment",
143: env);
144: }
145: }
146: wfs = wfsf.newWorkflowService();
147: }
148: return wfs;
149: } catch (FactoryConfigurationError e) {
150: logger.error(e.getMessage(), e);
151: throw new EvaluationException(e.getMessage(), e);
152: }
153: }
154:
155: /**
156: * Convenience method to get an instance of this bean.
157: */
158: public static WorkflowServiceConnection instance(String beanName)
159: throws EvaluationException {
160: FacesContext fc = FacesContext.getCurrentInstance();
161: return (WorkflowServiceConnection) fc.getApplication()
162: .getVariableResolver().resolveVariable(fc, beanName);
163: }
164: }
|