You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2011/09/15 13:31:08 UTC
svn commit: r1171061 - in /openejb/trunk/openejb3:
assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/
assembly/openejb-tomcat/tomee-embedded/src/main/resources/META-INF/org.apache.openejb.tomcat/
contai...
Author: dblevins
Date: Thu Sep 15 11:31:07 2011
New Revision: 1171061
URL: http://svn.apache.org/viewvc?rev=1171061&view=rev
Log:
OPENEJB-1665: @DataSourceDefinition support
- Support for deployment descriptor declared <data-source> elements
- @DataSourceDefinition annotations are translated into the equivalent JAXB object (not directly into a Resource object)
- JAXB DataSource definitions are translated into Resource objects prior to AutoConfig
- DataSources created from definitions are prefixed with the appName prior to binding into the private openejb/Resource/ namespace
- A single JNDI reference hardcoded to point to the DataSource definition will automatically created and added to all the consumers.
- Raw version of the DataSource definition properties are passed straight through to the DataSourceFactory so that it may use them to internally construct the DataSource via xbean-reflect
- Respect xml overriding -- ignore the annotation data if the DataSource is defined in xml
Added:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConvertDataSourceDefinitions.java
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DescriptorDataSourceDefinitionTest.java
- copied, changed from r1170434, openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DataSourceDefinitionTest.java
Modified:
openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml
openejb/trunk/openejb3/assembly/openejb-tomcat/tomee-embedded/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/AbstractService.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Resource.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java
openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.embedded/service-jar.xml
openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DataSourceDefinitionTest.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/DataSource.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ResourceRef.java
Modified: openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml?rev=1171061&r1=1171060&r2=1171061&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml (original)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml Thu Sep 15 11:31:07 2011
@@ -529,9 +529,11 @@
service="Resource"
types="javax.sql.DataSource, DataSource"
factory-name="create"
- constructor="JtaManaged, JdbcDriver"
+ constructor="JtaManaged, JdbcDriver, Definition"
class-name="org.apache.openejb.resource.jdbc.DataSourceFactory">
+ Definition
+
# Determines wether or not this data source should be JTA managed
# or user managed. If set to 'true' it will automatically be enrolled
# in any ongoing transactions. Calling begin/commit/rollback or setAutoCommit
@@ -725,9 +727,11 @@
service="Resource"
types="javax.sql.DataSource, DataSource"
factory-name="create"
- constructor="JtaManaged, JdbcDriver"
+ constructor="JtaManaged, JdbcDriver, Definition"
class-name="org.apache.openejb.resource.jdbc.DataSourceFactory">
+ Definition
+
JtaManaged = false
# Driver class name
Modified: openejb/trunk/openejb3/assembly/openejb-tomcat/tomee-embedded/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/tomee-embedded/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml?rev=1171061&r1=1171060&r2=1171061&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/tomee-embedded/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml (original)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/tomee-embedded/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml Thu Sep 15 11:31:07 2011
@@ -529,9 +529,11 @@
service="Resource"
types="javax.sql.DataSource, DataSource"
factory-name="create"
- constructor="JtaManaged"
+ constructor="JtaManaged, JdbcDriver, Definition"
class-name="org.apache.openejb.resource.jdbc.DataSourceFactory">
+ Definition
+
# Determines wether or not this data source should be JTA managed
# or user managed. If set to 'true' it will automatically be enrolled
# in any ongoing transactions. Calling begin/commit/rollback or setAutoCommit
@@ -725,9 +727,11 @@
service="Resource"
types="javax.sql.DataSource, DataSource"
factory-name="create"
- constructor="JtaManaged"
+ constructor="JtaManaged, JdbcDriver, Definition"
class-name="org.apache.openejb.resource.jdbc.DataSourceFactory">
+ Definition
+
JtaManaged = false
# Driver class name
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?rev=1171061&r1=1171060&r2=1171061&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java Thu Sep 15 11:31:07 2011
@@ -38,6 +38,7 @@ import org.apache.openejb.jee.Concurrent
import org.apache.openejb.jee.ConfigProperty;
import org.apache.openejb.jee.ContainerConcurrency;
import org.apache.openejb.jee.ContainerTransaction;
+import org.apache.openejb.jee.DataSource;
import org.apache.openejb.jee.EjbJar;
import org.apache.openejb.jee.EjbLocalRef;
import org.apache.openejb.jee.EjbRef;
@@ -59,6 +60,7 @@ import org.apache.openejb.jee.InjectionT
import org.apache.openejb.jee.Interceptor;
import org.apache.openejb.jee.InterceptorBinding;
import org.apache.openejb.jee.Invokable;
+import org.apache.openejb.jee.IsolationLevel;
import org.apache.openejb.jee.JndiConsumer;
import org.apache.openejb.jee.JndiReference;
import org.apache.openejb.jee.License;
@@ -187,7 +189,6 @@ import javax.resource.spi.ConnectionDefi
import javax.resource.spi.Connector;
import javax.resource.spi.SecurityPermission;
import javax.resource.spi.work.WorkContext;
-import javax.sql.DataSource;
import javax.ws.rs.Path;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.Context;
@@ -423,8 +424,6 @@ public class AnnotationDeployer implemen
}
}
- addDatasourceDefinitions(clientModule, finder);
-
return clientModule;
}
@@ -690,8 +689,6 @@ public class AnnotationDeployer implemen
}
}
- addDatasourceDefinitions(connectorModule, finder);
-
return connectorModule;
}
@@ -1001,8 +998,6 @@ public class AnnotationDeployer implemen
webModule.getRestApplications().add(app.getName());
}
- addDatasourceDefinitions(webModule, finder);
-
return webModule;
}
@@ -1268,67 +1263,9 @@ public class AnnotationDeployer implemen
}
}
- addDatasourceDefinitions(ejbModule, finder);
-
return ejbModule;
}
- private void addDatasourceDefinitions(Module module, IAnnotationFinder finder) {
- List<DataSourceDefinition> datasources = new ArrayList<DataSourceDefinition>();
-
- List<Annotated<Class<?>>> dataSourceDefinitionsClasses = finder.findMetaAnnotatedClasses(DataSourceDefinitions.class);
- for (Annotated<Class<?>> dsDefsClass : dataSourceDefinitionsClasses) {
- DataSourceDefinitions defs = dsDefsClass.getAnnotation(DataSourceDefinitions.class);
- for (DataSourceDefinition dsDef : defs.value()) {
- datasources.add(dsDef);
- }
- }
-
- List<Annotated<Class<?>>> dataSourceDefinitionClasses = finder.findMetaAnnotatedClasses(DataSourceDefinition.class);
- for (Annotated<Class<?>> dsDefsClass : dataSourceDefinitionClasses) {
- datasources.add(dsDefsClass.getAnnotation(DataSourceDefinition.class));
- }
-
- for (DataSourceDefinition dsDef : datasources) {
- org.apache.openejb.config.sys.Resource def = getDatasourceDefinitaion(dsDef);
- module.addResource(def);
- }
- }
-
- private org.apache.openejb.config.sys.Resource getDatasourceDefinitaion(DataSourceDefinition dsDef) {
- String name = dsDef.name();
- name = name.replaceFirst("java:comp/env/", "");
- name = name.replaceFirst("java:", "");
-
- org.apache.openejb.config.sys.Resource def = new org.apache.openejb.config.sys.Resource(name, DataSource.class.getName());
- def.setJndi(dsDef.name().replaceFirst("java:", ""));
- def.setType("javax.sql.DataSource");
-
- Properties properties = def.getProperties();
- properties.put("JtaManaged", dsDef.transactional());
- properties.put("InitialSize", dsDef.initialPoolSize());
- properties.put("DefaultIsolationLevel", dsDef.isolationLevel());
- properties.put("LoginTimeout", Math.max(dsDef.loginTimeout(), 1));
- properties.put("MinEvictableIdleTimeMillis", dsDef.maxIdleTime());
- properties.put("MaxIdle", dsDef.maxPoolSize());
- properties.put("MinIdle", dsDef.minPoolSize());
- properties.put("MaxStatements", dsDef.maxStatements());
- properties.put("Password", dsDef.password());
- properties.put("JdbcUrl", dsDef.url());
- properties.put("UserName", dsDef.user());
- properties.put("JdbcDriver", dsDef.className());
- properties.put("PortNumber", dsDef.portNumber());
- properties.put("DatabaseName", dsDef.databaseName());
- properties.put("Description", dsDef.description());
- properties.put("ServerName", dsDef.serverName());
- properties.put("Properties", dsDef.properties());
-
- // to force it to be bound in JndiEncBuilder
- properties.put("JndiName", def.getJndi());
-
- return def;
- }
-
private List<String> getBeanClasses(IAnnotationFinder finder) {
// What we're hoping in this method is to get lucky and find
@@ -3311,6 +3248,22 @@ public class AnnotationDeployer implemen
Member member = new MethodMember(method.get());
buildPersistenceContext(consumer, pcFactory.create(pCtx, member), member);
}
+
+ //
+ // @DataSourceDefinition
+ //
+
+ for (Annotated<Class<?>> annotated : annotationFinder.findMetaAnnotatedClasses(DataSourceDefinitions.class)) {
+ DataSourceDefinitions defs = annotated.getAnnotation(DataSourceDefinitions.class);
+ for (DataSourceDefinition definition : defs.value()) {
+ buildDataSourceDefinition(consumer, definition);
+ }
+ }
+
+ for (Annotated<Class<?>> annotated : annotationFinder.findMetaAnnotatedClasses(DataSourceDefinition.class)) {
+ DataSourceDefinition definition = annotated.getAnnotation(DataSourceDefinition.class);
+ buildDataSourceDefinition(consumer, definition);
+ }
}
private void buildContext(JndiConsumer consumer, Member member) {
@@ -3930,6 +3883,42 @@ public class AnnotationDeployer implemen
}
}
+ private void buildDataSourceDefinition(JndiConsumer consumer, DataSourceDefinition d) {
+ final org.apache.openejb.jee.DataSource dataSource = new org.apache.openejb.jee.DataSource();
+
+ dataSource.setName(d.name());
+ dataSource.setClassName(d.className());
+ dataSource.setTransactional(d.transactional());
+
+ final DataSource existing = consumer.getDataSourceMap().get(dataSource.getKey());
+
+ if (existing != null) return;
+
+ // Optional properties
+ if (d.databaseName() != "") dataSource.setDatabaseName(d.databaseName());
+ if (d.initialPoolSize() != -1) dataSource.setInitialPoolSize(d.initialPoolSize());
+ if (d.isolationLevel() != -1) dataSource.setIsolationLevel(IsolationLevel.fromFlag(d.isolationLevel()));
+ if (d.loginTimeout() != 0) dataSource.setLoginTimeout(d.loginTimeout());
+ if (d.maxIdleTime() != -1) dataSource.setMaxIdleTime(d.maxIdleTime());
+ if (d.maxPoolSize() != -1) dataSource.setMaxPoolSize(d.maxPoolSize());
+ if (d.maxStatements() != -1) dataSource.setMaxStatements(d.maxStatements());
+ if (d.minPoolSize() != -1) dataSource.setMinPoolSize(d.minPoolSize());
+ if (d.password() != "") dataSource.setPassword(d.password());
+ if (d.portNumber() != -1) dataSource.setPortNumber(d.portNumber());
+ if (d.serverName() != "localhost") dataSource.setServerName(d.serverName());
+ if (d.url() != "") dataSource.setUrl(d.url());
+ if (d.user() != "") dataSource.setUrl(d.user());
+
+ for (String s : d.properties()) {
+ final String key = s.substring(0, s.indexOf('='));
+ final String value = s.substring(s.indexOf('='));
+
+ dataSource.property(key, value);
+ }
+
+ consumer.getDataSource().add(dataSource);
+ }
+
/**
* Process @WebServiceRef and @HandlerChain for the given member (field or method)
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java?rev=1171061&r1=1171060&r2=1171061&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java Thu Sep 15 11:31:07 2011
@@ -48,7 +48,7 @@ public class AppModule implements Deploy
private final List<ClientModule> clientModules = new ArrayList<ClientModule>();
private final List<EjbModule> ejbModules = new ArrayList<EjbModule>();
private final List<PersistenceModule> persistenceModules = new ArrayList<PersistenceModule>();
- private final Collection<Resource> resources = new ArrayList<Resource>();
+ private final Collection<Resource> resources = new HashSet<Resource>();
private final ClassLoader classLoader;
private EntityMappings cmpMappings;
private final Map<String,Object> altDDs = new HashMap<String,Object>();
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java?rev=1171061&r1=1171060&r2=1171061&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java Thu Sep 15 11:31:07 2011
@@ -830,6 +830,18 @@ public class AutoConfig implements Dynam
private void processDataSourceDefinitions(AppModule module) throws OpenEJBException {
Collection<Resource> datasources = module.getResources();
+ if (datasources.size() == 0) return;
+
+ List<JndiConsumer> jndiConsumers = new ArrayList<JndiConsumer>();
+ for (WebModule webModule : module.getWebModules()) {
+ final JndiConsumer consumer = webModule.getWebApp();
+ jndiConsumers.add(consumer);
+ }
+
+ for (EjbModule ejbModule : module.getEjbModules()) {
+ Collections.addAll(jndiConsumers, ejbModule.getEjbJar().getEnterpriseBeans());
+ }
+
for (Resource datasource : datasources) {
if (!DataSource.class.getName().equals(datasource.getType())) {
continue;
@@ -844,12 +856,38 @@ public class AutoConfig implements Dynam
properties.remove("LoginTimeout");
ResourceInfo resourceInfo = configFactory.configureService(datasource, ResourceInfo.class);
+ resourceInfo.id = module.getModuleId() + "/" + resourceInfo.id;
+
+ final ResourceRef dataSourceRef = new ResourceRef(dataSourceLookupName(datasource), DataSource.class.getName());
+ dataSourceRef.setMappedName(resourceInfo.id);
+
+ for (JndiConsumer consumer : jndiConsumers) {
+
+ final ResourceRef existing = consumer.getResourceRefMap().get(dataSourceRef.getKey());
+ if (existing != null) {
+ existing.setMappedName(dataSourceRef.getMappedName());
+ } else {
+ consumer.getResourceRef().add(dataSourceRef);
+ }
+ }
+
+
installResource(module.getModuleId(), resourceInfo);
}
datasources.clear();
}
+ private String dataSourceLookupName(Resource datasource) {
+ final String jndi = datasource.getJndi();
+ if (jndi.startsWith("java:")) return jndi;
+ if (jndi.startsWith("comp/env/")) return "java:" + jndi;
+ if (jndi.startsWith("module/")) return "java:" + jndi;
+ if (jndi.startsWith("global/")) return "java:" + jndi;
+ if (jndi.startsWith("app/")) return "java:" + jndi;
+ return "java:comp/env/" + jndi;
+ }
+
private static String getVendorUrl(Properties properties) {
final String driver = properties.getProperty("JdbcDriver");
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java?rev=1171061&r1=1171060&r2=1171061&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java Thu Sep 15 11:31:07 2011
@@ -186,6 +186,8 @@ public class ConfigurationFactory implem
chain.add(preAutoConfigDeployer);
}
+ chain.add(new ConvertDataSourceDefinitions());
+
if (offline) {
AutoConfig autoConfig = new AutoConfig(this);
autoConfig.autoCreateResources(false);
Added: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConvertDataSourceDefinitions.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConvertDataSourceDefinitions.java?rev=1171061&view=auto
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConvertDataSourceDefinitions.java (added)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConvertDataSourceDefinitions.java Thu Sep 15 11:31:07 2011
@@ -0,0 +1,168 @@
+/**
+ * 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.config;
+
+import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.config.sys.Resource;
+import org.apache.openejb.jee.ApplicationClient;
+import org.apache.openejb.jee.DataSource;
+import org.apache.openejb.jee.JndiConsumer;
+import org.apache.openejb.jee.KeyedCollection;
+import org.apache.openejb.jee.Property;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Properties;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class ConvertDataSourceDefinitions implements DynamicDeployer {
+
+ @Override
+ public AppModule deploy(AppModule appModule) throws OpenEJBException {
+
+ List<JndiConsumer> jndiConsumers = collectConsumers(appModule);
+
+ final KeyedCollection<String, DataSource> dataSources = new KeyedCollection<String, DataSource>();
+
+ for (JndiConsumer consumer : jndiConsumers) {
+ if (consumer == null) continue;
+
+ dataSources.addAll(consumer.getDataSource());
+ }
+
+ for (DataSource dataSource : dataSources) {
+ appModule.getResources().add(toResource(dataSource));
+ }
+ return appModule;
+ }
+
+
+ private Resource toResource(DataSource datasource) {
+ String name = datasource.getName();
+ name = name.replaceFirst("java:comp/env/", "");
+ name = name.replaceFirst("java:", "");
+
+ Resource def = new Resource(name, javax.sql.DataSource.class.getName());
+
+ def.setJndi(datasource.getName().replaceFirst("java:", ""));
+ def.setType("javax.sql.DataSource");
+
+ Properties p = def.getProperties();
+ put(p, "JtaManaged", datasource.getTransactional());
+ put(p, "InitialSize", datasource.getInitialPoolSize());
+ put(p, "DefaultIsolationLevel", datasource.getIsolationLevel());
+ put(p, "LoginTimeout", datasource.getLoginTimeout());
+ put(p, "MinEvictableIdleTimeMillis", datasource.getMaxIdleTime());
+ put(p, "MaxIdle", datasource.getMaxPoolSize());
+ put(p, "MinIdle", datasource.getMinPoolSize());
+ put(p, "MaxStatements", datasource.getMaxStatements());
+ put(p, "Password", datasource.getPassword());
+ put(p, "JdbcUrl", datasource.getUrl());
+ put(p, "UserName", datasource.getUser());
+ put(p, "JdbcDriver", datasource.getClassName());
+ put(p, "PortNumber", datasource.getPortNumber());
+ put(p, "DatabaseName", datasource.getDatabaseName());
+ put(p, "Description", datasource.getDescription());
+ put(p, "ServerName", datasource.getServerName());
+ put(p, "Definition", rawDefinition(datasource));
+ setProperties(datasource, p);
+
+ // to force it to be bound in JndiEncBuilder
+ put(p, "JndiName", def.getJndi());
+
+ return def;
+ }
+
+ private String rawDefinition(DataSource d) {
+ try {
+ final Properties p = new Properties();
+
+ put(p, "transactional", d.getTransactional());
+ put(p, "initialPoolSize", d.getInitialPoolSize());
+ put(p, "isolationLevel", d.getIsolationLevel());
+ put(p, "loginTimeout", d.getLoginTimeout());
+ put(p, "maxIdleTime", d.getMaxIdleTime());
+ put(p, "maxPoolSize", d.getMaxPoolSize());
+ put(p, "maxStatements", d.getMaxStatements());
+ put(p, "minPoolSize", d.getMinPoolSize());
+ put(p, "portNumber", d.getPortNumber());
+ put(p, "databaseName", d.getDatabaseName());
+ put(p, "password", d.getPassword());
+ put(p, "serverName", d.getServerName());
+ put(p, "url", d.getUrl());
+ put(p, "user", d.getUser());
+
+ setProperties(d, p);
+
+ final ByteArrayOutputStream out = new ByteArrayOutputStream();
+ p.store(out, "");
+ return new String(out.toByteArray());
+ } catch (IOException e) {
+ throw new RuntimeException(String.format("Cannot canonicalize the @DataSourceDefinition %s as a properties string", d.getName()));
+ }
+ }
+
+ private void setProperties(DataSource d, Properties p) {
+ for (Property property : d.getProperty()) {
+
+ final String key = property.getName();
+ final String value = property.getValue();
+
+ put(p, key, value);
+ }
+ }
+
+ private static void put(Properties properties, String key, Object value) {
+ if (key == null) return;
+ if (value == null) return;
+
+ properties.put(key, value + "");
+ }
+
+ private List<JndiConsumer> collectConsumers(AppModule appModule) {
+
+ final List<JndiConsumer> jndiConsumers = new ArrayList<JndiConsumer>();
+
+ for (ClientModule module : appModule.getClientModules()) {
+ final JndiConsumer consumer = module.getApplicationClient();
+ if (consumer == null) continue;
+ jndiConsumers.add(consumer);
+ }
+
+ for (WebModule webModule : appModule.getWebModules()) {
+ final JndiConsumer consumer = webModule.getWebApp();
+ if (consumer == null) continue;
+ jndiConsumers.add(consumer);
+ }
+
+ for (EjbModule ejbModule : appModule.getEjbModules()) {
+ Collections.addAll(jndiConsumers, ejbModule.getEjbJar().getEnterpriseBeans());
+ }
+
+ if (appModule.getApplication() != null) {
+ jndiConsumers.add(appModule.getApplication());
+ }
+
+ return jndiConsumers;
+ }
+
+}
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/AbstractService.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/AbstractService.java?rev=1171061&r1=1171060&r2=1171061&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/AbstractService.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/AbstractService.java Thu Sep 15 11:31:07 2011
@@ -169,4 +169,30 @@ public abstract class AbstractService im
public void setType(String type) {
this.type = type;
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof AbstractService)) return false;
+
+ AbstractService that = (AbstractService) o;
+
+ if (id != null ? !id.equals(that.id) : that.id != null) return false;
+ if (jar != null ? !jar.equals(that.jar) : that.jar != null) return false;
+ if (type != null ? !type.equals(that.type) : that.type != null) return false;
+ if (provider != null ? !provider.equals(that.provider) : that.provider != null) return false;
+ if (properties != null ? !properties.equals(that.properties) : that.properties != null) return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = properties != null ? properties.hashCode() : 0;
+ result = 31 * result + (id != null ? id.hashCode() : 0);
+ result = 31 * result + (jar != null ? jar.hashCode() : 0);
+ result = 31 * result + (provider != null ? provider.hashCode() : 0);
+ result = 31 * result + (type != null ? type.hashCode() : 0);
+ return result;
+ }
}
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Resource.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Resource.java?rev=1171061&r1=1171060&r2=1171061&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Resource.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Resource.java Thu Sep 15 11:31:07 2011
@@ -82,4 +82,25 @@ public class Resource extends AbstractSe
public void setJndi(String value) {
this.jndi = value;
}
+
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof Resource)) return false;
+ if (!super.equals(o)) return false;
+
+ Resource resource = (Resource) o;
+
+ if (jndi != null ? !jndi.equals(resource.jndi) : resource.jndi != null) return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = super.hashCode();
+ result = 31 * result + (jndi != null ? jndi.hashCode() : 0);
+ return result;
+ }
}
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java?rev=1171061&r1=1171060&r2=1171061&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java Thu Sep 15 11:31:07 2011
@@ -24,14 +24,20 @@ import org.apache.commons.dbcp.managed.T
import org.apache.commons.dbcp.managed.XAConnectionFactory;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.resource.XAResourceWrapper;
+import org.apache.xbean.recipe.ObjectRecipe;
+import org.apache.xbean.recipe.Option;
import javax.sql.DataSource;
import javax.sql.XADataSource;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
+import java.util.Map;
+import java.util.Properties;
import java.util.logging.Logger;
/**
@@ -39,10 +45,20 @@ import java.util.logging.Logger;
*/
public class DataSourceFactory {
- public static DataSource create(boolean managed, Class impl) throws IllegalAccessException, InstantiationException {
+ public static DataSource create(boolean managed, Class impl, String definition) throws IllegalAccessException, InstantiationException, IOException {
+
+
org.apache.commons.dbcp.BasicDataSource ds;
if (DataSource.class.isAssignableFrom(impl)) {
- DataSource dataSource = (DataSource) impl.newInstance();
+
+ final ObjectRecipe recipe = new ObjectRecipe(impl);
+ recipe.allow(Option.CASE_INSENSITIVE_PROPERTIES);
+ recipe.allow(Option.IGNORE_MISSING_PROPERTIES);
+ recipe.allow(Option.NAMED_PARAMETERS);
+ recipe.setAllProperties(asProperties(definition));
+
+ DataSource dataSource = (DataSource) recipe.create();
+
if (managed) {
ds = new DbcpManagedDataSource(dataSource);
} else {
@@ -58,6 +74,13 @@ public class DataSourceFactory {
return ds;
}
+ private static Map<?, ?> asProperties(String definition) throws IOException {
+ final ByteArrayInputStream in = new ByteArrayInputStream(definition.getBytes());
+ final Properties properties = new Properties();
+ properties.load(in);
+ return properties;
+ }
+
public static DataSource create(boolean managed) {
org.apache.commons.dbcp.BasicDataSource ds;
if (managed) {
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.embedded/service-jar.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.embedded/service-jar.xml?rev=1171061&r1=1171060&r2=1171061&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.embedded/service-jar.xml (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.embedded/service-jar.xml Thu Sep 15 11:31:07 2011
@@ -517,9 +517,11 @@
service="Resource"
types="javax.sql.DataSource, DataSource"
factory-name="create"
- constructor="JtaManaged, JdbcDriver"
+ constructor="JtaManaged, JdbcDriver, Definition"
class-name="org.apache.openejb.resource.jdbc.DataSourceFactory">
+ Definition
+
# Determines wether or not this data source should be JTA managed
# or user managed. If set to 'true' it will automatically be enrolled
# in any ongoing transactions. Calling begin/commit/rollback or setAutoCommit
@@ -713,9 +715,11 @@
service="Resource"
types="javax.sql.DataSource, DataSource"
factory-name="create"
- constructor="JtaManaged, JdbcDriver"
+ constructor="JtaManaged, JdbcDriver, Definition"
class-name="org.apache.openejb.resource.jdbc.DataSourceFactory">
+ Definition
+
JtaManaged = false
# Driver class name
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml?rev=1171061&r1=1171060&r2=1171061&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml Thu Sep 15 11:31:07 2011
@@ -526,9 +526,11 @@
service="Resource"
types="javax.sql.DataSource, DataSource"
factory-name="create"
- constructor="JtaManaged, JdbcDriver"
+ constructor="JtaManaged, JdbcDriver, Definition"
class-name="org.apache.openejb.resource.jdbc.DataSourceFactory">
+ Definition
+
# Determines wether or not this data source should be JTA managed
# or user managed. If set to 'true' it will automatically be enrolled
# in any ongoing transactions. Calling begin/commit/rollback or setAutoCommit
@@ -723,9 +725,11 @@
service="Resource"
types="javax.sql.DataSource, DataSource"
factory-name="create"
- constructor="JtaManaged, JdbcDriver"
+ constructor="JtaManaged, JdbcDriver, Definition"
class-name="org.apache.openejb.resource.jdbc.DataSourceFactory">
+ Definition
+
JtaManaged = false
# Driver class name
Modified: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DataSourceDefinitionTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DataSourceDefinitionTest.java?rev=1171061&r1=1171060&r2=1171061&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DataSourceDefinitionTest.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DataSourceDefinitionTest.java Thu Sep 15 11:31:07 2011
@@ -32,6 +32,7 @@ import static junit.framework.Assert.ass
*/
@RunWith(ApplicationComposer.class)
public class DataSourceDefinitionTest {
+
@EJB private DatasourceDefinitionBean uniqueDataSource;
@EJB private DatasourceDefinitionsBean multipleDatasources;
@@ -48,7 +49,7 @@ public class DataSourceDefinitionTest {
)
@Singleton
public static class DatasourceDefinitionBean {
- @Resource(lookup = "java:comp/env/superDS") private DataSource ds;
+ @Resource(name = "java:comp/env/superDS") private DataSource ds;
public DataSource getDs() {
return ds;
Copied: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DescriptorDataSourceDefinitionTest.java (from r1170434, openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DataSourceDefinitionTest.java)
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DescriptorDataSourceDefinitionTest.java?p2=openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DescriptorDataSourceDefinitionTest.java&p1=openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DataSourceDefinitionTest.java&r1=1170434&r2=1171061&rev=1171061&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DataSourceDefinitionTest.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DescriptorDataSourceDefinitionTest.java Thu Sep 15 11:31:07 2011
@@ -1,19 +1,16 @@
package org.apache.openejb.assembler.classic;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.ResourceRef;
+import org.apache.openejb.jee.SingletonBean;
+import org.apache.openejb.jee.StatelessBean;
import org.apache.openejb.junit.ApplicationComposer;
import org.apache.openejb.junit.Module;
import org.junit.Test;
import org.junit.runner.RunWith;
-import javax.annotation.Resource;
-import javax.annotation.sql.DataSourceDefinition;
-import javax.annotation.sql.DataSourceDefinitions;
import javax.ejb.EJB;
-import javax.ejb.Singleton;
-import javax.ejb.Stateless;
import javax.sql.DataSource;
-import javax.transaction.UserTransaction;
-import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
@@ -24,57 +21,80 @@ import java.util.List;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
-/**
- * Note: to make this test work under JavaSE 6 you should add geronimo-annotation_1.1_spec in your endorsed dir.
- * It is automatically done with maven.
- *
- * @author rmannibucau
- */
@RunWith(ApplicationComposer.class)
-public class DataSourceDefinitionTest {
- @EJB private DatasourceDefinitionBean uniqueDataSource;
- @EJB private DatasourceDefinitionsBean multipleDatasources;
-
- @Module public Class<?>[] app() throws Exception {
- return new Class<?>[]{ DatasourceDefinitionBean.class, DatasourceDefinitionsBean.class };
- }
-
- @DataSourceDefinition(
- name = "java:comp/env/superDS",
- className = "org.hsqldb.jdbc.jdbcDataSource",
- user = "sa",
- password = "",
- url = "jdbc:hsqldb:mem:superDS"
- )
- @Singleton
- public static class DatasourceDefinitionBean {
- @Resource(lookup = "java:comp/env/superDS") private DataSource ds;
+public class DescriptorDataSourceDefinitionTest {
+
+ @EJB
+ private OrangeBean orange;
+
+ @EJB
+ private YellowBean yellow;
+
+ @Module
+ public EjbJar application() throws Exception {
+ final EjbJar ejbJar = new EjbJar();
+ final SingletonBean orange = ejbJar.addEnterpriseBean(new SingletonBean(OrangeBean.class));
+
+ orange.getDataSource().add(new org.apache.openejb.jee.DataSource()
+ .name("java:comp/env/superDS")
+ .className("org.hsqldb.jdbc.jdbcDataSource")
+ .user("sa")
+ .password("")
+ .url("jdbc:hsqldb:mem:superDS")
+ );
+
+ orange.getResourceRef().add(new ResourceRef()
+ .lookup("java:comp/env/superDS")
+ .injectionTarget(OrangeBean.class, "ds")
+ );
+
+ final StatelessBean yellow = ejbJar.addEnterpriseBean(new StatelessBean(YellowBean.class));
+
+ yellow.getDataSource().add(new org.apache.openejb.jee.DataSource()
+ .name("java:comp/env/superMegaDS")
+ .className("org.hsqldb.jdbc.jdbcDataSource")
+ .user("sa")
+ .password("")
+ .url("jdbc:hsqldb:mem:superDS")
+ );
+
+ yellow.getResourceRef().add(new ResourceRef()
+ .lookup("java:comp/env/superMegaDS")
+ .injectionTarget(YellowBean.class, "mega")
+ );
+
+
+ yellow.getDataSource().add(new org.apache.openejb.jee.DataSource()
+ .name("java:comp/env/superGigaDS")
+ .className("org.hsqldb.jdbc.jdbcDataSource")
+ .user("sa")
+ .password("")
+ .url("jdbc:hsqldb:mem:superDS")
+ );
+
+ yellow.getResourceRef().add(new ResourceRef()
+ .lookup("java:comp/env/superGigaDS")
+ .injectionTarget(YellowBean.class, "giga")
+ );
+
+
+ return ejbJar;
+ }
+
+ public static class OrangeBean {
+
+ private DataSource ds;
public DataSource getDs() {
return ds;
}
}
- @DataSourceDefinitions({
- @DataSourceDefinition(
- name = "java:comp/env/superMegaDS",
- className = "org.hsqldb.jdbc.jdbcDataSource",
- user = "sa",
- password = "",
- url = "jdbc:hsqldb:mem:superDS"
- ),
- @DataSourceDefinition(
- name = "java:comp/env/superGigaDS",
- className = "org.hsqldb.jdbc.jdbcDataSource",
- user = "sa",
- password = "",
- url = "jdbc:hsqldb:mem:superDS"
- )
- })
- @Stateless
- public static class DatasourceDefinitionsBean {
- @Resource(name = "java:comp/env/superMegaDS") private DataSource mega;
- @Resource(name = "java:comp/env/superGigaDS") private DataSource giga;
+ public static class YellowBean {
+
+ private DataSource mega;
+
+ private DataSource giga;
public DataSource getMega() {
return mega;
@@ -85,13 +105,15 @@ public class DataSourceDefinitionTest {
}
}
- @Test public void assertDataSourceDefinition() throws Exception {
- assertDataSourceDefinitionValues(uniqueDataSource.getDs(), "org.hsqldb.jdbc.jdbcDataSource", "sa", "");
+ @Test
+ public void assertDataSourceDefinition() throws Exception {
+ assertDataSourceDefinitionValues(orange.getDs(), "org.hsqldb.jdbc.jdbcDataSource", "sa", "");
}
- @Test public void assertDatasourceDefinitions() throws Exception {
- assertDataSourceDefinitionValues(multipleDatasources.getMega(), "org.hsqldb.jdbc.jdbcDataSource", "foo1", "bar1");
- assertDataSourceDefinitionValues(multipleDatasources.getGiga(), "org.hsqldb.jdbc.jdbcDataSource", "foo2", "bar2");
+ @Test
+ public void assertDatasourceDefinitions() throws Exception {
+ assertDataSourceDefinitionValues(yellow.getMega(), "org.hsqldb.jdbc.jdbcDataSource", "foo1", "bar1");
+ assertDataSourceDefinitionValues(yellow.getGiga(), "org.hsqldb.jdbc.jdbcDataSource", "foo2", "bar2");
}
private void assertDataSourceDefinitionValues(DataSource dataSource, String clazz, String user, String password) throws Exception {
@@ -114,25 +136,6 @@ public class DataSourceDefinitionTest {
Connection connection = dataSource.getConnection();
connection.prepareStatement("DROP TABLE movie").execute();
-// assertEquals("configuration should be ok - class", "org.hsqldb.jdbc.jdbcDataSource", dataSource.getClass().getName());
-// assertEqualsByReflection("configuration should be ok - user", dataSource, "user", user);
-// assertEqualsByReflection("configuration should be ok - password", dataSource, "password", password);
- }
-
- private void assertEqualsByReflection(String message, Object value, String name, Object expected) throws Exception {
- Class<?> clazz = value.getClass();
- Field field = clazz.getDeclaredField(name);
- boolean acc = field.isAccessible();
- if (!acc) {
- field.setAccessible(true);
- }
- try {
- Object fieldValue = field.get(value);
- assertEquals(message, expected, fieldValue);
- } finally {
- field.setAccessible(acc);
- }
-
}
public static class Movies {
Modified: openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/DataSource.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/DataSource.java?rev=1171061&r1=1171060&r2=1171061&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/DataSource.java (original)
+++ openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/DataSource.java Thu Sep 15 11:31:07 2011
@@ -135,6 +135,101 @@ public class DataSource implements Keyab
return description.toArray();
}
+ public DataSource() {
+ }
+
+ public DataSource(String name, String className) {
+ this.name = name;
+ this.className = className;
+ }
+
+// pbpaste | grep protected | perl -pe 's/.*protected ([^ ]+) ([^ ]+);/public DataSource $2($1 $2) { this.$2 = $2; return this; }/'
+
+ public DataSource name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ public DataSource className(String className) {
+ this.className = className;
+ return this;
+ }
+
+ public DataSource serverName(String serverName) {
+ this.serverName = serverName;
+ return this;
+ }
+
+ public DataSource portNumber(Integer portNumber) {
+ this.portNumber = portNumber;
+ return this;
+ }
+
+ public DataSource databaseName(String databaseName) {
+ this.databaseName = databaseName;
+ return this;
+ }
+
+ public DataSource url(String url) {
+ this.url = url;
+ return this;
+ }
+
+ public DataSource user(String user) {
+ this.user = user;
+ return this;
+ }
+
+ public DataSource password(String password) {
+ this.password = password;
+ return this;
+ }
+
+ public DataSource property(String name, String value) {
+ getProperty().add(new Property(name, value));
+ return this;
+ }
+
+ public DataSource loginTimeout(Integer loginTimeout) {
+ this.loginTimeout = loginTimeout;
+ return this;
+ }
+
+ public DataSource transactional(Boolean transactional) {
+ this.transactional = transactional;
+ return this;
+ }
+
+ public DataSource isolationLevel(IsolationLevel isolationLevel) {
+ this.isolationLevel = isolationLevel;
+ return this;
+ }
+
+ public DataSource initialPoolSize(Integer initialPoolSize) {
+ this.initialPoolSize = initialPoolSize;
+ return this;
+ }
+
+ public DataSource maxPoolSize(Integer maxPoolSize) {
+ this.maxPoolSize = maxPoolSize;
+ return this;
+ }
+
+ public DataSource minPoolSize(Integer minPoolSize) {
+ this.minPoolSize = minPoolSize;
+ return this;
+ }
+
+ public DataSource maxIdleTime(Integer maxIdleTime) {
+ this.maxIdleTime = maxIdleTime;
+ return this;
+ }
+
+ public DataSource maxStatements(Integer maxStatements) {
+ this.maxStatements = maxStatements;
+ return this;
+ }
+
public void setDescriptions(Text[] text) {
description.set(text);
}
@@ -188,6 +283,7 @@ public class DataSource implements Keyab
return url;
}
+
public void setUrl(String value) {
this.url = value;
}
Modified: openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ResourceRef.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ResourceRef.java?rev=1171061&r1=1171060&r2=1171061&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ResourceRef.java (original)
+++ openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ResourceRef.java Thu Sep 15 11:31:07 2011
@@ -109,6 +109,47 @@ public class ResourceRef implements Jndi
this.resSharingScope = resSharingScope;
}
+// pbpaste | grep protected | perl -pe 's/.*protected ([^ ]+) ([^ ]+);/public ResourceRef $2($1 $2) { this.$2 = $2; return this; }/'
+
+ public ResourceRef name(String resRefName) {
+ this.resRefName = resRefName;
+ return this;
+ }
+
+ public ResourceRef type(String resType) {
+ this.resType = resType;
+ return this;
+ }
+
+ public ResourceRef auth(ResAuth resAuth) {
+ this.resAuth = resAuth;
+ return this;
+ }
+
+ public ResourceRef mappedName(String mappedName) {
+ this.mappedName = mappedName;
+ return this;
+ }
+
+ public ResourceRef lookup(String lookupName) {
+ this.lookupName = lookupName;
+ return this;
+ }
+
+ public ResourceRef injectionTarget(String className, String property) {
+ getInjectionTarget().add(new InjectionTarget(className, property));
+
+ if (this.resRefName == null) {
+ this.resRefName = "java:comp/env/" + className + "/" + property;
+ }
+
+ return this;
+ }
+
+ public ResourceRef injectionTarget(Class clazz, String property) {
+ return injectionTarget(clazz.getName(), property);
+ }
+
@XmlTransient
public String getName() {
return getResRefName();