Hi,

thanks for the answers, i tried both, but i did not helped. Which persistence version you are using?



Information: [EL Info]: 2014-10-31 20:51:18.119--ServerSession(648005980)--EclipseLink, version: Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd Information: [EL Severe]: ejb: 2014-10-31 20:51:18.12--ServerSession(648005980)--java.lang.IllegalStateException: This web container has not yet been started Information: [ERROR] ioc.Registry javax.persistence.PersistenceException: java.lang.IllegalStateException: This web container has not yet been started
Information:   [ERROR] ioc.Registry Operations trace:
Information: [ERROR] ioc.Registry [ 1] Invoking startup method org.apache.tapestry5.jpa.modules.JpaModule.startupEarly(EntityManagerManager, boolean).
Schwerwiegend:   WebModule[/AEOnlineExtranet]Exception starting filter app
java.lang.InstantiationException
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:135) at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:5329) at org.apache.catalina.core.StandardContext.start(StandardContext.java:5943)
        at com.sun.enterprise.web.WebModule.start(WebModule.java:691)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1041)
        at 
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:1024)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:747)
at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:2286) at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1932)
        at com.sun.enterprise.web.WebApplication.start(WebApplication.java:139)
        at org.glassfish.internal.data.EngineRef.start(EngineRef.java:122)
        at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:291)
at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:352) at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:500) at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219) at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491) at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:539) at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:535)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:360)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:534) at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:565) at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:557)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:360)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:556) at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1464) at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:109) at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1846) at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1722) at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534) at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224) at org.glassfish.grizzly.http.server.StaticHttpHandlerBase.service(StaticHttpHandlerBase.java:189) at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167) at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201) at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175) at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235) at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201) at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133) at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112) at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561) at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
        at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.tapestry5.ioc.internal.OperationException: javax.persistence.PersistenceException: java.lang.IllegalStateException: This web container has not yet been started at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.logAndRethrow(OperationTrackerImpl.java:184) at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTrackerImpl.java:62) at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.run(PerThreadOperationTracker.java:60) at org.apache.tapestry5.ioc.internal.RegistryImpl.run(RegistryImpl.java:1252) at org.apache.tapestry5.ioc.internal.StartupDefImpl.invoke(StartupDefImpl.java:48) at org.apache.tapestry5.ioc.internal.RegistryImpl$2.run(RegistryImpl.java:229) at org.apache.tapestry5.ioc.internal.RegistryImpl.performRegistryStartup(RegistryImpl.java:360) at org.apache.tapestry5.ioc.internal.RegistryWrapper.performRegistryStartup(RegistryWrapper.java:89)
        at org.apache.tapestry5.TapestryFilter.init(TapestryFilter.java:112)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275) at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:131)
        ... 51 more
Caused by: java.lang.RuntimeException: javax.persistence.PersistenceException: java.lang.IllegalStateException: This web container has not yet been started at org.apache.tapestry5.ioc.internal.StartupDefImpl$1.run(StartupDefImpl.java:84) at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTrackerImpl.java:56)
        ... 60 more
Caused by: javax.persistence.PersistenceException: java.lang.IllegalStateException: This web container has not yet been started at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:766) at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession(EntityManagerFactoryDelegate.java:204) at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:304) at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:336) at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:302) at org.apache.tapestry5.internal.jpa.EntityManagerSourceImpl.create(EntityManagerSourceImpl.java:281)
        at $EntityManagerSource_6f1d45bf6d0.create(Unknown Source)
at org.apache.tapestry5.internal.jpa.EntityManagerManagerImpl.getOrCreateEntityManager(EntityManagerManagerImpl.java:80) at org.apache.tapestry5.internal.jpa.EntityManagerManagerImpl.createAllEntityManagers(EntityManagerManagerImpl.java:70) at org.apache.tapestry5.internal.jpa.EntityManagerManagerImpl.getEntityManagers(EntityManagerManagerImpl.java:61)
        at $EntityManagerManager_6f1d45bf6cf.getEntityManagers(Unknown Source)
        at $EntityManagerManager_6f1d45bf6ce.getEntityManagers(Unknown Source)
at org.apache.tapestry5.jpa.modules.JpaModule.startupEarly(JpaModule.java:187)
        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:483)
at org.apache.tapestry5.ioc.internal.StartupDefImpl$1.run(StartupDefImpl.java:70)
        ... 61 more
Caused by: java.lang.IllegalStateException: This web container has not yet been started at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1674) at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1633)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:344)
at org.eclipse.persistence.internal.security.PrivilegedAccessHelper.getClassForName(PrivilegedAccessHelper.java:124) at org.eclipse.persistence.sessions.DefaultConnector.loadDriverClass(DefaultConnector.java:253) at org.eclipse.persistence.sessions.DefaultConnector.connect(DefaultConnector.java:85) at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162) at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.setOrDetectDatasource(DatabaseSessionImpl.java:204) at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:741) at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:239) at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:685)
        ... 78 more



Am 30.10.14 um 08:56 schrieb Antal van Kalleveen:
Interresting,

We've had the same 'problems' and i solved it with a 'mapped' caching 
EntityProvider, like this:


package nl.intercommit.godocument.services.internal.core;

import java.util.HashMap;
import java.util.Map;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.apache.tapestry5.internal.jpa.JpaInternalUtils;
import org.apache.tapestry5.ioc.AnnotationProvider;
import org.apache.tapestry5.ioc.ObjectCreator;
import org.apache.tapestry5.ioc.ObjectLocator;
import org.apache.tapestry5.ioc.ObjectProvider;
import org.apache.tapestry5.ioc.annotations.PostInjection;
import org.apache.tapestry5.ioc.services.PlasticProxyFactory;
import org.apache.tapestry5.jpa.EntityManagerManager;

/*
  * ObjectProvider for EntityManager that takes the unitname as key for proxy 
caching.
  *
  */
public class MappedEntityManagerObjectProvider implements ObjectProvider {

        // these are alive for the lifetime of the application
        private Map<String,EntityManager> proxies;
        
        
        @PostInjection
        public void setup() {
                proxies = new HashMap<String, EntityManager>(3);
        }
        
     /**
      * {@inheritDoc}
      */
     public <T> T provide(final Class<T> objectType, final AnnotationProvider 
annotationProvider,
             final ObjectLocator locator)
     {
         if (objectType.equals(EntityManager.class))
             return objectType.cast(getOrCreateProxy(annotationProvider, 
locator));

         return null;
     }

     private synchronized EntityManager getOrCreateProxy(
             final AnnotationProvider annotationProvider, final ObjectLocator 
objectLocator) {
        
        final PersistenceContext annotation = 
annotationProvider.getAnnotation(PersistenceContext.class);
        String name = null;
        if (annotation != null) {
                 name = annotation.unitName();
        }
        if (!proxies.containsKey(name)) {
                final PlasticProxyFactory classFactory = 
objectLocator.getService("PlasticProxyFactory",PlasticProxyFactory.class);
                final EntityManager proxy = 
classFactory.createProxy(EntityManager.class, new ObjectCreator<EntityManager>()
             {
                  public EntityManager createObject()
                  {
                      final EntityManagerManager entityManagerManager = 
objectLocator.getService(EntityManagerManager.class);
                      return 
JpaInternalUtils.getEntityManager(entityManagerManager, annotation);
                  }
              }, "<EntityManagerProxy>");
                
                 if (name != null) {
                         proxies.put(name, proxy);
                 }
                 return proxy;
        }
        return proxies.get(name);       
     }

}


And then in the application module:


@Contribute(MasterObjectProvider.class)
        public static void provideObjectProviders(final 
OrderedConfiguration<ObjectProvider> configuration) {
                // Override the entitymanager object provider !
                configuration.overrideInstance("EntityManager", 
MappedEntityManagerObjectProvider.class,"before:AnnotationBasedContributions");
        }



---- OriginalMessage ----
From: "John" <j...@quivinco.com>
To: "Tapestry users" <users@tapestry.apache.org>
Sent: Thu, Oct 30, 2014, 08:27
Subject: Re: persistence units

Hi,

To get Tapestry 5.3.7 working with more than 1 PU, 2 SQL Servers and 1
PostgreSQL Db in my case, I supplied this modified class in my project JAR.
I'm not sure this works on 5.4 or is required? Without this change I think
you just get the first defined PU whatever you define with
PersistenceContext.

This code has been used on a live system for years now, it's solid. Suggest
you try it and report back.

John

/**
* EntityManagerObjectProvider.java
*/
package org.apache.tapestry5.internal.jpa;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.apache.tapestry5.ioc.AnnotationProvider;
import org.apache.tapestry5.ioc.ObjectCreator;
import org.apache.tapestry5.ioc.ObjectLocator;
import org.apache.tapestry5.ioc.ObjectProvider;
import org.apache.tapestry5.ioc.services.PlasticProxyFactory;
import org.apache.tapestry5.jpa.EntityManagerManager;

/**
* A patched version to use PlasticProxyFactory and not cache the
EntityManager
* as a class member.
*
* @author John Coleman
*/
public class EntityManagerObjectProvider implements ObjectProvider {

    /**
     * {@inheritDoc}
     */
    public <T> T provide(final Class<T> objectType,
        final AnnotationProvider annotationProvider,
        final ObjectLocator locator) {
    if (objectType.equals(EntityManager.class))
        return objectType
            .cast(getOrCreateProxy(annotationProvider, locator));

    return null;
    }

    private synchronized EntityManager getOrCreateProxy(
        final AnnotationProvider annotationProvider,
        final ObjectLocator objectLocator) {
    final PlasticProxyFactory proxyFactory = objectLocator.getService(
        "PlasticProxyFactory", PlasticProxyFactory.class);

    final PersistenceContext annotation = annotationProvider
        .getAnnotation(PersistenceContext.class);

    EntityManager proxy = proxyFactory.createProxy(EntityManager.class,
        new ObjectCreator<EntityManager>() {
            public EntityManager createObject() {
            final EntityManagerManager entityManagerManager = objectLocator
                .getService(EntityManagerManager.class);

            return JpaInternalUtils.getEntityManager(
                entityManagerManager, annotation);
            }
        }, "<EntityManagerProxy>");

    return proxy;
    }


--
ae | Andreas Ernst | IT Spektrum
Postfach 5, 65612 Beselich
Schupbacher Str. 32, 65614 Beselich, Germany
Tel: +49-6484-91002 Fax: +49-6484-91003
a...@ae-online.de | www.ae-online.de
www.tachyon-online.de

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to