We have several Tomcat servers running SAP JCO 3.0.6 and are running into a problem when we attempt to load two web applications onto the Tomcat instance that both want to connect to SAP. What we are seeing is that Application1 has no problem communicating to SAP, but Application2 cannot register its destination data provider. Application2 gets the following error message:
java.lang.IllegalStateException: DestinationDataProvider already registered [com.Application1.types.sap.SAPDataProvider] at com.sap.conn.jco.rt.RuntimeEnvironment.setDestinationDataProvider(RuntimeEnvironment.java:133) at com.sap.conn.jco.ext.Environment.registerDestinationDataProvider(Environment.java:220) ...
Notice that the DestinationDataProvider already registered is the one for Application1!
This error implies that the code
applies to the JVM, and you cannot have multiple applications running in that JVM that each want to manage their own connections.
I can think of only two possible solutions to this with the JCO as it is currently coded:
1. Create a third application whose sole purpose is to manage SAP JCO destinations. Sounds ridiculous to me...
2. Have any application that wants to talk to SAP run in its own separate Tomcat instance. ...Equally absurd...
So, I have a few questions:
1. Has anyone else done this before, and if so, how?
2. Have I made a mistake in my analysis, and just not figured out how it should be done?
3. If I am correct, what will it take to get the JCO fixed so it can support multiple applications in the same Tomcat instance connecting to SAP?