blob: a6deeeb14126ee710b20a7b5b27cf2b812e4a459 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.ode.jbi;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.jbi.management.DeploymentException;
import javax.xml.namespace.QName;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* Representation of a JBI service unit. A JBI service unit may actually consist
* of multiple processes.
*/
class OdeServiceUnit {
private static final Log __log = LogFactory.getLog(OdeServiceUnit.class);
private static final Messages __msgs = Messages.getMessages(Messages.class);
/** The ever-present context. */
private OdeContext _ode;
/** Our own directory managed by JBI */
private File _serviceUnitRootPath;
/** Our JBI indentifier. */
private String _serviceUnitID;
private Collection<QName> _registered = new ArrayList<QName>();
/** Ctor. */
OdeServiceUnit(OdeContext ode, String serviceUnitID, String serviceUnitRootPath) {
_ode = ode;
_serviceUnitID = serviceUnitID;
_serviceUnitRootPath = new File(serviceUnitRootPath);
}
public void deploy() throws DeploymentException {
try {
_ode._store.deploy(_serviceUnitRootPath);
} catch (Exception ex) {
String errmsg = __msgs.msgOdeProcessDeploymentFailed(_serviceUnitRootPath, _serviceUnitID);
__log.error(errmsg, ex);
throw new DeploymentException(errmsg, ex);
}
}
public void undeploy() throws Exception {
try {
Collection<QName> undeployed = _ode._store.undeploy(_serviceUnitRootPath);
for (QName pqname : undeployed) {
_ode._server.unregister(pqname);
}
} catch (Exception ex) {
String errmsg = __msgs.msgOdeProcessUndeploymentFailed(null);
__log.error(errmsg, ex);
throw new DeploymentException(errmsg, ex);
}
}
public void init() throws Exception {
// TODO Auto-generated method stub
}
public void shutdown() throws Exception {
// TODO Auto-generated method stub
}
public void start() throws Exception {
List<QName> pids = _ode._store.listProcesses(_serviceUnitRootPath.getName());
if (pids == null) {
__log.error(_serviceUnitRootPath.getName() + " not found in process store. ");
throw new IllegalStateException("Process store and JBI out of synch.");
}
Exception e = null;
for (QName pid : pids) {
try {
_ode._server.register(_ode._store.getProcessConfiguration(pid));
_registered.add(pid);
} catch (Exception ex) {
e = ex;
__log.error("Unable to load " + pid, ex);
break;
}
}
if (_registered.size() != pids.size()) {
for (QName pid : new ArrayList<QName>(_registered))
try {
_ode._server.unregister(pid);
_registered.remove(pid);
} catch (Exception ex) {
__log.error("Unable to unload " + pid, ex);
}
}
if (e != null)
throw e;
}
public void stop() throws Exception {
for (QName pid : new ArrayList<QName>(_registered)) {
try {
_ode._server.unregister(pid);
_registered.remove(pid);
} catch (Exception ex) {
__log.error("Unable to unload " + pid, ex);
}
}
}
}