You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2014/06/15 19:40:32 UTC
svn commit: r1602743 - in /tomee/tomee/trunk/container/openejb-core/src:
main/java/org/apache/openejb/assembler/classic/util/
test/java/org/apache/openejb/assembler/classic/util/
Author: rmannibucau
Date: Sun Jun 15 17:40:32 2014
New Revision: 1602743
URL: http://svn.apache.org/r1602743
Log:
TOMEE-1250 allowing to use @xxx to reference a resource as $ allows to reference another service in Service definition
Added:
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/util/
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/util/ServiceInfosTest.java
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/util/ServiceInfos.java
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/util/ServiceInfos.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/util/ServiceInfos.java?rev=1602743&r1=1602742&r2=1602743&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/util/ServiceInfos.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/util/ServiceInfos.java Sun Jun 15 17:40:32 2014
@@ -17,16 +17,22 @@
package org.apache.openejb.assembler.classic.util;
+import org.apache.openejb.JndiConstants;
import org.apache.openejb.OpenEJBException;
import org.apache.openejb.OpenEJBRuntimeException;
import org.apache.openejb.assembler.classic.Assembler;
import org.apache.openejb.assembler.classic.OpenEjbConfiguration;
import org.apache.openejb.assembler.classic.ServiceInfo;
import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
+import org.apache.openejb.util.LogCategory;
+import org.apache.openejb.util.Logger;
import org.apache.xbean.recipe.ObjectRecipe;
import org.apache.xbean.recipe.Option;
import org.apache.xbean.recipe.UnsetPropertiesRecipe;
+import javax.naming.Context;
+import javax.naming.NamingException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -140,11 +146,29 @@ public final class ServiceInfos {
serviceRecipe.setProperty("prop", info.properties);
} else {
for (final Map.Entry<Object, Object> entry : info.properties.entrySet()) { // manage links
+ final String key = entry.getKey().toString();
final Object value = entry.getValue();
- if (value instanceof String && value.toString().startsWith("$")) {
- serviceRecipe.setProperty(entry.getKey().toString(), resolve(services, value.toString().substring(1)));
+ if (value instanceof String) {
+ final String valueStr = value.toString();
+ if (valueStr.startsWith("$")){
+ serviceRecipe.setProperty(key, resolve(services, valueStr.substring(1)));
+ } else if (valueStr.startsWith("@")){
+ final Context jndiContext = SystemInstance.get().getComponent(ContainerSystem.class).getJNDIContext();
+ try {
+ serviceRecipe.setProperty(key, jndiContext.lookup(JndiConstants.OPENEJB_RESOURCE_JNDI_PREFIX + valueStr.substring(1)));
+ } catch (final NamingException e) {
+ try {
+ serviceRecipe.setProperty(key, jndiContext.lookup(valueStr.substring(1)));
+ } catch (final NamingException e1) {
+ Logger.getInstance(LogCategory.OPENEJB, ServiceInfos.class).warning("Value " + valueStr + " starting with @ but doesn't point to an existing resource, using raw value");
+ serviceRecipe.setProperty(key, value);
+ }
+ }
+ } else {
+ serviceRecipe.setProperty(key, value);
+ }
} else {
- serviceRecipe.setProperty(entry.getKey().toString(), entry.getValue());
+ serviceRecipe.setProperty(key, entry.getValue());
}
}
}
Added: tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/util/ServiceInfosTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/util/ServiceInfosTest.java?rev=1602743&view=auto
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/util/ServiceInfosTest.java (added)
+++ tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/util/ServiceInfosTest.java Sun Jun 15 17:40:32 2014
@@ -0,0 +1,67 @@
+/*
+ * 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.openejb.assembler.classic.util;
+
+import org.apache.openejb.assembler.classic.ServiceInfo;
+import org.apache.openejb.config.EjbModule;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.oejb3.OpenejbJar;
+import org.apache.openejb.jee.oejb3.PojoDeployment;
+import org.apache.openejb.junit.ApplicationComposer;
+import org.apache.openejb.testing.Configuration;
+import org.apache.openejb.testing.Module;
+import org.apache.openejb.testng.PropertiesBuilder;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.sql.DataSource;
+import java.util.Properties;
+
+import static java.util.Arrays.asList;
+import static org.junit.Assert.assertNotNull;
+
+@RunWith(ApplicationComposer.class)
+public class ServiceInfosTest {
+ @Configuration
+ public Properties config() {
+ return new PropertiesBuilder().p("ds", "new://Resource?type=DataSource").build();
+ }
+
+ @Module
+ public EjbJar module() {
+ return new EjbJar();
+ }
+
+ @Test
+ public void createServiceWithResourceAttribute() {
+ final ServiceInfo serviceInfo = new ServiceInfo();
+ serviceInfo.id = "the-id";
+ serviceInfo.className = TheService.class.getName();
+ serviceInfo.properties = new Properties();
+ serviceInfo.properties.setProperty("dataSource", "@ds");
+ final TheService instance = TheService.class.cast(ServiceInfos.resolve(asList(serviceInfo), serviceInfo.id));
+ assertNotNull(instance.dataSource);
+ }
+
+ public static class TheService {
+ private DataSource dataSource;
+
+ public void setDataSource(final DataSource ds) {
+ this.dataSource = ds;
+ }
+ }
+}