[ 
https://issues.apache.org/jira/browse/TOMEE-4226?focusedWorklogId=867719&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-867719
 ]

ASF GitHub Bot logged work on TOMEE-4226:
-----------------------------------------

                Author: ASF GitHub Bot
            Created on: 27/Jun/23 09:21
            Start Date: 27/Jun/23 09:21
    Worklog Time Spent: 10m 
      Work Description: rzo1 commented on PR #1059:
URL: https://github.com/apache/tomee/pull/1059#issuecomment-1609117804

   If I understand the idea correctly, that would mean, that we create 
something like:
   
   ```bash
   
   package org.apache.openejb.config.event;
   
   import org.apache.openejb.jee.DataSource;
   import org.apache.openejb.observer.Event;
   
   @Event
   public class DataSourceDefinitionUrlBuild {
   
       private final DataSource ds;
   
       public DataSourceDefinitionUrlBuild(DataSource ds) {
           this.ds = ds;
       }
   
       //getters
   }
   
   ```
   and fire it as soon as we build a `org.apache.openejb.jee.DataSource` from 
`@DataSourceDefinition` in `AnnotationDeployer#buildDataSourceDefinition(...)` ?
   
   Someone could then do something like:
   
   ```bash
       public void adjustDataSourceDefinition(@Observes final 
DataSourceDefinitionUrlBuild event) {
         //do something (for example set a custom jdbc url).
       }
   ````
   
   and register that class via `org.apache.openejb.extension` in `META-INF`, 
right?




Issue Time Tracking
-------------------

    Worklog Id:     (was: 867719)
    Time Spent: 40m  (was: 0.5h)

> DataSource definition fails when @DataSourceDefinition doesn't define url 
> property
> ----------------------------------------------------------------------------------
>
>                 Key: TOMEE-4226
>                 URL: https://issues.apache.org/jira/browse/TOMEE-4226
>             Project: TomEE
>          Issue Type: Bug
>          Components: TomEE Core Server
>    Affects Versions: 8.0.15, 9.1.0
>         Environment: windows 11 
> tomEE 8.0.15 webprofile
> jdk 8
> hibernate 5.6.15
>            Reporter: Stephane Talbot
>            Assignee: Richard Zowalla
>            Priority: Minor
>             Fix For: 10.0.0, 8.0.16, 9.1.1
>
>          Time Spent: 40m
>  Remaining Estimate: 0h
>
> When you define a data-source using_ @DataSourceDefinition_ or using 
> <data-source> tag in standard descriptor, if the url property is not defined, 
> the creation of the data-source fails.
> Example of non-working _DataSourceDefinition_: (same result with 
> _DataSourceDefinition_ annotation or _data-source_ tag)
> {code:java}
> @DataSourceDefinition (
>         name = "java:app/env/jdbc/MyDataSource",
>         className = "org.postgresql.ds.PGPoolingDataSource",
>         user = "myuser",
>         password = "mypassword",
>         serverName = "localhost",
>         portNumber = 5432,
>        databaseName = "mydb"
> )
> {code}
> {code:xml}
>   <data-source>
>       <name>java:app/env/jdbc/MyDataSource</name>
>       <class-name>org.postgresql.ds.PGPoolingDataSource</class-name>
>       <server-name>localhost</server-name>
>       <port-number>5432</port-number>
>       <database-name>mydb</database-name>
>       <user>myuser</user>
>       <password>mypassword</password>
>   </data-source>
> {code}
> Example of working _DataSourceDefinition_
> {code:java}
> @DataSourceDefinition (
>         name = "java:app/env/jdbc/MyDataSource",
>         className = "org.postgresql.ds.PGPoolingDataSource",
>         user = "myuser",
>         password = "mypassword",
>         url = "jdbc:postgresql://localhost:5432/mydb"
> )
> {code}
> {code:xml}
>   <data-source>
>       <name>java:app/env/jdbc/MyDataSource</name>
>       <class-name>org.postgresql.ds.PGPoolingDataSource</class-name>
>       <url>jdbc:postgresql://localhost:5432/mydb</url>
>       <user>myuser</user>
>       <password>mypassword</password>
>   </data-source>
> {code}
> TomEE error logs:
> {code:none}
> GRAVE: Unable to deploy collapsed ear in war 
> StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Thermometres]
> org.apache.xbean.recipe.ConstructionException: Error invoking factory method: 
> public static javax.sql.CommonDataSource 
> org.apache.openejb.resource.jdbc.DataSourceFactory.create(java.lang.String,boolean,java.lang.Class,java.lang.String,org.apache.openejb.util.Duration,org.apache.openejb.util.Duration,org.apache.openejb.util.Duration,boolean)
>  throws 
> java.lang.IllegalAccessException,java.lang.InstantiationException,java.io.IOException
>       at 
> org.apache.xbean.recipe.ReflectionUtil$StaticFactory.create(ReflectionUtil.java:1019)
>       at 
> org.apache.xbean.recipe.ObjectRecipe.internalCreate(ObjectRecipe.java:279)
>       at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:96)
>       at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:61)
>       at 
> org.apache.openejb.assembler.classic.Assembler.doCreateResource(Assembler.java:3178)
>       at 
> org.apache.openejb.assembler.classic.Assembler.createResource(Assembler.java:3013)
>       at 
> org.apache.openejb.config.ConfigurationFactory.doInstall(ConfigurationFactory.java:466)
>       at 
> org.apache.openejb.config.ConfigurationFactory.install(ConfigurationFactory.java:459)
>       at 
> org.apache.openejb.config.AutoConfig.installResource(AutoConfig.java:2215)
>       at 
> org.apache.openejb.config.AutoConfig.processApplicationResources(AutoConfig.java:1048)
>       at org.apache.openejb.config.AutoConfig.deploy(AutoConfig.java:192)
>       at 
> org.apache.openejb.config.ConfigurationFactory$Chain.deploy(ConfigurationFactory.java:420)
>       at 
> org.apache.openejb.config.ConfigurationFactory.configureApplication(ConfigurationFactory.java:1033)
>       at 
> org.apache.tomee.catalina.TomcatWebAppBuilder.startInternal(TomcatWebAppBuilder.java:1318)
>       at 
> org.apache.tomee.catalina.TomcatWebAppBuilder.configureStart(TomcatWebAppBuilder.java:1162)
>       at 
> org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:134)
>       at 
> org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
>       at 
> org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4852)
>       at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
>       at 
> org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332)
>       at 
> org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>       at 
> org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
>       at 
> java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
>       at 
> org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:871)
>       at 
> org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:795)
>       at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
>       at 
> org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332)
>       at 
> org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>       at 
> org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
>       at 
> java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
>       at 
> org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:871)
>       at 
> org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:249)
>       at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
>       at 
> org.apache.catalina.core.StandardService.startInternal(StandardService.java:428)
>       at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
>       at 
> org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:917)
>       at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
>       at org.apache.catalina.startup.Catalina.start(Catalina.java:772)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.lang.reflect.Method.invoke(Method.java:498)
>       at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:347)
>       at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:478)
> Caused by: org.apache.xbean.recipe.ConstructionException: Error setting 
> property: public void 
> org.postgresql.ds.common.BaseDataSource.setUrl(java.lang.String)
>       at 
> org.apache.xbean.recipe.ObjectRecipe.setProperty(ObjectRecipe.java:528)
>       at 
> org.apache.xbean.recipe.ObjectRecipe.setProperties(ObjectRecipe.java:378)
>       at 
> org.apache.xbean.recipe.ObjectRecipe.internalCreate(ObjectRecipe.java:289)
>       at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:96)
>       at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:61)
>       at org.apache.xbean.recipe.AbstractRecipe.create(AbstractRecipe.java:49)
>       at 
> org.apache.openejb.resource.jdbc.DataSourceFactory.create(DataSourceFactory.java:181)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.lang.reflect.Method.invoke(Method.java:498)
>       at 
> org.apache.xbean.recipe.ReflectionUtil$StaticFactory.create(ReflectionUtil.java:1009)
>       ... 45 more
> Caused by: java.lang.IllegalArgumentException: URL invalid 
> jdbc:hsqldb:file:C:\local\apache-tomee-webprofile-8.0.15\data\hsqldb\hsqldb
>       at 
> org.postgresql.ds.common.BaseDataSource.setUrl(BaseDataSource.java:1133)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.lang.reflect.Method.invoke(Method.java:498)
>       at 
> org.apache.xbean.recipe.ObjectRecipe$MethodMember.setValue(ObjectRecipe.java:648)
>       at 
> org.apache.xbean.recipe.ObjectRecipe.setProperty(ObjectRecipe.java:519)
>       ... 56 more
> {code}
> You can see that it try to create the Postgresql DataSource using TomEE 
> default hsqldb datasource url instead of the of the correct one.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to