无法在JNDI中找到SessionFactory-在Weblogic中配置Web应用程序

时间:2019-05-08 16:26:51

标签: java hibernate weblogic dao

我正在将一个Websphere应用程序迁移到一个weblogic应用程序,并且遇到错误:

    2019-05-08 17:08:42,579 [[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'] ERROR P - Initial SessionFactory creation failed.javax.naming.NameNotFoundException: Unable to resolve 'PSessionFactory'. Resolved ''; remaining name 'PSessionFactory'
2019-05-08 17:08:42,580 [[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'] ERROR P.filter - Could not locate SessionFactory in JNDI
java.lang.ExceptionInInitializerError
    at P.utils.HibernateUtils.sessionFactoryInit(HibernateUtils.java:84)
    at P.utils.HibernateUtils.<clinit>(HibernateUtils.java:38)
    at P.utils.HibernateSessionRequestFilter.init(HibernateSessionRequestFilter.java:116)
    at weblogic.servlet.internal.FilterManager$FilterInitAction.run(FilterManager.java:400)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326)
    at weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197)
    at weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203)
    at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71)
    at weblogic.servlet.internal.FilterManager.initFilter(FilterManager.java:130)
    at weblogic.servlet.internal.FilterManager.loadFilter(FilterManager.java:92)
    at weblogic.servlet.internal.FilterManager.preloadFilters(FilterManager.java:72)
    at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1918)
    at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3091)
    at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1823)
    at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:882)
    at weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:360)
    at weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:356)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)
    at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:138)
    at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)
    at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:233)
    at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:228)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)
    at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:78)
    at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:52)
    at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:750)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)
    at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:260)
    at weblogic.application.internal.EarDeployment.activate(EarDeployment.java:66)
    at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:165)
    at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:90)
    at weblogic.deploy.internal.targetserver.BasicDeployment.activate(BasicDeployment.java:265)
    at weblogic.deploy.internal.targetserver.BasicDeployment.activateFromServerLifecycle(BasicDeployment.java:481)
    at weblogic.management.deploy.internal.DeploymentAdapter$1.doActivate(DeploymentAdapter.java:53)
    at weblogic.management.deploy.internal.DeploymentAdapter.activate(DeploymentAdapter.java:202)
    at weblogic.management.deploy.internal.AppTransition$2.transitionApp(AppTransition.java:52)
    at weblogic.management.deploy.internal.ConfiguredDeployments$2.doItem(ConfiguredDeployments.java:684)
    at weblogic.management.deploy.internal.parallel.BucketInvoker.invoke(BucketInvoker.java:138)
    at weblogic.management.deploy.internal.ConfiguredDeployments.transitionAppsParallel(ConfiguredDeployments.java:692)
    at weblogic.management.deploy.internal.ConfiguredDeployments.activate(ConfiguredDeployments.java:341)
    at weblogic.management.deploy.internal.ConfiguredDeployments.deploy(ConfiguredDeployments.java:203)
    at weblogic.management.deploy.internal.DeploymentServerService.resume(DeploymentServerService.java:207)
    at weblogic.management.deploy.internal.DeploymentServerService.start(DeploymentServerService.java:129)
    at weblogic.server.AbstractServerService.postConstruct(AbstractServerService.java:76)
    at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.glassfish.hk2.utilities.reflection.ReflectionHelper.invoke(ReflectionHelper.java:1262)
    at org.jvnet.hk2.internal.ClazzCreator.postConstructMe(ClazzCreator.java:332)
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:374)
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471)
    at org.glassfish.hk2.runlevel.internal.AsyncRunLevelContext.findOrCreate(AsyncRunLevelContext.java:232)
    at org.glassfish.hk2.runlevel.RunLevelContext.findOrCreate(RunLevelContext.java:85)
    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2020)
    at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:114)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:693)
    at org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThirtyResolver.java:78)
    at org.jvnet.hk2.internal.ClazzCreator.resolve(ClazzCreator.java:211)
    at org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:234)
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:357)
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:471)
    at org.glassfish.hk2.runlevel.internal.AsyncRunLevelContext.findOrCreate(AsyncRunLevelContext.java:232)
    at org.glassfish.hk2.runlevel.RunLevelContext.findOrCreate(RunLevelContext.java:85)
    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2020)
    at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:114)
    at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:88)
    at org.glassfish.hk2.runlevel.internal.CurrentTaskFuture$QueueRunner.oneJob(CurrentTaskFuture.java:1213)
    at org.glassfish.hk2.runlevel.internal.CurrentTaskFuture$QueueRunner.run(CurrentTaskFuture.java:1144)
    at org.glassfish.hk2.runlevel.internal.CurrentTaskFuture$UpOneLevel.run(CurrentTaskFuture.java:762)
    at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:666)
    at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:348)
    at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:333)
    at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:54)
    at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)
    at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:640)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:406)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:346)
Caused by: javax.naming.NameNotFoundException: Unable to resolve 'PSessionFactory'. Resolved ''; remaining name 'PSessionFactory'
    at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:1292)
    at weblogic.jndi.internal.BasicNamingNode.lookupHere(BasicNamingNode.java:354)
    at weblogic.jndi.internal.ServerNamingNode.lookupHere(ServerNamingNode.java:222)
    at weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:214)
    at weblogic.jndi.internal.ServerNamingNode.lookup(ServerNamingNode.java:521)
    at weblogic.jndi.internal.RootNamingNode.lookup(RootNamingNode.java:84)
    at weblogic.jndi.internal.WLEventContextImpl.lookup(WLEventContextImpl.java:307)
    at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:434)
    at javax.naming.InitialContext.lookup(InitialContext.java:417)
    at P.utils.HibernateUtils.sessionFactoryInit(HibernateUtils.java:73)

我也将离开hibernate.cfg.xml:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory name="java:hibernate/PSessionFactory">

        <property name="hibernate.bytecode.use_reflection_optimizer">false</property>
        <property name="hibernate.connection.autocommit">true</property>
        <property name="hibernate.connection.autoReconnect">true</property>
        <property name="hibernate.connection.autoReconnectForPools">true</property>
        <property name="hibernate.connection.datasource">java:comp/env/dsP</property>
        <property name="hibernate.connection.is-connection-validation-required">true</property>
        <property name="hibernate.connection.pool_size">10</property>
        <property name="hibernate.current_session_context_class">thread</property>
        <property name="hibernate.dialect">P.utils.PlatformOracleDialect</property>
        <property name="hibernate.jdbc.batch_size">50</property>
        <property name="hibernate.jdbc.fetch_size">50</property>
        <property name="hibernate.jdbc.use_get_generated_keys">true</property>
        <property name="hibernate.jdbc.use_streams_for_binary">true</property>
        <property name="hibernate.order_inserts">true</property>
        <property name="hibernate.order_updates">true</property>
        <property name="hibernate.session_factory_name">PSessionFactory</property>
        <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
        <!--  <property name="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.WebSphereExtendedJTATransactionLookup</property>-->
        <property name="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.WeblogicTransactionManagerLookup</property>
        <property name="SetBigStringTryClob">true</property>
    </session-factory>
</hibernate-configuration>

正如我可以从第一个日志中检查到的那样,并且在对HibernateUtils进行一些调试之后,我发现在查找之后sessionFactory仍然为null。 HibernateUtils的方法:

private static void sessionFactoryInit() {
        getLog().info("Starting initial sessionFactory creation.");

        try {
            Context ctx = new InitialContext();
            logInitialContextJNDI(ctx);
            sessionFactory = (SessionFactory)ctx.lookup("PSessionFactory");
            if(sessionFactory == null){ 
                throw new ExceptionInInitializerError("SessionFactory is null");
            }

            getLog().info("Initial SessionFactory creation succedded.");
        }
        catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            getLog().error("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

我在服务器的配置上缺少什么吗?

谢谢。

0 个答案:

没有答案