Reputation: 25
After failing to migrate an old MyFaces 2.0 webapp (app1) from WebLogic Server 12.1.3 to Tomcat Tomcat 9 using OpenWebBeans 2.0.27 due to a potential CDI issue, I was asked to switch my attention back to TomEE Plus since this webapp also makes use of EJBs.
Irrespective of whether I use TomEE Plus 1.7.5 or 8.0.11, I get the following error at TomEE Plus start-up:
INFO: Configuring Service(id=app1/BeanManager, type=Resource, provider-id=ProvidedByTomcat)
Jul 12, 2022 1:15:46 PM org.apache.openejb.assembler.classic.Assembler createRecipe
INFO: Creating Resource(id=app1/BeanManager)
Jul 12, 2022 1:15:46 PM org.apache.tomee.catalina.TomcatResourceFactory create
SEVERE: Can't create resource null
java.lang.NullPointerException
at org.apache.webbeans.container.ManagerObjectFactory.getObjectInstance(ManagerObjectFactory.java:34)
...
Jul 12, 2022 1:15:46 PM org.apache.openejb.config.AutoConfig processResourceRef
INFO: Auto-linking resource-ref 'java:comp/env/jdbc/app1db' in bean app1.Comp1042211884 to Resource(id=jdbc/app1db)
Jul 12, 2022 1:15:46 PM org.apache.tomee.catalina.TomcatWebAppBuilder startInternal
SEVERE: Unable to deploy collapsed ear in war StandardEngine[Catalina].StandardHost[localhost].StandardContext[/app1]
org.apache.openejb.OpenEJBException: Can't find resource for class com.axeda.drm.services.scm.event.DeploymentEventMapperImpl#jdbcTemplate. (No provider available for resource-ref id with type 'org.springframework.jdbc.core.JdbcTemplate' for 'app1.Comp1042211884'.)
at org.apache.openejb.config.AutoConfig.processResourceRef(AutoConfig.java:1176)
...
Like me, I've seen other users in SO complain about a similar pattern especially where we don't see such an error with Tomcat but only on TomEE (Plus). There seems to be no missing resource in the Axeda third-party libraries we use.
One observation is that the Maven dependency for the Oracle JDBC driver (ojdbc7-12.1.0.1.jar) needs to be of provided
scope (must be added to TomEE's lib) to work which was not the case during my Tomcat trials.
Is there a known conflict with TomEE I'm missing?
I'd appreciate any input to help overcome this hurdle which has left me stranded for days now.
Configuration
Exception
...
INFO: Connector tcp://aca-client.axeda.com:61616 started
Jul 12, 2022 1:15:39 PM org.apache.activemq.broker.BrokerService doStartBroker
INFO: Apache ActiveMQ 5.10.2 (localhost, ID:G2V2T7Y2E-21483-1657611939638-0:1) started
Jul 12, 2022 1:15:39 PM org.apache.activemq.broker.BrokerService doStartBroker
INFO: For help or more information please see: http://activemq.apache.org
Jul 12, 2022 1:15:39 PM org.apache.openejb.resource.activemq.ActiveMQ5Factory$1 run
INFO: Starting ActiveMQ checkpoint
Jul 12, 2022 1:15:39 PM org.apache.openejb.resource.activemq.ActiveMQ5Factory createBroker
INFO: ActiveMQ broker started
Jul 12, 2022 1:15:39 PM org.apache.openejb.assembler.classic.Assembler createRecipe
INFO: Creating Resource(id=jms/axedaConnectionFactory)
Jul 12, 2022 1:15:39 PM org.apache.openejb.assembler.classic.Assembler doCreateResource
INFO: Creating ConnectionManager for Resource(id=jms/axedaConnectionFactory)
Jul 12, 2022 1:15:39 PM org.apache.geronimo.connector.outbound.GenericConnectionManager$InterceptorsImpl <init>
INFO: No runtime TransactionSupport
Jul 12, 2022 1:15:39 PM org.apache.openejb.assembler.classic.Assembler createRecipe
INFO: Creating Resource(id=jms/axedaQueue)
Jul 12, 2022 1:15:39 PM org.apache.openejb.assembler.classic.Assembler unusedProperty
WARNING: Property "ServiceId" not supported by "jms/axedaQueue"
...
INFO: Initialization processed in 3027 ms
Jul 12, 2022 1:15:40 PM org.apache.tomee.catalina.OpenEJBNamingContextListener bindResource
INFO: Importing a Tomcat Resource with id 'UserDatabase' of type 'org.apache.catalina.UserDatabase'.
Jul 12, 2022 1:15:40 PM org.apache.openejb.assembler.classic.Assembler createRecipe
INFO: Creating Resource(id=UserDatabase)
Jul 12, 2022 1:15:40 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Jul 12, 2022 1:15:40 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat (TomEE)/7.0.81 (1.7.5)
Jul 12, 2022 1:15:40 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive C:\apache-tomee-plus-1.7.5\webapps\app1.war
Jul 12, 2022 1:15:40 PM org.apache.tomee.catalina.TomcatWebAppBuilder init
INFO: ------------------------- localhost -> /app1
Jul 12, 2022 1:15:40 PM org.apache.tomee.catalina.TomEEClassLoaderEnricher validateJarFile
WARNING: jar 'C:\apache-tomee-plus-1.7.5\webapps\app1\WEB-INF\lib\activemq-all-5.7.0.jar' contains offending class: javax.transaction.Transaction. It will be ignored.
Jul 12, 2022 1:15:40 PM org.apache.catalina.loader.WebappClassLoaderBase validateJarFile
INFO: validateJarFile(C:\apache-tomee-plus-1.7.5\webapps\app1\WEB-INF\lib\javax.el-api-2.2.4.jar) - jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/el/Expression.class
Jul 12, 2022 1:15:40 PM org.apache.tomee.catalina.TomEEClassLoaderEnricher validateJarFile
WARNING: jar 'C:\apache-tomee-plus-1.7.5\webapps\app1\WEB-INF\lib\jersey-core-1.18.jar' contains offending class: javax.ws.rs.Path. It will be ignored.
Jul 12, 2022 1:15:44 PM org.apache.openejb.config.ConfigurationFactory configureApplication
INFO: Configuring enterprise application: C:\apache-tomee-plus-1.7.5\webapps\app1
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
Jul 12, 2022 1:15:46 PM org.apache.openejb.config.InitEjbDeployments deploy
INFO: Auto-deploying ejb ScheduledFileCleanup: EjbDeployment(deployment-id=ScheduledFileCleanup)
Jul 12, 2022 1:15:46 PM org.apache.openejb.config.InitEjbDeployments deploy
INFO: Auto-deploying ejb AutomatedFileTransferListener: EjbDeployment(deployment-id=AutomatedFileTransferListener)
Jul 12, 2022 1:15:46 PM org.apache.openejb.config.InitEjbDeployments deploy
INFO: Auto-deploying ejb NotifySubscribersBean: EjbDeployment(deployment-id=NotifySubscribersBean)
Jul 12, 2022 1:15:46 PM org.apache.openejb.config.InitEjbDeployments deploy
INFO: Auto-deploying ejb EventDispatcherBean: EjbDeployment(deployment-id=EventDispatcherBean)
Jul 12, 2022 1:15:46 PM org.apache.openejb.config.InitEjbDeployments deploy
INFO: Auto-deploying ejb AutomatedFileTransferHandler: EjbDeployment(deployment-id=AutomatedFileTransferHandler)
Jul 12, 2022 1:15:46 PM org.apache.openejb.config.ConfigurationFactory configureService
INFO: Configuring Service(id=app1/BeanManager, type=Resource, provider-id=ProvidedByTomcat)
Jul 12, 2022 1:15:46 PM org.apache.openejb.assembler.classic.Assembler createRecipe
INFO: Creating Resource(id=app1/BeanManager)
Jul 12, 2022 1:15:46 PM org.apache.tomee.catalina.TomcatResourceFactory create
SEVERE: Can't create resource null
java.lang.NullPointerException
at org.apache.webbeans.container.ManagerObjectFactory.getObjectInstance(ManagerObjectFactory.java:34)
at org.apache.tomee.catalina.TomcatResourceFactory.create(TomcatResourceFactory.java:80)
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.internalCreate(ObjectRecipe.java:298)
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:2805)
at org.apache.openejb.assembler.classic.Assembler.createResource(Assembler.java:2684)
at org.apache.openejb.config.ConfigurationFactory.install(ConfigurationFactory.java:438)
at org.apache.openejb.config.AutoConfig.installResource(AutoConfig.java:2134)
at org.apache.openejb.config.AutoConfig.processApplicationResources(AutoConfig.java:981)
at org.apache.openejb.config.AutoConfig.deploy(AutoConfig.java:186)
at org.apache.openejb.config.ConfigurationFactory$Chain.deploy(ConfigurationFactory.java:403)
at org.apache.openejb.config.ConfigurationFactory.configureApplication(ConfigurationFactory.java:971)
at org.apache.tomee.catalina.TomcatWebAppBuilder.startInternal(TomcatWebAppBuilder.java:1227)
at org.apache.tomee.catalina.TomcatWebAppBuilder.configureStart(TomcatWebAppBuilder.java:1100)
at org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:130)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5519)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1009)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:985)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1127)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:2020)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Jul 12, 2022 1:15:46 PM org.apache.openejb.config.ConfigurationFactory configureService
INFO: Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)
Jul 12, 2022 1:15:46 PM org.apache.openejb.config.AutoConfig createContainer
INFO: Auto-creating a container for bean app1.Comp1042211884: Container(type=MANAGED, id=Default Managed Container)
Jul 12, 2022 1:15:46 PM org.apache.openejb.assembler.classic.Assembler createRecipe
INFO: Creating Container(id=Default Managed Container)
Jul 12, 2022 1:15:46 PM org.apache.openejb.core.managed.SimplePassivater init
INFO: Using directory C:\apache-tomee-plus-1.7.5\temp for stateful session passivation
Jul 12, 2022 1:15:46 PM org.apache.openejb.config.AutoConfig processResourceRef
INFO: Auto-linking resource-ref 'java:comp/env/jdbc/app1db' in bean app1.Comp1042211884 to Resource(id=jdbc/app1db)
Jul 12, 2022 1:15:46 PM org.apache.tomee.catalina.TomcatWebAppBuilder startInternal
SEVERE: Unable to deploy collapsed ear in war StandardEngine[Catalina].StandardHost[localhost].StandardContext[/app1]
org.apache.openejb.OpenEJBException: Can't find resource for class com.axeda.drm.services.scm.event.DeploymentEventMapperImpl#jdbcTemplate. (No provider available for resource-ref id with type 'org.springframework.jdbc.core.JdbcTemplate' for 'app1.Comp1042211884'.)
at org.apache.openejb.config.AutoConfig.processResourceRef(AutoConfig.java:1176)
at org.apache.openejb.config.AutoConfig.deploy(AutoConfig.java:855)
at org.apache.openejb.config.AutoConfig.deploy(AutoConfig.java:196)
at org.apache.openejb.config.ConfigurationFactory$Chain.deploy(ConfigurationFactory.java:403)
at org.apache.openejb.config.ConfigurationFactory.configureApplication(ConfigurationFactory.java:971)
at org.apache.tomee.catalina.TomcatWebAppBuilder.startInternal(TomcatWebAppBuilder.java:1227)
at org.apache.tomee.catalina.TomcatWebAppBuilder.configureStart(TomcatWebAppBuilder.java:1100)
at org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:130)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5519)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1009)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:985)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1127)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:2020)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
...
tomee.xml
<?xml version="1.0" encoding="UTF-8"?>
<tomee>
<!-- see http://tomee.apache.org/containers-and-resources.html -->
<!-- JDBC for Cloud DEV -->
<Resource id="jdbc/axedadb" type="DataSource">
JdbcDriver oracle.jdbc.OracleDriver
JdbcUrl jdbc:oracle:thin:@localhost:2001:dev1
UserName axeda
Password p1
</Resource>
<Resource id="jdbc/app1db" type="DataSource">
JdbcDriver oracle.jdbc.OracleDriver
JdbcUrl jdbc:oracle:thin:@localhost:2001:dev2
UserName app1_custom
Password p2
</Resource>
<Resource id="company_app1-data_source" type="DataSource">
JdbcDriver oracle.jdbc.OracleDriver
JdbcUrl jdbc:oracle:thin:@localhost:2001:dev3
UserName app1_custom
Password p3
</Resource>
<!--Set up Local ActiveMQ-->
<Resource id="MyJmsResourceAdapter" type="ActiveMQResourceAdapter">
<!-- Do not start the embedded ActiveMQ broker -->
<!-- BrokerXmlConfig = -->
BrokerXmlConfig = broker:(tcp://localhost:61616)
ServerUrl = tcp://localhost:61616
</Resource>
<Resource id="jms/axedaConnectionFactory" type="javax.jms.ConnectionFactory">
ResourceAdapter = MyJmsResourceAdapter
</Resource>
<Container id="MyJmsMdbContainer" type="MESSAGE">
ResourceAdapter = MyJmsResourceAdapter
</Container>
<Resource id="jms/axedaQueue" type="javax.jms.Queue"/>
<!-- activate next line to be able to deploy applications in apps -->
<!-- <Deployments dir="apps" /> -->
</tomee>
pom.xml (abridged)
<?xml version="1.0" encoding="UTF-8" ?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>TMapp1</groupId>
<artifactId>app1</artifactId>
<version>5.0</version>
<packaging>war</packaging>
<name>TM app1 Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<owb.version>2.0.27</owb.version>
</properties>
<dependencies>
<!-- start of apache-commons -->
<!-- Used by: app1 -->
<dependency>
<groupId<!-- ... -->
</dependency>
<!-- end of apache-commons -->
<dependency>
<!-- Used by: TODO: app1 -->
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.7.0</version>
<!-- exclude Log4j from commons-logging as it is older version and found to be vulnerable (CVE-2021-44228) -->
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<!-- Used by: Axeda -->
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<!-- Used by: TODO: app1 -->
<groupId>org.apache.myfaces.extensions.cdi.bundles</groupId>
<artifactId>myfaces-extcdi-bundle-jsf20</artifactId>
<version>1.0.5</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0.1</version>
</dependency>
<!-- primefaces? -->
<!-- Used by: app1 -->
<dependency> <!-- not used at compile time -->
<groupId>org.atmosphere</groupId>
<!-- ... -->
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>4.0</version>
</dependency>
<!-- Used by: app1 -->
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>2.2.4</version>
</dependency>
<!-- start of jersey libs -->
<dependency>
<!-- ... -->
</dependency>
<!-- end of jersey libs -->
<dependency>
<!-- Used by: app1 -->
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- start of third-party libraries -->
<dependency>
<!-- Used by: app1 -->
<groupId>com.axeda</groupId>
<artifactId>sl-core</artifactId>
<version>6.8.4.3</version>
</dependency>
<dependency>
<!-- Used by: app1 -->
<groupId>com.axeda.services.v2</groupId>
<artifactId>axeda_restv2</artifactId>
<version>6.5</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>primefaces</id>
<name>PrimeFaces Maven Repository</name>
<url>https://repository.primefaces.org</url>
<layout>default</layout>
</repository>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<build>
<finalName>app1</finalName>
<plugins>
<!-- ... -->
</plugins>
<resources>
<!-- ... -->
</resources>
</build>
<profiles>
<profile>
<id>myfaces22</id>
<!-- ... -->
</profile>
<profile>
<id>myfaces23</id>
<!-- ... -->
</profile>
<profile>
<id>myfaces23next</id>
<!-- ... -->
</profile>
<profile>
<id>coverage</id>
<!-- ... -->
</profile>
</profiles>
</project>
Upvotes: 1
Views: 894