scopedaoimpl.java

来自「bpel执行引擎用来执行bpel业务流程」· Java 代码 · 共 250 行

JAVA
250
字号
/* * 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.daohib.bpel;import org.apache.ode.bpel.dao.CorrelationSetDAO;import org.apache.ode.bpel.dao.PartnerLinkDAO;import org.apache.ode.bpel.dao.ProcessInstanceDAO;import org.apache.ode.bpel.dao.ScopeDAO;import org.apache.ode.bpel.dao.ScopeStateEnum;import org.apache.ode.bpel.dao.XmlDataDAO;import org.apache.ode.bpel.evt.BpelEvent;import org.apache.ode.daohib.SessionManager;import org.apache.ode.daohib.bpel.hobj.HBpelEvent;import org.apache.ode.daohib.bpel.hobj.HCorrelationSet;import org.apache.ode.daohib.bpel.hobj.HPartnerLink;import org.apache.ode.daohib.bpel.hobj.HScope;import org.apache.ode.daohib.bpel.hobj.HXmlData;import org.apache.ode.utils.SerializableUtils;import org.apache.ode.utils.stl.CollectionsX;import org.apache.ode.utils.stl.UnaryFunction;import org.apache.ode.utils.stl.UnaryFunctionEx;import org.hibernate.Criteria;import org.hibernate.Query;import org.hibernate.criterion.Restrictions;import java.util.*;/** * Hibernate-based {@link ScopeDAO} implementation. */class ScopeDaoImpl extends HibernateDao implements ScopeDAO {    private static final String QRY_VARIABLE = "from " + HXmlData.class.getName() +            " as x where x.name = ? and x.scope.id = ?";    private static final String QRY_CSET = "from " + HCorrelationSet.class.getName() +            " as c where c.name = ? and c.scope.id = ?";    private static final String QRY_SCOPE_EPR = "from " + HPartnerLink.class.getName() +            " as e where e.modelId = ? and e.scope = ?";    private HScope _scope;    private HashMap<String,XmlDataDAO> _variables = new HashMap<String,XmlDataDAO>();    public ScopeDaoImpl(SessionManager sm, HScope scope) {        super(sm, scope);        _scope = scope;    }    /**     * @see org.apache.ode.bpel.dao.ScopeDAO#getCorrelationSet(java.lang.String)     */    public CorrelationSetDAO getCorrelationSet(String corrSetName) {        Query qry = getSession().createQuery(QRY_CSET);        qry.setString(0,corrSetName);        qry.setLong(1,_scope.getId());        HCorrelationSet cs;        List res = qry.list();        if(res.size() == 0){            // if it doesn't exist, we make it            cs = new HCorrelationSet(_scope, corrSetName);//            _scope.addCorrelationSet(cs);            getSession().save(cs);        } else {            cs = (HCorrelationSet)res.get(0);        }        return new CorrelationSetDaoImpl(_sm, cs);    }    /**     * @see org.apache.ode.bpel.dao.ScopeDAO#getParentScope()     */    public ScopeDAO getParentScope() {        return _scope.getParentScope() != null                ? new ScopeDaoImpl(_sm, _scope.getParentScope())                : null;    }    /**     * @see org.apache.ode.bpel.dao.ScopeDAO#getProcessInstance()     */    public ProcessInstanceDAO getProcessInstance() {        return new ProcessInstanceDaoImpl(_sm, _scope.getInstance());    }    /**     * @see org.apache.ode.bpel.dao.ScopeDAO#setState(org.apache.ode.bpel.dao.ScopeStateEnum)     */    public void setState(ScopeStateEnum state) {        _scope.setState(state.toString());        getSession().update(_scope);    }    /**     * @see org.apache.ode.bpel.dao.ScopeDAO#getState()     */    public ScopeStateEnum getState() {        return new ScopeStateEnum(_scope.getState());    }    /**     * @see org.apache.ode.bpel.dao.ScopeDAO#getName()     */    public String getName() {        return _scope.getName();    }    /**     * @see org.apache.ode.bpel.dao.ScopeDAO#getVariable(java.lang.String)     */    public XmlDataDAO getVariable(String varName) {        XmlDataDAO cached = _variables.get(varName);        if (cached != null) return _variables.get(varName);        HXmlData data;        Query qry = getSession().createQuery(QRY_VARIABLE);        qry.setString(0,varName);        qry.setLong(1,_scope.getId());        List res = qry.list();        if(res.size() > 0)            data = (HXmlData)res.get(0);        else {            data = new HXmlData();            data.setName(varName);            data.setScope(_scope);        }        XmlDataDaoImpl varDao = new XmlDataDaoImpl(_sm, data);        _variables.put(varName, varDao);        return varDao;    }    public PartnerLinkDAO createPartnerLink(int modelId, String pLinkName, String myRole, String partnerRole) {        HPartnerLink epr = new HPartnerLink();        epr.setModelId(modelId);        epr.setLinkName(pLinkName);        epr.setMyRole(myRole);        epr.setPartnerRole(partnerRole);        epr.setScope(_scope);//        _scope.addPartnerLink(epr);        getSession().save(epr);        PartnerLinkDAOImpl eprDao = new PartnerLinkDAOImpl(_sm, epr);        return eprDao;    }    public PartnerLinkDAO getPartnerLink(int plinkId) {        Query qry = getSession().createQuery(QRY_SCOPE_EPR);        qry.setInteger(0,plinkId);        qry.setEntity(1,_scope);        HPartnerLink hpl = (HPartnerLink) qry.uniqueResult();        if (hpl == null)            return null;        return new PartnerLinkDAOImpl(_sm, hpl);    }    public Collection<PartnerLinkDAO> getPartnerLinks() {        ArrayList<PartnerLinkDAO> plinks = new ArrayList<PartnerLinkDAO>();        for (HPartnerLink hPartnerLink : _scope.getPartnerLinks()) {            plinks.add(new PartnerLinkDAOImpl(_sm, hPartnerLink));        }        return plinks;    }    /**     * @see org.apache.ode.bpel.dao.ScopeDAO#getScopeInstanceId()     */    public Long getScopeInstanceId() {        return _scope.getId();    }    /**     * @see org.apache.ode.bpel.dao.ScopeDAO#getModelId()     */    public int getModelId() {        return _scope.getScopeModelId();    }    public Set<CorrelationSetDAO> getCorrelationSets() {        Set<CorrelationSetDAO> results = new HashSet<CorrelationSetDAO>();        for (HCorrelationSet hCorrelationSet : _scope.getCorrelationSets()) {            results.add(new CorrelationSetDaoImpl(_sm, hCorrelationSet));        }        return results;    }    @SuppressWarnings("unchecked")    public Collection<ScopeDAO> getChildScopes() {        Query q = getSession().createQuery("from " + HScope.class.getName() + " as x where x.parentScope=?");        q.setEntity(0, _scope);        Collection<HScope> hscopes = q.list();        return CollectionsX.transform(new LinkedList<ScopeDAO>(), hscopes, new UnaryFunction<HScope,ScopeDAO>() {            public ScopeDAO apply(HScope x) {                return new ScopeDaoImpl(_sm,x);            }        });    }    @SuppressWarnings("unchecked")    public Collection<XmlDataDAO> getVariables() {        Query q = getSession().createFilter(_scope.getVariables(), "where this.scope=?");        q.setEntity(0, _scope);        return CollectionsX.transform(new LinkedList<XmlDataDAO>(), (Collection<HXmlData>)q.list(), new UnaryFunction<HXmlData,XmlDataDAO>() {            public XmlDataDAO apply(HXmlData x) {                return new XmlDataDaoImpl(_sm,x);            }        });    }    @SuppressWarnings("unchecked")    public List<BpelEvent> listEvents() {//        CriteriaBuilder cb = new CriteriaBuilder();        Criteria crit = _sm.getSession().createCriteria(HBpelEvent.class);//        if (efilter != null)//            cb.buildCriteria(crit, efilter);        crit.add(Restrictions.eq("scopeId",_scope.getId()));        List<HBpelEvent> hevents = crit.list();        List<BpelEvent> ret = new ArrayList<BpelEvent>(hevents.size());        try {            CollectionsX.transformEx(ret,hevents,new UnaryFunctionEx<HBpelEvent,BpelEvent>() {                public BpelEvent apply(HBpelEvent x) throws Exception{                    return (BpelEvent) SerializableUtils.toObject(x.getData().getBinary(),BpelEvent.class.getClassLoader());                }            });        }catch (Exception ex) {            throw new RuntimeException(ex);        }        return ret;    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?