UserB
UserB

Reputation: 25

Why does TomEE Plus throw a ' Can't create resource null java.lang.NullPointerException ' during start-up of a JSF 2.0 webapp?

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

Answers (0)

Related Questions