Fundamentals - Coherence*Extend-JMS

Hi,
     I've recently created a setup for using Coherence*Extend-JMS (as highlighted in
     URL below).
     http://wiki.tangosol.com/display/COH31UG/Configuring+and+Using+Coherence*Extend-JMS
     While the application components are running just fine (as expected), i would like
     to know the exact inner workings of this setup.
     1. What is the role played by the 2 JMS resources (TangosolQueue &
     TangosolTopic) ?
     2. What is the role of the Template queue ? Is it used internally by Coherence
     to create temporary queues ?
     3. What exactly is this com.tangosol.net.jms.AdapterFactory ? Is it a set of
     JMS listeners sitting on the Cache server ?
     4. Can my ejb component (hosted inside Weblogic) not direclty call put/get
     methods on a Cacheserver (hosted outside Weblogic box) without going via
     these Queues/Topics ?
     ie. are these queues/topics really necessary for my ejb components to
     communicate with the Cache server ? is there an alternate to this ?
     Thanks
     Mike

Hi Mike,
     Answers inline...
     1. What is the role played by the 2 JMS resources (TangosolQueue &
     TangosolTopic) ?
     They are used to send the various Extend protocol messages between the Extend client (s) and the Extend proxy(ies) running within the Coherence cluster.
     2. What is the role of the Template queue ? Is it used internally by Coherence
     to create temporary queues ?
     Yes, exactly.
     3. What exactly is this com.tangosol.net.jms.AdapterFactory ? Is it a set of
     JMS listeners sitting on the Cache server ?
     It is a factory class for creating the Extend-JMS stub and proxy components. When you run the main() method, it creates a Extend-JMS proxy and then launches a DefaultCacheServer.
     4. Can my ejb component (hosted inside Weblogic) not direclty call put/get
     methods on a Cacheserver (hosted outside Weblogic box) without going via
     these Queues/Topics ?
     Absolutely! You can simply make your WebLogic instance a member of the Coherence cluster. If you do this, you can manipulate Coherence caches directly, without going through Coherence*Extend. Coherence*Extend is intended to be used to connect non-clustered JVMs (for example, a GUI application running on a desktop machine) with the Coherence cluster.
     The following FAQ may also be of interest to you:
     http://forums.tangosol.com/thread.jspa?messageID=1728&#1728
     Regards,
     Jason

Similar Messages

  • Coherence Extend & JMS

    Hi,
    I was trying to get a Coherence Extend client to talk to a proxy via JMS. I can see both client and proxy connect to the queue, but the client throws a timeout exception. I am including the stack trace. This is using version 3.4.rc3.
    I have 3 questions.
    1) I do not see much referencing JMS. Is this something i should be using?
    2) What are the pro's/con's to using JMS? The biggest pro i see is that i can have multiple proxies listen on the same queue. This would seem to simplify my Extend configuration. Any performance impact with JMS?
    3) What would cause the timeout? Any clue?
    2008-09-16 15:24:35.010 Oracle Coherence GE 3.4/403 Release Candidate 3 <D5> (thread=ExtendJmsCacheService:JmsInitiator, member=n/a): Started: JmsInitiator{Name=ExtendJmsCacheService:JmsInitiator, State=(SERVICE_STARTED), ThreadCount=0, Codec=Codec(Format=POF), PingInterval=0, PingTimeout=5000, RequestTimeout=5000, ConnectTimeout=10000, QueueConnectionFactoryName=cn=BIGBOYJMS,cn=ibmjms, QueueName=cn=PREFERENCES.DEV.1,cn=ibmjms, MessageExpiration=0, MessagePriority=1, MessageDeliveryMode=NON_PERSISTENT}
    2008-09-16 15:24:35.075 Oracle Coherence GE 3.4/403 Release Candidate 3 <Info> (thread=main, member=n/a): Connected to queue://BIGBOYJMS/AMQ.48CAD39620002202?persistence=1
    Exception in thread "main" com.tangosol.net.RequestTimeoutException: request timed out after 5000 millis
    at com.tangosol.coherence.component.net.extend.message.Request$Status.waitForResponse(Request.CDB:58)
    at com.tangosol.coherence.component.net.extend.Channel.request(Channel.CDB:20)
    at com.tangosol.coherence.component.net.extend.Channel.request(Channel.CDB:1)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.Peer.openConnection(Peer.CDB:15)
    at com.tangosol.coherence.component.net.extend.Connection.open(Connection.CDB:5)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.peer.Initiator.ensureConnection(Initiator.CDB:12)
    at com.tangosol.coherence.component.net.extend.remoteService.RemoteCacheService.openChannel(RemoteCacheService.CDB:5)
    at com.tangosol.coherence.component.net.extend.RemoteService.doStart(RemoteService.CDB:11)
    at com.tangosol.coherence.component.net.extend.RemoteService.start(RemoteService.CDB:5)
    at com.tangosol.coherence.component.util.SafeService.startService(SafeService.CDB:28)
    at com.tangosol.coherence.component.util.safeService.SafeCacheService.startService(SafeCacheService.CDB:5)
    at com.tangosol.coherence.component.util.SafeService.ensureRunningService(SafeService.CDB:27)
    at com.tangosol.coherence.component.util.SafeService.start(SafeService.CDB:14)
    at com.tangosol.net.DefaultConfigurableCacheFactory.ensureService(DefaultConfigurableCacheFactory.java:841)
    at com.tangosol.net.DefaultConfigurableCacheFactory.ensureService(DefaultConfigurableCacheFactory.java:763)
    at com.tangosol.net.DefaultCacheServer.start(DefaultCacheServer.java:140)
    at com.tangosol.net.DefaultCacheServer.main(DefaultCacheServer.java:61)
    2008-09-16 15:24:40.078 Oracle Coherence GE 3.4/403 Release Candidate 3 <Error> (thread=main, member=n/a): Error while starting service "ExtendJmsCacheService": com.tangosol.net.RequestTimeoutException: request timed out after 5000 millis
    at com.tangosol.coherence.component.net.extend.message.Request$Status.waitForResponse(Request.CDB:58)
    at com.tangosol.coherence.component.net.extend.Channel.request(Channel.CDB:20)
    at com.tangosol.coherence.component.net.extend.Channel.request(Channel.CDB:1)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.Peer.openConnection(Peer.CDB:15)
    at com.tangosol.coherence.component.net.extend.Connection.open(Connection.CDB:5)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.peer.Initiator.ensureConnection(Initiator.CDB:12)
    at com.tangosol.coherence.component.net.extend.remoteService.RemoteCacheService.openChannel(RemoteCacheService.CDB:5)
    at com.tangosol.coherence.component.net.extend.RemoteService.doStart(RemoteService.CDB:11)
    at com.tangosol.coherence.component.net.extend.RemoteService.start(RemoteService.CDB:5)
    at com.tangosol.coherence.component.util.SafeService.startService(SafeService.CDB:28)
    at com.tangosol.coherence.component.util.safeService.SafeCacheService.startService(SafeCacheService.CDB:5)
    at com.tangosol.coherence.component.util.SafeService.ensureRunningService(SafeService.CDB:27)
    at com.tangosol.coherence.component.util.SafeService.start(SafeService.CDB:14)
    at com.tangosol.net.DefaultConfigurableCacheFactory.ensureService(DefaultConfigurableCacheFactory.java:841)
    at com.tangosol.net.DefaultConfigurableCacheFactory.ensureService(DefaultConfigurableCacheFactory.java:763)
    at com.tangosol.net.DefaultCacheServer.start(DefaultCacheServer.java:140)
    at com.tangosol.net.DefaultCacheServer.main(DefaultCacheServer.java:61)
    thanx
    kevin

    Hi Kevin,
    Please file a MetaLink issue that includes detailed information about your JMS provider (vendor, version, configuration, etc.).
    In the meantime, I'd suggest taking a look at Coherence*Extend-TCP. In general, it is faster, more scalable, and much lighter weight than the JMS binding:
    http://wiki.tangosol.com/display/COH34UG/Configuring+and+Using+Coherence+Extend#ConfiguringandUsingCoherenceExtend-ConfiguringandUsingCoherenceExtendTCP
    Regards,
    Jason

  • Accessing Coherence Extend* Proxy Deployoed on Weblogic Coherence Cluster from Java Client

    Hi,
    I am trying to access Extend Proxy through Thick Java Client
    Followed steps as per below links and deployed a GAR on 3 Server ( 2 Storage Enabled Coherence Cluster and 1 Coherence Storage Disabled Extend Proxy Enabled). I could see ExtendProxyService using JMX and can see Port running on the System.
    Ref :
    Setting Up Coherence*Extend - 12c (12.1.2)
    http://docs.oracle.com/middleware/1212/coherence/COHAG/deploy_options.htm#CHDJBJDI
    Issue :
    When I tried to Execute Java Client to Connect to Proxy Server it Connects to Port and then Disconnects with ConnectionException as below.
    Observer below Lines in Box is show he Connected Socket with Port 9099 which is Extend Proxy Port
    Error Message
    2013-11-08 14:55:55.114/1.202 Oracle Coherence GE 12.1.2.0.0 <D5> (thread=TcpClientRemoteService:TcpInitiator, member=n/a): Started: TcpInitiator{Name=TcpClientRemoteService:TcpInitiator, State=(SERVICE_STARTED), ThreadCount=0, Codec=Codec(Format=POF), Serializer=com.tangosol.io.DefaultSerializer, PingInterval=0, PingTimeout=30000, RequestTimeout=30000, ConnectTimeout=10000, SocketProvider=[email protected], RemoteAddresses=WrapperSocketAddressProvider{Providers=[[DTC37446E9C6CBD/127.0.0.0:9099]]}, SocketOptions{LingerTimeout=0, KeepAliveEnabled=true, TcpDelayEnabled=false}}
    2013-11-08 14:55:55.146/1.234 Oracle Coherence GE 12.1.2.0.0 <D5> (thread=main, member=n/a): Connecting Socket to 127.0.0.0:9099
    2013-11-08 14:55:55.146/1.234 Oracle Coherence GE 12.1.2.0.0 <Info> (thread=main, member=n/a): Connected Socket to 127.0.0.0:9099
    2013-11-08 14:55:55.161/1.249 Oracle Coherence GE 12.1.2.0.0 <Info> (thread=main, member=n/a): Error establishing a connection with 127.0.0.0:9099: com.tangosol.net.messaging.ConnectionException: TcpConnection(Id=null, Open=true, LocalAddress=0.0.0.0:54384, RemoteAddress=127.0.0.0:9099)
    2013-11-08 14:55:55.161/1.249 Oracle Coherence GE 12.1.2.0.0 <Error> (thread=main, member=n/a): Error while starting service "TcpClientRemoteService": com.tangosol.net.messaging.ConnectionException: could not establish a connection to one of the following addresses: [127.0.0.0:9099]; make sure the "remote-addresses" configuration element contains an address and port of a running TcpAcceptor
        at com.tangosol.coherence.component.util.daemon.queueProcessor.service.peer.initiator.TcpInitiator.openConnection(TcpInitiator.CDB:121)
        at com.tangosol.coherence.component.util.daemon.queueProcessor.service.peer.Initiator.ensureConnection(Initiator.CDB:11)
        at com.tangosol.coherence.component.net.extend.remoteService.RemoteCacheService.openChannel(RemoteCacheService.CDB:7)
        at com.tangosol.coherence.component.net.extend.RemoteService.doStart(RemoteService.CDB:11)
        at com.tangosol.coherence.component.net.extend.RemoteService.start(RemoteService.CDB:5)
        at com.tangosol.coherence.component.util.SafeService.startService(SafeService.CDB:53)
        at com.tangosol.coherence.component.util.safeService.SafeCacheService.startService(SafeCacheService.CDB:5)
        at com.tangosol.coherence.component.util.SafeService.ensureRunningService(SafeService.CDB:27)
        at com.tangosol.coherence.component.util.SafeService.start(SafeService.CDB:14)
        at com.tangosol.net.ExtensibleConfigurableCacheFactory.startService(ExtensibleConfigurableCacheFactory.java:681)
        at com.tangosol.net.ExtensibleConfigurableCacheFactory.ensureService(ExtensibleConfigurableCacheFactory.java:599)
        at com.tangosol.coherence.config.scheme.AbstractCachingScheme.realizeCache(AbstractCachingScheme.java:50)
        at com.tangosol.coherence.config.scheme.AbstractBundlingScheme.realizeCache(AbstractBundlingScheme.java:31)
        at com.tangosol.net.ExtensibleConfigurableCacheFactory.ensureCache(ExtensibleConfigurableCacheFactory.java:254)
        at com.tangosol.net.CacheFactory.getCache(CacheFactory.java:205)
        at com.tangosol.net.CacheFactory.getCache(CacheFactory.java:182)

    If this proxy design (not starting up due to a invalid entry in "authroized-hosts") is on-purpose from Coherence Engineers - then it should be re-visited.
    I think the PROXY Server should just log a message stating about the invalid DNS entry for the Authorized-host and continue with the startup...Failing to start completely doesn;t make sense since one cannot rely completely on DNS to
    say everything should be correct before a server start.
    Ofcourse you can overcome by writing your own Custom Filter - but the issue pop's out as with any custom filter(s) is maintaining them along the road (with all minor/major coherence upgrades).
    Also - this "Authorized-Hosts" concept should be carefully analyzed particularly for the following issues...
    (1) if the client IP is changed in the DNS server - will the proxy-server allow the new Client connection without any issues? when will the PROXY server flush its CLIENT DNS entries or what is the TTL time-limit for a CLIENT cached through Authorized-hosts by the PROXY-SERVER?
    (2) Suppose, we have a CLIENT in the "Authroized-Hosts" making a valid connection to the PROXY and putting some cache into the SERVER CACHE through the PROXY....now if the IP-address (DNS being the same) of the CLIENT is changed - can the CLIENT can GET the CACHE it just PUT into the SERVER without any ERRORS?
    (3) How often we need to re-start PROXIES? Do we need to re-start them often for the DNS issues (if any) mentioned above?
    Looks like the Limited documentation & examples for Coherence*Extend - particularly for .NET & C++ clients & *Extend Proxies is a point of concern.
    vk

  • Coherence Extend C++

    We are running a 36 node storage cluster with 9 proxies. The application written in C++ starts to get timeouts from Coherence extend which we have set to 5s around 30 minutes into heavy put load. At this point it will fall over as it continues to fall behind. The problem came about when we updated from 3.7.1.0 -> 3.7.1.7. Is there any known issue with the current release which would trigger this behavior?
    I have also noticed at some points the client will appear to stop functioning and we will no longer get timeouts.
    I can provide configuration as needed.

    I've not heard of any issues in this area.
    We run C++ extend clients on 3.7.1.4, (not .7), and have no issues, (upgrading from 3.7.1.0), so any issue must have been introduced after 3.7.1.4.
    We're in the process of upgrading to 3.7.1.7 (soon to be .8) so will watch this issue and also feed back on any thing we find.
    Have you changed anything else at the same time? Have you run a network test recently?

  • Coherence *Extend-TCP configuration not working

    Hi,
         I was trying to setup the Coherence *Extend-TCP configuration on my solaris box.
         To start with, i'm trying to start a Cache server instance by using the cluster-side configuration XML (given at URL below)
         http://wiki.tangosol.com/display/COH32UG/Configuring+and+Using+Coherence*Extend
         But while starting its throwing me the below error. The Coherence version that i'm using is 3.2/353. Please advise.
         Exception in thread "main" java.lang.IllegalArgumentException: The "Proxy" element is missing a required acceptor configuration element
         at com.tangosol.coherence.component.util.daemon.queueProcessor.service.ProxyService.configure(ProxyService.CDB:30)
         at com.tangosol.coherence.component.util.SafeService.startService(SafeService.CDB:5)
         at com.tangosol.coherence.component.util.SafeService.getRunningService(SafeService.CDB:26)
         at com.tangosol.coherence.component.util.SafeService.ensureRunningService(SafeService.CDB:1)
         at com.tangosol.coherence.component.util.SafeService.start(SafeService.CDB:9)
         at com.tangosol.net.DefaultConfigurableCacheFactory.ensureService(DefaultConfigurableCacheFactory.java:775)
         at com.tangosol.net.DefaultCacheServer.start(DefaultCacheServer.java:138)
         at com.tangosol.net.DefaultCacheServer.main(DefaultCacheServer.java:60)
         regards
         Mike

    Sorry,
         I noticed that the above error occurs for version 3.1.1 (& not for 3.2) as previously
         specified in previous message (above). My apologies.
         As a follow-up, i've now installed 3.2 jars on my environment & i noticed that the
         above error doesnt occur for this version. The cache server seems to be coming
         up fine now (with the appropriate TCP/IP configuration tag in the xml).
         But when i try to run my client application (which attempts to connect to this
         remote cache server), it throws an InvocationTargetException error (full exception
         below).
         The error indicates that i'm missing some elements in the XML configuration.
         Exception
         (Wrapped) java.lang.reflect.InvocationTargetException
              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
              at java.lang.reflect.Method.invoke(Unknown Source)
              at com.tangosol.net.extend.AdapterFactory.ensureCacheServiceAdapter(AdapterFactory.java:69)
              at com.tangosol.net.DefaultConfigurableCacheFactory.ensureService(DefaultConfigurableCacheFactory.java:729)
              at com.tangosol.net.DefaultConfigurableCacheFactory.ensureCache(DefaultConfigurableCacheFactory.java:650)
              at com.tangosol.net.DefaultConfigurableCacheFactory.configureCache(DefaultConfigurableCacheFactory.java:831)
              at com.tangosol.net.DefaultConfigurableCacheFactory.ensureCache(DefaultConfigurableCacheFactory.java:284)
              at com.tangosol.net.CacheFactory.getCache(CacheFactory.java:622)
              at com.tangosol.net.CacheFactory.getCache(CacheFactory.java:600)
              at com.tangosol.examples.explore.SimpleCacheClient.main(SimpleCacheClient.java:25)
         Caused by: java.lang.IllegalArgumentException: Missing required initiator child configuration element: <extend-cache-scheme tier='front'>
         <scheme-name>extend-direct</scheme-name>
         <service-name>ExtendTcpCacheService</service-name>
         <initiator-config tier='front'>
         <tcp-initiator>
         <remote-addresses>
         <socket-address>
         <address>gpblnx1d.nam.nsroot.net</address>
         <port>32000</port>
         </socket-address>
         </remote-addresses>
         <connect-timeout>10s</connect-timeout>
         <request-timeout>5s</request-timeout>
         </tcp-initiator>
         </initiator-config>
         </extend-cache-scheme>
              at com.tangosol.coherence.extend.component.comm.Adapter.getInitiatorElement(Adapter.CDB:13)
              at com.tangosol.coherence.extend.component.comm.adapter.CacheServiceStub.configure(CacheServiceStub.CDB:5)
              at com.tangosol.coherence.extend.component.application.library.generic.CoherenceExtend.createCacheServiceStub(CoherenceExtend.CDB:4)
              at com.tangosol.coherence.extend.component.application.library.generic.CoherenceExtend.ensureCacheServiceStub(CoherenceExtend.CDB:15)

  • Coherence-Extend and Continuous Query performance

    Hi,
    I am trying to evaluate the performance impact of continous queries, when using coherence extend (TCP). The idea is that desktop clients will be running continuous queries against a cluster, and other processes will be updating the data in that cluster. The clients themselves take a purely read-only view of the data.
    In my tests, I find that the updater process takes about 250ms to update 5000 values in the cache (using a putAll operation). When I have a continuous query running against a remote cache, linked with coherence extend, the update time increases to about 1500ms. This is not CPU bound.
    Is this what people would expect?
    If so this raises questions to me about:
    1) slow subscribers - what if one of my clients is very badly behaved? Can I detect this and/or take action?
    2) conflation of updates - can Coherence do conflation?
    3) can I get control to send object deltas over the wire rather than entire objects?
    Is this a use case for which CoherenceExtend and continuous queries were designed?
    Robert

    Yes, it is certainly possible, although depending on your requirements it may be more or less additional coding. You have a few choices. For example, since you have a CQC on the cache, you could conceivably aggregate locally (on any event). In other words, since all the data are local, there is no need to do the parallel aggregation (unless it is CPU limited). Depending on the aggregation, you may only have to recalculate part of it.
    You can access the internal data structure (Map) within the CQC as follows:
    Map map = cqc.getInternalCache();
    // now we can do aggregation
    NamedCache cache = new WrapperNamedCache(map);
    cache.aggregate(..);More complex approaches would only recalculate portions based on the event, or (depending on the function) might use the event to adjust the aggregated results.
    Peace,
    Cameron Purdy | Oracle Coherence
    http://coherence.oracle.com/

  • Coherence Extends and Local Cache

    I am triying to use coherence extends to do some work with cache,
    with a local cache is that possible i keep getting null pointer exception,
    like if the data is not being stored in the cache.
         <cache-mapping>
              <cache-name>local-pds2-*</cache-name>
              <scheme-name>local-cache</scheme-name>
         </cache-mapping>
         <local-scheme>
              <scheme-name>local-cache</scheme-name>
                   <eviction-policy>LRU</eviction-policy>
                   <high-units>32000</high-units>
                   <low-units>10</low-units>
                   <unit-calculator>FIXED</unit-calculator>
                   <expiry-delay>10ms</expiry-delay>
                   <flush-delay>1000ms</flush-delay>
         </local-scheme>
    is there something wrong in my configuration?

    this is the config y use for the client
    <?xml version="1.0"?>
    <!DOCTYPE cache-config SYSTEM "cache-config.dtd">
    <cache-config>
    <caching-scheme-mapping>
         <cache-mapping>
              <cache-name>local-pds2-*</cache-name>
              <scheme-name>local-cache</scheme-name>
         </cache-mapping>
    <cache-mapping>
    <cache-name>dist-pds2-*</cache-name>
    <scheme-name>extend-dist</scheme-name>
    </cache-mapping>
    </caching-scheme-mapping>
    <caching-schemes>
         <local-scheme>
              <scheme-name>local-cache</scheme-name>
                   <eviction-policy>LRU</eviction-policy>
                   <high-units>32000</high-units>
                   <low-units>10</low-units>
                   <unit-calculator>FIXED</unit-calculator>
                   <expiry-delay>10ms</expiry-delay>
                   <flush-delay>1000ms</flush-delay>
         </local-scheme>
    <remote-cache-scheme>
    <scheme-name>extend-dist</scheme-name>
    <service-name>ExtendTcpCacheService</service-name>
    <initiator-config>
    <tcp-initiator>
    <remote-addresses>
    <socket-address>
    <address>172.16.2.229</address>
    <address>localhost</address>
    <port>5354</port>
    </socket-address>
    </remote-addresses>
    <connect-timeout>10s</connect-timeout>
    </tcp-initiator>
    <outgoing-message-handler>
    <request-timeout>5s</request-timeout>
    </outgoing-message-handler>
    </initiator-config>
    </remote-cache-scheme>
    </caching-schemes>
    </cache-config>
    and this for the server
    <?xml version="1.0"?>
    <!DOCTYPE cache-config SYSTEM "cache-config.dtd">
    <cache-config>
         <defaults>
              <serializer system-property="tangosol.coherence.serializer"/>
              <socket-provider system-property="tangosol.coherence.socketprovider"/>
         </defaults>
         <caching-scheme-mapping>
              <cache-mapping>
                   <cache-name>dist-pds2-*</cache-name>
                   <scheme-name>dist-default</scheme-name>
              </cache-mapping>
         </caching-scheme-mapping>
         <cache-mapping>
              <cache-name>dist-*</cache-name>
              <scheme-name>distributed</scheme-name>
              <init-params>
                   <init-param>
                        <param-name>back-size-limit</param-name>
                        <param-value>8MB</param-value>
                   </init-param>
              </init-params>
         </cache-mapping>
         <distributed-scheme>
              <scheme-name>distributed</scheme-name>
              <service-name>DistributedCache</service-name>
              <backing-map-scheme>
                   <local-scheme>
                        <scheme-ref>binary-backing-map</scheme-ref>
                   </local-scheme>
              </backing-map-scheme>
              <autostart>true</autostart>
         </distributed-scheme>
         <local-scheme>
              <scheme-name>binary-backing-map</scheme-name>
              <eviction-policy>HYBRID</eviction-policy>
              <high-units>{back-size-limit 0}</high-units>
              <unit-calculator>BINARY</unit-calculator>
              <expiry-delay>{back-expiry 1h}</expiry-delay>
              <flush-delay>1m</flush-delay>
              <cachestore-scheme></cachestore-scheme>
         </local-scheme>
         <caching-schemes>
              <distributed-scheme>
                   <scheme-name>dist-default</scheme-name>
                   <backing-map-scheme>
                        <local-scheme/>
                   </backing-map-scheme>
                   <autostart>true</autostart>
              </distributed-scheme>
              <proxy-scheme>
                   <service-name>ExtendTcpProxyService</service-name>
                   <acceptor-config>
                        <tcp-acceptor>
                             <local-address>
                                  <address >localhost</address>
                                  <port >5354</port>
                             </local-address>
                        </tcp-acceptor>
                   </acceptor-config>
                   <proxy-config>
                        <cache-service-proxy>
                             <enabled>true</enabled>
                        </cache-service-proxy>
                        <invocation-service-proxy>
                             <enabled>true</enabled>
                        </invocation-service-proxy>
                   </proxy-config>
                   <autostart >true</autostart>
              </proxy-scheme>
         </caching-schemes>
    </cache-config>

  • Can C++ Client use Coherence*Extend on AIX?

    Hi Experts,
    My application is a C++ client, I want to connect to Coherence Cluster using Coherence*Extend on AIX,
    I checked coherence document, I found that Coherence*Extend C++ support pure C++. But I couldn't
    find the download URL of Coherence*Extend C++ for AIX, So If C++ Client can use Coherence*Extend
    on AIX?If yes, how can I get the lib for Coherence*Extend C++ of AIX? Thanks.

    Supported environments are listed here:
    http://docs.oracle.com/cd/E24290_01/coh.371/e22839/gs_install.htm#BABDCDFG
    That does not currently include AIX; the platforms supported largely reflect the platforms that customers requested over time, so speak with your Oracle account representative.
    In the meantime, I would suggest looking at the RESTful support in Coherence that will allow you to access the caches from AIX (over REST/HTTP) without an Extend client.
    Peace,
    Cameron Purdy | Oracle

  • Coherence *Extend configuration

    Hello,
    To enable Coherence Extend, we should define a proxy-scheme in our cluster cache-config that defines a coherence *extend proxy-service, containing a tcp-acceptor with a local  address and port.
    Can there be only 1 such an extend proxy service running on the same node?  Or should we redefine the extend proxy-service configuration for each cache server that is running on the same node (to use a different port)? In both cases, we have to define at least 2 new cache-config files - one with the extend proxy service and one without. Is this correct?
    We're now trying to run 2 cache servers on the same node with an extend proxy service.  When we try to start the 2nd cache server, we get the following exception (which is quite normal because the coherence proxy service tries to bind to a socket that is already in use by the other cache server instance that is running the extend proxy service):
    2010-01-21 09:48:10.923/7.865 Oracle Coherence GE 3.5.2/463 <Error> (thread=Proxy:ExtendTcpProxyService:TcpAcceptor:TcpProcessor, member=1): error binding ServerSocket to 10.2.12.144:9099: java.net.BindException: Address already in use
    at sun.nio.ch.Net.bind(Native Method)
    at sun.nio.ch.ServerSocketChannelImpl.bind(Unknown Source)
    at sun.nio.ch.ServerSocketAdaptor.bind(Unknown Source)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.peer.acceptor.TcpAcceptor.configureSocket(TcpAcceptor.CDB:27)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.peer.acceptor.TcpAcceptor$TcpProcessor.onEnter(TcpAcceptor.CDB:25)
    at com.tangosol.coherence.component.util.Daemon.run(Daemon.CDB:14)
    at java.lang.Thread.run(Unknown Source)
    Is there a workaround that makes it possible to use the same cache configuration (containing coherence *extend proxy-service, with tcp-acceptor) with different cache servers on the same machine? 
    If not, what is the best practice to configure the *extend proxy service?
    Thanks in advance

    you can inject system properties into your coherence cache configuration as follows:
    <tcp-acceptor>
    <local-address>
    <address system-property="wouters.address">localhost</address>
    <port system-property="wouters.port">1234</port>
    </local-address>
    </tcp-acceptor>
    The above example will default to localhost:1234, however you can override these with system properties. This will allow you to reuse the same config, but tailor it to your application.
    Cheers,
    Neville.

  • Coherence*Extend remote-addresses

    We're trying to use multiple addresses for our Coherence*Extend clients to provide load-balancing and redundancy. To accomplish this, we've configured our clients with multiple socket-address entries:
    <remote-addresses>
    <socket-address>
    <address>proxyHost1</address>
    <port>9099</port>
    </socket-address>
    <socket-address>
    <address>proxyHost2</address>
    <port>9099</port>
    </socket-address>
    <socket-address>
    <address>proxyHost3</address>
    <port>9099</port>
    </socket-address>
    </remote-addresses>
    This works fine for failure situations, however, in our testing it appears that the client will connect to the nodes in a round-robin method starting with the last defined host. So, with the above configuration every client will connect to proxyHost3, and only connect to proxyHost2 if host3's connection failed. We could maintain a separate configuration file across all of our nodes shuffling the order, however this could be problematic and would not be preferred.
    Is there a better way to effectively distribute the client connections across our pool of proxies?
    Thanks,
    -Allen

    Hi Allen,
    The Coherence*Extend TCP/IP client randomizes the list of socket addresses before attempting the initial connect, so I'm not sure why you always see your clients connect to the last address in the list. I ran a quick test using both the Java and .NET client, but could not reproduce what you are seeing. Are you sure that the proxyHostX host names resolve to different IP addresses on the test client machine?
    Regards,
    Jason

  • Tiny doc error? Configuring+and+Using+Coherence+Extend

    This page:
    http://coherence.oracle.com/display/COH35UG/Configuring+and+Using+Coherence+Extend
    mentions the string "dist-extend-direct" only once. Is that intended just as an example of something that would match against
    <cache-name>dist-*</cache-name>
    or was that an error? It seems like it should be mentioned explicitly in the XML config file examples on that page.
    -Andrew

    Hi Andrew,
    It is the former. It is intended as an example of a cache name that would match the "<cache-name>dist-*</cache-name>" cache mapping in the cluster cache config.
    Patrick

  • Coherence Extend shared library is quite large

    Hello all,
    I'm starting to play around with Coherence Extend (for C++), and I've noticed that the .so provided is 67 megabytes. Even when I strip it, it only goes down to 57 MB. I'm wondering if there is a way to trim this down. Is there a list of features that I can pick and choose from that would allow for a slimmer distro? Additionally, I'm wondering if there's a static library that can be used instead of the shared one, so I can compile it directly into my other binaries (instead of a dynamic link).
    The reason I'd like a smaller library is that we're going to be trying Coherence from a CGI, and a small memory footprint is essential when the whole process only lives for 200 milliseconds on a busy box.
    Anyway, any tips would be appreciated.
    Thanks,
    Anthony
    Edited by: 952088 on Aug 10, 2012 8:39 AM - specified language

    Hi Anthony,
    You may want to measure the time it takes to load the Coherence library versus the size of the .so. It's not likely that the entire shared library will need to be loaded into memory. Only the parts that are needed for whatever your program is doing. And on most OS's, when multiple processes are using the same shared library, just one copy of the shared library will be loaded into memory and then will be shared by all of the processes.
    Using a shared library or static library should have no impact loading time or memory used as your program is loading the same "stuff" either way.
    Hope this helps,
    Patrick

  • Coherence Extend Config:   Client  create a new Cluster

    Hi,
    I have configured one storage-enabled coherence node and one proxy server on port 9099 as shown in the wiki. Coherence client is configured with the right -Dtangosol.coherence.cacheconfig which points to the xml file with
    +     +<remote-cache-scheme>++
    ++               <scheme-name>extend-dist</scheme-name>++
    ++               <service-name>ExtendTcpCacheService</service-name>++
    ++               <initiator-config>++
    ++                    <tcp-initiator>++
    ++                         <remote-addresses>++
    ++                              <socket-address>++
    ++                                   <address>Proxy_IP</address>++
    ++                                   <port>9099</port>++
    ++                              </socket-address>++
    ++                         </remote-addresses>++
    ++                         <connect-timeout>10s</connect-timeout>++
    ++                    </tcp-initiator>++
    ++                    <outgoing-message-handler>++
    ++                         <heartbeat-interval>5s</heartbeat-interval>++
    ++                         <heartbeat-timeout>4s</heartbeat-timeout>++
    ++                         <request-timeout>50s</request-timeout>++
    ++                    </outgoing-message-handler>++
    ++               </initiator-config>++
    ++          </remote-cache-scheme>++
    My Client logs shows that it has created a new cluster and then it loaded the Dtangosol.coherence.cacheconfig xml file. Is there a way to prevent my client starting a new cluster? Is configuration incorrect? Any help will be greatly appreciated :)
    Client Log:
    ======
    2011-02-10 04:39:37.599/0.599 Oracle Coherence 3.6.0.1 <Info> (thread=main, member=n/a): Loaded operational configuration from "jar:file:/usr/share/java/coherence-3.6.0.1.jar!/tangosol-coherence.xml"
    2011-02-10 04:39:37.606/0.606 Oracle Coherence 3.6.0.1 <Info> (thread=main, member=n/a): Loaded operational overrides from "jar:file:/usr/share/java/coherence-3.6.0.1.jar!/tangosol-coherence-override-dev.xml"
    2011-02-10 04:39:37.606/0.606 Oracle Coherence 3.6.0.1 <D5> (thread=main, member=n/a): Optional configuration override "/tangosol-coherence-override.xml" is not specified
    2011-02-10 04:39:37.615/0.615 Oracle Coherence 3.6.0.1 <D5> (thread=main, member=n/a): Optional configuration override "/custom-mbeans.xml" is not specified
    Oracle Coherence Version 3.6.0.1 Build 17846
    Grid Edition: Development mode
    Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
    2011-02-10 04:39:38.112/1.112 Oracle Coherence GE 3.6.0.1 <D4> (thread=main, member=n/a): TCMP bound to /172.23.73.236:8088 using SystemSocketProvider
    2011-02-10 04:39:38.432/1.432 Oracle Coherence GE 3.6.0.1 <Info> (thread=Cluster, member=n/a): This Member(Id=3, Timestamp=2011-02-10 04:39:38.236, Address=172.23.73.236:8088, MachineId=62188, Location=site:lss.emc.com,machine:lglor236,process:5631, Role=ApacheCommonsDaemonDaemonLoader, Edition=Grid Edition, Mode=Development, CpuCount=4, SocketCount=4) joined cluster "*cluster:0xC4DB" with senior Member(Id=2, Timestamp=2011-02-10* 04:33:09.003, Address=172.23.73.236:8090, MachineId=62188, Location=site:lss.emc.com,machine:lglor236,process:4193, Role=ApacheCommonsDaemonDaemonLoader, Edition=Grid Edition, Mode=Development, CpuCount=4, SocketCount=4)
    2011-02-10 04:39:38.439/1.439 Oracle Coherence GE 3.6.0.1 <D5> (thread=Cluster, member=n/a): Member 2 joined Service Cluster with senior member 2
    2011-02-10 04:39:38.440/1.440 Oracle Coherence GE 3.6.0.1 <D5> (thread=Cluster, member=n/a): Member 2 joined Service Management with senior member 2
    2011-02-10 04:39:38.440/1.440 Oracle Coherence GE 3.6.0.1 <D5> (thread=Cluster, member=n/a): Member 2 joined Service DistributedCache with senior member 2
    2011-02-10 04:39:38.442/1.442 Oracle Coherence GE 3.6.0.1 <Info> (thread=main, member=n/a): Started cluster Name=cluster:0xC4DB
    Group{Address=224.3.6.0, Port=36000, TTL=4}
    MasterMemberSet
    ThisMember=Member(Id=3, Timestamp=2011-02-10 04:39:38.236, Address=172.23.73.236:8088, MachineId=62188, Location=site:lss.emc.com,machine:lglor236,process:5631, Role=ApacheCommonsDaemonDaemonLoader)
    OldestMember=Member(Id=2, Timestamp=2011-02-10 04:33:09.003, Address=172.23.73.236:8090, MachineId=62188, Location=site:lss.emc.com,machine:lglor236,process:4193, Role=ApacheCommonsDaemonDaemonLoader)
    ActualMemberSet=MemberSet(Size=2, BitSetCount=2
    Member(Id=2, Timestamp=2011-02-10 04:33:09.003, Address=172.23.73.236:8090, MachineId=62188, Location=site:lss.emc.com,machine:lglor236,process:4193, Role=ApacheCommonsDaemonDaemonLoader)
    Member(Id=3, Timestamp=2011-02-10 04:39:38.236, Address=172.23.73.236:8088, MachineId=62188, Location=site:lss.emc.com,machine:lglor236,process:5631, Role=ApacheCommonsDaemonDaemonLoader)
    RecycleMillis=1200000
    RecycleSet=MemberSet(Size=0, BitSetCount=0
    TcpRing{Connections=[2]}
    IpMonitor{AddressListSize=0}
    2011-02-10 04:39:38.477/1.477 Oracle Coherence GE 3.6.0.1 <D5> (thread=Invocation:Management, member=3): Service Management joined the cluster with senior service member 2
    Feb 10, 2011 4:39:38 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
    INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@257b40fe: display name [org.springframework.context.support.ClassPathXmlApplicationContext@257b40fe]; startup date [Thu Feb 10 04:39:38 EST 2011]; root of context hierarchy
    Feb 10, 2011 4:39:38 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
    INFO: Loading XML bean definitions from class path resource [configurationRestApplicationContext.xml]
    Feb 10, 2011 4:39:38 AM org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
    INFO: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@257b40fe]: org.springframework.beans.factory.support.DefaultListableBeanFactory@4bd27069
    Feb 10, 2011 4:39:38 AM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
    INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@4bd27069: defining beans [component,server,router,srmconfigurationsresource,srmconfigurationtyperesource,srmconfigurationresource,coherenceStatusResource,configurationMapRepository,configurationOVFFileLoader,defaultConfigurationLoader,feedpagingLinkHandler,adminConfigTransformer,configurationMapQueryHandler,fileUploadResource,postProcessorImpl]; root of factory hierarchy
    [Fatal Error] :-1:-1: Premature end of file.
    [Fatal Error] :-1:-1: Premature end of file.
    *2011-02-10 04:39:39.332/2.332 Oracle Coherence GE 3.6.0.1 <Info> (thread=main, member=3): Loaded cache configuration from "file:/etc/sysconfig/proxy_node.xml"*
    2011-02-10 04:39:39.504/2.504 Oracle Coherence GE 3.6.0.1 <D5> (thread=DistributedCache, member=3): Service DistributedCache joined the cluster with senior service member 2
    Also I have verified that my storage enabled node and proxy node have formed a cluster...
    The client has been started with -Dtangosol.coherence.cacheconfig=/etc/sysconfig/proxy_node.xml
    Thanks & Regards,
    Sandeep

    Hi,
    Used -Dtangosol.coherence.tcmp.enabled=false to disable TCMP mode... ( Phew... :) )
    In my client code we have the following statements...
    *==> Service service = CacheFactory.getService("DistributedCache");*
    *          Set<Member> storeEnabledSet = ((DistributedCacheService) service)*
    *                    .getStorageEnabledMembers();*
    *==> CacheFactory.ensureCluster();*
    Does this needs to be changed for an Extend Client configuration?
    With my current setup I am getting exceptions ...
    2011-02-13 22:36:59.075/111.151 Oracle Coherence GE 3.6.0.1 <Error> (thread=main, member=n/a): Error while starting cluster: java.lang.UnsupportedOperationException: TCMP clustering has been disabled*; this configuration may only access clustered services via Extend proxies.*
    at com.tangosol.coherence.component.net.Cluster.onStart(Cluster.CDB:42)
    at com.tangosol.coherence.component.net.Cluster.start(Cluster.CDB:11)
    at com.tangosol.coherence.component.util.SafeCluster.startCluster(SafeCluster.CDB:3)
    at com.tangosol.coherence.component.util.SafeCluster.restartCluster(SafeCluster.CDB:7)
    at com.tangosol.coherence.component.util.SafeCluster.ensureRunningCluster(SafeCluster.CDB:26)
    at com.tangosol.coherence.component.util.SafeCluster.start(SafeCluster.CDB:2)
    at com.tangosol.net.CacheFactory.ensureCluster(CacheFactory.java:998)
    at com.emc.srm.admin.config.rest.RestApplicationLauncher.waitForCacheServer(RestApplicationLauncher.java:155)
    at com.emc.srm.admin.config.rest.RestApplicationLauncher.main(RestApplicationLauncher.java:108)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.emc.srm.common.daemon.SrmDaemon.start(SrmDaemon.java:59)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.commons.daemon.support.DaemonLoader.start(DaemonLoader.java:219)
    Any ideas on how to fix this?
    Regards,
    Sandeep
    ===========================
    Client configuration:
    <cache-mapping>
                   <cache-name>ConfigurationMapRepository</cache-name>
                   <scheme-name>extend-dist</scheme-name>
    </cache-mapping>
         <caching-schemes>
              <near-scheme>
                   <scheme-name>extend-near</scheme-name>
                   <front-scheme>
                        <local-scheme>
                             <high-units>1000</high-units>
                        </local-scheme>
                   </front-scheme>
                   <back-scheme>
                        <remote-cache-scheme>
                             <scheme-ref>extend-dist</scheme-ref>
                        </remote-cache-scheme>
                   </back-scheme>
                   <invalidation-strategy>all</invalidation-strategy>
              </near-scheme>
              <!-- Event Repository cache scheme definition START -->
              <remote-cache-scheme>
                   <scheme-name>extend-dist</scheme-name>
                   <service-name>DistributedCache</service-name>
                   <initiator-config>
                        <tcp-initiator>
                             <remote-addresses>
                                  <socket-address>
                                       <address>X.X.X.X</address>
                                       <port>9099</port>
                                  </socket-address>
                             </remote-addresses>
                             <connect-timeout>10s</connect-timeout>
                        </tcp-initiator>
                        <outgoing-message-handler>
                             <heartbeat-interval>5s</heartbeat-interval>
                             <heartbeat-timeout>4s</heartbeat-timeout>
                             <request-timeout>50s</request-timeout>
                        </outgoing-message-handler>
                   </initiator-config>
              </remote-cache-scheme>
    </caching-schemes>

  • How to ensure a Coherence Extend TCP service

    Hi,
    We have defined an Extend TCP service within our <caching-schemes> element as follows:
    <proxy-scheme>
    <service-name>ExtendTcpProxyService</service-name>
    <thread-count>5</thread-count>
    <acceptor-config>
    <tcp-acceptor>
    <local-address>
    <address>localhost</address>
    <port system-property="tangosol.coherence.tcpproxy.port">6090</port>
    <reusable>true</reusable>
    </local-address>
    <keep-alive-enabled>true</keep-alive-enabled>
    <tcp-delay-enabled>true</tcp-delay-enabled>
    </tcp-acceptor>
    </acceptor-config>
    <autostart>true</autostart>
    </proxy-scheme>
    However, we are not using com.tangosol.net.DefaultCacheServer as the entry point for our application and would prefer to continue to use our own main() method, ensuring caches as required.
    Given this, I understand that the autostart element has no effect. Clients are unable to connect and no TCP listener appears to have been started.
    Can you give a demonstration of how to call ensureService(.., ...) to start the proxy service? Is there any reason that you would advise us against this, e.g. instead starting DefaultCacheServer inside a separate process?
    Many thanks,
    James

    Hi James,
    In your main you can invoke DefaultCacheServer.startDaemon() method.
    Regards,
    Dimitri

  • Coherence extend Proxy service with no storage.

    Hi
    I am implementing coherence where I have the requirement as follows.
    1. Create two Coherence Servers in Weblogic console. These are cache stores using replicated cache scheme.
    2. Create tow Coherence servers which acts as proxy. These should not contain any cache.
    Can some body tell me how to create the cache config for the step2 i.e proxy servers? when I created the proxy server without giving the cache names I am getting cache not found error.

    Hi Sri,
    There are various options available for this but...
    If I was building this application I would probably make your Web Cluster storage-disabled members of the Coherence cluster (assuming they are Java). This will give them quicker access to data than using Extend. You would then not need the proxy servers. I would use distributed caches in your Coherence storage nodes rather than replicated and then configure near-caches in your Web layer. If you wanted to you could use the resource from the servers that you were using for proxy servers as storage nodes as this would give you a little more capacity and make the cluster a little mode durable - i.e. less prone to complete failure if you lost a node.
    So, your coherence-cachestore-config file would look like this
    <cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config"
            xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config coherence-cache-config.xsd">
        <defaults>
            <serializer>pof</serializer>
        </defaults>
        <caching-scheme-mapping>
            <cache-mapping>
                <cache-name>products</cache-name>
                <scheme-name>distributed-scheme</scheme-name>
            </cache-mapping>
        </caching-scheme-mapping>
        <caching-schemes>
            <distributed-scheme>
                <scheme-name>distributed-scheme</scheme-name>
                <service-name>DistributedCacheScheme</service-name>
                <backing-map-scheme>
                    <local-scheme/>
                </backing-map-scheme>
                <autostart>true</autostart>
            </distributed-scheme>
        </caching-schemes>
    </cache-config>The cache configuration for the Web layer would be similar but have near caching
    <cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config"
            xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config coherence-cache-config.xsd">
        <defaults>
            <serializer>pof</serializer>
        </defaults>
        <caching-scheme-mapping>
            <cache-mapping>
                <cache-name>products</cache-name>
                <scheme-name>near-scheme</scheme-name>
            </cache-mapping>
        </caching-scheme-mapping>
        <caching-schemes>
            <near-scheme>
                <scheme-name>near-scheme</scheme-name>
                <front-scheme>
                    <local-scheme>
                        <high-units>1000</high-units>
                    </local-scheme>
                </front-scheme>
                <back-scheme>
                    <scheme-ref>distributed-scheme</scheme-ref>
                </back-scheme>
            </near-scheme>
            <distributed-scheme>
                <scheme-name>distributed-scheme</scheme-name>
                <service-name>DistributedCacheScheme</service-name>
                <backing-map-scheme>
                    <local-scheme/>
                </backing-map-scheme>
                <autostart>true</autostart>
            </distributed-scheme>
        </caching-schemes>
    </cache-config>The above near cache would only hold 1000 entries, and Coherence will manage expiry of this. You could tune this figure, other other expiry setting to optimize the data access for your Web layer - as described in the near cache docs here http://docs.oracle.com/cd/E24290_01/coh.371/e22837/cache_config.htm#BABGFCII Storage disbaled nodes with near caches are not always the best approach, but given you are using them in a long-live Web layer and the data does not change very often, I think they would be good for you to use.
    As I said though, as with a lot of things in Coherence, there are a number of options available to you, some good, some not so good; the above option is just the one I would choose. Given the requirements you have mentioned there is actually not much wrong with the solution you have chosen apart from access to data is slower as there are always two network hops involved with the proxy in the middle and it would not scale up so well if you wanted to grow the system.
    JK

Maybe you are looking for