diff --git a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/h2/JdbcXAConnectionConstructorInterceptor.java b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/h2/JdbcXAConnectionConstructorInterceptor.java new file mode 100644 index 000000000..4a3a5f188 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/h2/JdbcXAConnectionConstructorInterceptor.java @@ -0,0 +1,36 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed 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. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ + +package org.skywalking.apm.plugin.jdbc.h2; + +import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor; + +/** + * {@link JdbcXAConnectionConstructorInterceptor } store {@link org.skywalking.apm.plugin.jdbc.trace.ConnectionInfo} + * when the client new instance of {@link org.h2.jdbcx.JdbcXAConnection}. + * + * @author zhangxin + */ +public class JdbcXAConnectionConstructorInterceptor implements InstanceConstructorInterceptor { + + @Override + public void onConstruct(EnhancedInstance objInst, Object[] allArguments) { + objInst.setSkyWalkingDynamicField(((EnhancedInstance)allArguments[2]).getSkyWalkingDynamicField()); + } +} diff --git a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/h2/PooledJdbcConnectionConstructorInterceptor.java b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/h2/PooledJdbcConnectionConstructorInterceptor.java new file mode 100644 index 000000000..486a6a43b --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/h2/PooledJdbcConnectionConstructorInterceptor.java @@ -0,0 +1,35 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed 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. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ + +package org.skywalking.apm.plugin.jdbc.h2; + +import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; +import org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor; + +/** + * {@link PooledJdbcConnectionConstructorInterceptor } store {@link org.skywalking.apm.plugin.jdbc.trace.ConnectionInfo} + * when the client new instance of {@link org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection}. + * + * @author zhangxin + */ +public class PooledJdbcConnectionConstructorInterceptor implements InstanceConstructorInterceptor { + @Override + public void onConstruct(EnhancedInstance objInst, Object[] allArguments) { + objInst.setSkyWalkingDynamicField(((EnhancedInstance)allArguments[0]).getSkyWalkingDynamicField()); + } +} diff --git a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/h2/define/ConnectionInstrumentation.java b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/h2/define/AbstractConnectionInstrumentation.java similarity index 94% rename from apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/h2/define/ConnectionInstrumentation.java rename to apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/h2/define/AbstractConnectionInstrumentation.java index d35f768fb..640252b38 100644 --- a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/h2/define/ConnectionInstrumentation.java +++ b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/h2/define/AbstractConnectionInstrumentation.java @@ -41,8 +41,8 @@ import static org.skywalking.apm.plugin.jdbc.define.Constants.ROLLBACK_METHOD_NA import static org.skywalking.apm.plugin.jdbc.define.Constants.SERVICE_METHOD_INTERCEPT_CLASS; /** - * {@link ConnectionInstrumentation} intercept the following methods that the class which extend {@link - * org.h2.jdbc.JdbcConnection}.
+ * {@link AbstractConnectionInstrumentation} define how to enhance the following methods that the class which extend + * {@link java.sql.Connection}.
* * 1. Enhance prepareStatement by org.skywalking.apm.plugin.jdbc.define.JDBCPrepareStatementInterceptor * 3. Enhance prepareCall by org.skywalking.apm.plugin.jdbc.define.JDBCPrepareCallInterceptor @@ -51,9 +51,7 @@ import static org.skywalking.apm.plugin.jdbc.define.Constants.SERVICE_METHOD_INT * * @author zhangxin */ -public class ConnectionInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { - - public static final String ENHANCE_CLASS = "org.h2.jdbc.JdbcConnection"; +public abstract class AbstractConnectionInstrumentation extends ClassInstanceMethodsEnhancePluginDefine { @Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { return new ConstructorInterceptPoint[0]; @@ -143,6 +141,8 @@ public class ConnectionInstrumentation extends ClassInstanceMethodsEnhancePlugin } @Override protected ClassMatch enhanceClass() { - return byName(ENHANCE_CLASS); + return byName(getEnhanceClass()); } + + public abstract String getEnhanceClass(); } diff --git a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/h2/define/JdbcConnectionInstrumentation.java b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/h2/define/JdbcConnectionInstrumentation.java new file mode 100644 index 000000000..ae74b90f7 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/h2/define/JdbcConnectionInstrumentation.java @@ -0,0 +1,32 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed 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. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ + +package org.skywalking.apm.plugin.jdbc.h2.define; + +/** + * {@link JdbcConnectionInstrumentation} presents that skywalking intercepts {@link org.h2.jdbc.JdbcConnection}. + * + * @author zhangxin + */ +public class JdbcConnectionInstrumentation extends AbstractConnectionInstrumentation { + public static final String ENHANCE_CLASS = "org.h2.jdbc.JdbcConnection"; + + @Override public String getEnhanceClass() { + return ENHANCE_CLASS; + } +} diff --git a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/h2/define/JdbcXAConnectionInstrumentation.java b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/h2/define/JdbcXAConnectionInstrumentation.java new file mode 100644 index 000000000..7c575bad5 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/h2/define/JdbcXAConnectionInstrumentation.java @@ -0,0 +1,54 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed 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. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ + +package org.skywalking.apm.plugin.jdbc.h2.define; + +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; +import org.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; + +import static net.bytebuddy.matcher.ElementMatchers.any; + +/** + * {@link JdbcXAConnectionInstrumentation} presents that skywalking intercepts {@link org.h2.jdbcx.JdbcXAConnection}. + * + * @author zhangxin + */ +public class JdbcXAConnectionInstrumentation extends AbstractConnectionInstrumentation { + + public static final String ENHANCE_CLASS = "org.h2.jdbcx.JdbcXAConnection"; + public static final String CONSTRUCTOR_INTERCEPT_CLASS = "org.skywalking.apm.plugin.jdbc.h2.JdbcXAConnectionConstructorInterceptor"; + + @Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { + return new ConstructorInterceptPoint[] { + new ConstructorInterceptPoint() { + @Override public ElementMatcher getConstructorMatcher() { + return any(); + } + + @Override public String getConstructorInterceptor() { + return CONSTRUCTOR_INTERCEPT_CLASS; + } + } + }; + } + + @Override public String getEnhanceClass() { + return ENHANCE_CLASS; + } +} diff --git a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/h2/define/PooledJdbcConnectionInstrumentation.java b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/h2/define/PooledJdbcConnectionInstrumentation.java new file mode 100644 index 000000000..cc34a4d4c --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/java/org/skywalking/apm/plugin/jdbc/h2/define/PooledJdbcConnectionInstrumentation.java @@ -0,0 +1,54 @@ +/* + * Copyright 2017, OpenSkywalking Organization All rights reserved. + * + * Licensed 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. + * + * Project repository: https://github.com/OpenSkywalking/skywalking + */ + +package org.skywalking.apm.plugin.jdbc.h2.define; + +import net.bytebuddy.description.method.MethodDescription; +import net.bytebuddy.matcher.ElementMatcher; +import org.skywalking.apm.agent.core.plugin.interceptor.ConstructorInterceptPoint; + +import static net.bytebuddy.matcher.ElementMatchers.any; + +/** + * {@link PooledJdbcConnectionInstrumentation} presents that skywalking intercepts {@link org.h2.jdbcx.JdbcXAConnection}. + * + * @author zhangxin + */ +public class PooledJdbcConnectionInstrumentation extends AbstractConnectionInstrumentation { + + public static final String CONSTRUCTOR_INTERCEPT_CLASS = "org.skywalking.apm.plugin.jdbc.h2.PooledJdbcConnectionConstructorInterceptor"; + public static final String ENHANCE_CLASS = "org.h2.jdbcx.JdbcXAConnection$PooledJdbcConnection"; + + @Override protected ConstructorInterceptPoint[] getConstructorsInterceptPoints() { + return new ConstructorInterceptPoint[]{ + new ConstructorInterceptPoint() { + @Override public ElementMatcher getConstructorMatcher() { + return any(); + } + + @Override public String getConstructorInterceptor() { + return CONSTRUCTOR_INTERCEPT_CLASS; + } + } + }; + } + + @Override public String getEnhanceClass() { + return ENHANCE_CLASS; + } +} diff --git a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/resources/skywalking-plugin.def b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/resources/skywalking-plugin.def index 1e45a917f..7af7b9936 100644 --- a/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/resources/skywalking-plugin.def +++ b/apm-sniffer/apm-sdk-plugin/h2-1.x-plugin/src/main/resources/skywalking-plugin.def @@ -1,2 +1,4 @@ h2-1.x=org.skywalking.apm.plugin.jdbc.h2.define.DriverInstrumentation -h2-1.x=org.skywalking.apm.plugin.jdbc.h2.define.ConnectionInstrumentation +h2-1.x=org.skywalking.apm.plugin.jdbc.h2.define.JdbcConnectionInstrumentation +h2-1.x=org.skywalking.apm.plugin.jdbc.h2.define.PooledJdbcConnectionInstrumentation +h2-1.x=org.skywalking.apm.plugin.jdbc.h2.define.JdbcXAConnectionInstrumentation