📄 rmitransportserverimpl.java
字号:
/* * 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.jca.server.rmi;import java.rmi.Remote;import java.rmi.RemoteException;import java.rmi.registry.LocateRegistry;import java.rmi.registry.Registry;import java.rmi.server.UnicastRemoteObject;import java.util.ArrayList;import java.util.List;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.ode.jca.server.ConnectionProvider;import org.apache.ode.ra.transports.rmi.OdeRemote;import org.apache.ode.ra.transports.rmi.OdeTransportPipeRemote;/** * Server-side of the RMI transport. Manages a collection of communication * "pipes", each represented by its own remote object. */public class RmiTransportServerImpl implements OdeRemote { private static final Log __log = LogFactory.getLog(RmiTransportServerImpl.class); private List<RmiPipeServerImpl> _pipes = new ArrayList<RmiPipeServerImpl>(); private int _port = 1099; private Remote _remote; private ConnectionProvider _connProvider; private String _id; public RmiTransportServerImpl() { } public void setId(String id) { _id = id; } public void setConnectionProvider(ConnectionProvider connprovider) { _connProvider = connprovider; ; } public void setPort(int port) { _port = port; } public int getPort() { return _port; } public synchronized void start() throws RemoteException { if (_id == null) throw new IllegalStateException("Must set id!"); if (_connProvider == null) throw new IllegalStateException("Must set connection provider."); _remote = UnicastRemoteObject.exportObject(this, 0); // Bind the RMI-server to the registry, creating one if necessary try { LocateRegistry.createRegistry(_port); __log.debug("Created registry on port " + _port); } catch (Exception ex) { __log.debug("Could not create registry on port " + _port + " (perhaps it's already there)"); /* ignore */ } Registry registry = LocateRegistry.getRegistry(_port); registry.rebind(_id, _remote); __log.debug("Bound JCA server as \"" + _id + "\" on registry port " + _port); } public synchronized void stop() throws RemoteException { UnicastRemoteObject.unexportObject(this, false); } public synchronized OdeTransportPipeRemote newPipe() throws RemoteException { RmiPipeServerImpl pipe = new RmiPipeServerImpl(this, _connProvider.createConnectionObject(), _connProvider .getConnectionIntefaces()); OdeTransportPipeRemote remote = (OdeTransportPipeRemote) UnicastRemoteObject.exportObject(pipe, 0); pipe.remote = remote; _pipes.add(pipe); return remote; } void pipeClosed(RmiPipeServerImpl pipe) { if (__log.isDebugEnabled()) __log.debug("Closing RMI pipe " + pipe); try { UnicastRemoteObject.unexportObject(pipe.remote, false); } catch (RemoteException re) { // ignore } synchronized (this) { _pipes.remove(pipe); } _connProvider.destroyConnectionObject(pipe.target); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -