tomee-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rtselvan <rtsel...@gmail.com>
Subject Re: custom resource factory
Date Fri, 06 Nov 2009 15:20:43 GMT

Thanks Andy.

your solution would work great, I was thinking to create the data sources on
demand with JNDI interception but this should work as well. I will test it
out later today. 

As long as we use openEJB then, we should be good with this solution. For
other app servers, we might have to look into different options.

Thanks
/selvan



Andy Gumbrecht wrote:
> 
> Selvan,
> 
> This is what I am currently doing - you will have to extract what you 
> need from the example. If the OpenEJB instance is not already running 
> then I seed the Properties '_env' for use in the InitialContext, or 
> provide 'null' to configure a Resource for the running embedded instance 
> (see 'SystemInstance'). If you need to do this in a stand alone instance 
> then just create a deploy bean to perform this action.
> 
> I call the method twice - for managed and unmanaged (and keep track of 
> what is already configured).
> 
> addDataSourceConfig(_env, true, f, deployment);
> addDataSourceConfig(_env, false, f, deployment);
> 
> /**
>       * Creates a DataSource resource for OpenEJB.
>       *
>       * @param env     If not null the properties are seeded with 
> parameters to create the DataSource .
>       * @param managed Is this a JTA managed or unmanaged DataSource.
>       * @param f       Root File location for the database - Is specific 
> for file based databases such as Derby, etc.
>       * @param name    DataSource name - Will prepend to either 
> [name]Managed or [name]Unmanaged.
>       * @throws StateException If anything goes wrong.
>       */
>      private static void addDataSourceConfig(Properties env, final 
> boolean managed, final File f, final String name) throws StateException {
> 
>          final String m = (managed ? "Managed" : "Unmanaged");
> 
>          if (_dataSources.contains(String.format("%1$s%2$s", name, m))) {
>              //Already configured for OpenEJB
>              return;
>          }
> 
>          final Resource resource = (null == env ? new 
> Resource(String.format("%1$s%2$s", name, m), "DataSource") : null);
>          final String dsname;
> 
>          if (null != resource) {
>              env = resource.getProperties();
>              dsname = "";
>          } else {
>              env.put(String.format("%1$s%2$s", name, m), 
> "new://Resource?type=DataSource");
>              dsname = String.format("%1$s%2$s.", name, m);
>          }
> 
>          env.put(String.format("%1$sJtaManaged", dsname), (managed ? 
> "true" : "false"));
>          env.put(String.format("%1$sUserName", dsname), "SA");
> 
>          if (isHSQL()) {
>              env.put(String.format("%1$sJdbcDriver", dsname), 
> "org.hsqldb.jdbc.JDBCDriver");
>              env.put(String.format("%1$sJdbcUrl", dsname), 
> String.format("jdbc:hsqldb:file:%1$s/%2$s", f.getPath().replace("\\", 
> "/"), m.toLowerCase()));
>          } else {
>              env.put(String.format("%1$sJdbcDriver", dsname), 
> "org.apache.derby.jdbc.EmbeddedDriver");
>              env.put(String.format("%1$sJdbcUrl", dsname), 
> String.format("jdbc:derby:%1$s/%2$s;create=true", 
> f.getPath().replace("\\", "/"), m.toLowerCase()));
>          }
> 
>          if (null != resource) {
> 
>              try {
>                  
> SystemInstance.get().getComponent(Assembler.class).createResource(new 
> ConfigurationFactory().configureService(resource, ResourceInfo.class));
>                  Thread.yield();
>              } catch (OpenEJBException e) {
>                  log.error("error:", e);
>                  throw new StateException(String.format("Failed to add 
> DataSource %1$s%2$s", name, m), e);
>              }
>          }
> 
>          _dataSources.add(String.format("%1$s%2$s", name, m));
>      }
> 
> On 05.11.2009 07:45, rtselvan wrote:
>> I am trying to implement a multi-tenant application using openEJB
>> container,
>> I need to be able to create the datasource dynamically for the JPA
>> (hibernate JPA). so I wrote a custom jndi object factory but it never get
>> called.
>>
>> Is the custom resource factory supported in openEJB? or any hidden
>> documentation available out there for it?
>>
>> Thanks
>> /selvan
>>    
> 
> 

-- 
View this message in context: http://old.nabble.com/custom-resource-factory-tp26208589p26230797.html
Sent from the OpenEJB User mailing list archive at Nabble.com.


Mime
View raw message