Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa EJB:NameNotFoundException的JBoss嵌入式jUnit测试_Jpa_Junit_Ejb_Jboss7.x - Fatal编程技术网

Jpa EJB:NameNotFoundException的JBoss嵌入式jUnit测试

Jpa EJB:NameNotFoundException的JBoss嵌入式jUnit测试,jpa,junit,ejb,jboss7.x,Jpa,Junit,Ejb,Jboss7.x,我是EJB和jUnit的新手,我正在尝试对jBoss作为7.1.1.Final运行的简单EJB项目进行嵌入式测试 我写了这个测试: package com.staff.test.logic; import java.io.File; import javax.ejb.embeddable.EJBContainer; import javax.naming.Context; import javax.naming.NamingException; import org.jboss.as.emb

我是EJB和jUnit的新手,我正在尝试对jBoss作为7.1.1.Final运行的简单EJB项目进行嵌入式测试

我写了这个测试:

package com.staff.test.logic;

import java.io.File;

import javax.ejb.embeddable.EJBContainer;
import javax.naming.Context;
import javax.naming.NamingException;
import org.jboss.as.embedded.EmbeddedServerFactory;
import org.jboss.as.embedded.StandaloneServer;
import org.junit.Before;
import org.junit.Test;
import com.staff.main.logic.ProjectBean;

public class ProjectBeanTest {

    private StandaloneServer    server;
    private static EJBContainer ec;
    private static Context ctx;

    @Before
    public void initContainer() throws Exception {
    String jbossHomeDir = System.getenv("JBOSS_HOME");
    System.setProperty("jboss.home","C:/eclipse/jboss-as-7.1.1.Final");
    assert jbossHomeDir != null;
    server = EmbeddedServerFactory.create(new File(jbossHomeDir), System.getProperties(), System.getenv(), "org.jboss.logmanager");
    server.start();

    ctx=server.getContext();
    }

//    @After
//    public static void closeContainer() throws Exception {
//        if (ec != null) {
//            ec.close();
//        }
//    }

    @Test
    public void test() throws NamingException {
        ProjectBean bean = (ProjectBean) ctx.lookup("java:global/ProjectBean");
    }
}
但是字符串

ProjectBean=(ProjectBean)ctx.lookup(“java:global/ProjectBean”)产生异常:

javax.naming.NameNotFoundException: ProjectBean -- service jboss.naming.context.java.global.ProjectBean
at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBa sedNamingStore.java:97)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java: 178)
at org.jboss.as.naming.InitialContext.lookup(InitialContext.jav a:123)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java: 214)
at javax.naming.InitialContext.lookup(Unknown Source)
at com.staff.test.logic.ProjectBeanTest.test(ProjectBeanTest.ja va:80)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall( FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(Refl ectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(Fr ameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate( InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(Ru nBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271 )
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit 4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit 4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java: 63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java :236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java: 53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java: 229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.r un(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(Test Execution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTe sts(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTe sts(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(R emoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main( RemoteTestRunner.java:197)
请执行以下操作:

javax.naming.NameNotFoundException: ProjectBean -- service jboss.naming.context.java.global.ProjectBean
at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBa sedNamingStore.java:97)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java: 178)
at org.jboss.as.naming.InitialContext.lookup(InitialContext.jav a:123)
at org.jboss.as.naming.NamingContext.lookup(NamingContext.java: 214)
at javax.naming.InitialContext.lookup(Unknown Source)
at com.staff.test.logic.ProjectBeanTest.test(ProjectBeanTest.ja va:80)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall( FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(Refl ectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(Fr ameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate( InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(Ru nBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271 )
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit 4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit 4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java: 63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java :236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java: 53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java: 229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.r un(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(Test Execution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTe sts(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTe sts(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(R emoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main( RemoteTestRunner.java:197)
我不明白为什么这个字符串会出现异常,因为我是新手

我的项目有一个bean“ProjectBean”,接口为“ProjectBeanLocal”,实体为“Post”。我有一个文件persistence.xml用于Oracle 10g

ProjectBean:

package com.staff.main.logic;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.hibernate.ejb.Ejb3Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

import com.staff.main.domain.Post;

/**
 * Session Bean implementation class ProjectBean
 */
@Stateless
@LocalBean
public class ProjectBean implements ProjectBeanLocal {

    @PersistenceContext(unitName="StaffPU")
    EntityManager manager;

    public ProjectBean() 
    {  
        Ejb3Configuration cfg = new Ejb3Configuration();
        cfg.configure("StaffPU", null);
        SchemaExport schemaExport = new SchemaExport(cfg.getHibernateConfiguration());
        //schemaExport.setOutputFile("schema.sql");
        schemaExport.create(true, true);
    }

    @Override
    public void savePost(Post post){
        manager.persist(post);
    }

    @Override
    public Post findPost(long id) {
        Post post=manager.find(Post.class, id);
        return post;
    }
}
接口项目本地:

package com.staff.main.logic;

import javax.ejb.Local;
import com.staff.main.domain.Post;

@Local
public interface ProjectBeanLocal {
    void savePost(Post post);
    Post findPost(long id);
}
实体“职位”:

和persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence 
        xmlns="http://java.sun.com/xml/ns/persistence"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
        version="1.0">
    <persistence-unit name="StaffPU">
        <jta-data-source>java:jboss/datasources/OracleDS</jta-data-source>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
            <property name="hibernate.hbm2ddl.auto" value="create" />
<!--            <property name="javax.persistence.jdbc.show_sql" value="true" /> -->
<!--            <property name="hibernate.show_sql" value="true" /> -->
        </properties>
    </persistence-unit>
</persistence>

java:jboss/datasources/OracleDS

您需要使用接口公开bean

之后,您可能需要更改用于查找ejb引用的JNDI条目名称。 您不提供关于如何部署bean的信息,其中包括确定绑定名称的信息,但是您可以在服务器日志中搜索正确的查找字符串

import java.io.File;
import javax.naming.InitialContext;
 import org.jboss.ejb3.embedded.EJB3StandaloneBootstrap;
import org.jboss.ejb3.embedded.EJB3StandaloneDeployer;
在pom中,您必须添加:

 <dependency>
        <groupId>org.jboss.embedded</groupId>
        <artifactId>jboss-embedded-all</artifactId>
        <version>beta3.SP9</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.embedded</groupId>
        <artifactId>thirdparty-all</artifactId>
        <version>beta3.SP9</version>
    </dependency>

org.jboss.embedded
jboss嵌入式所有
beta3.SP9
org.jboss.embedded
第三方全体
beta3.SP9
您必须添加:

  • embedded-jboss-beans.xml
  • xml,default.persistence.properties
  • ejb3-interceptors-aop.xml 进入您的资源文件夹和jndi.properties,其中包含:

    java.naming.factory.initial=org.jnp.interfaces.LocalOnlyContextFactory java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

    您的测试类必须包含:

    EJB3StandaloneBootstrap.boot(null); EJB3StandaloneBootstrap.scanClasspath(); EJB3StandaloneBootstrap.deployXmlResource(embedded.xml) deployer=EJB3StandaloneBootstrap.createDeployer(); deployer.getArchives().add(新文件(“目标/类”).toURI().toul()); create(); deployer.start(); InitialContext=新的InitialContext()


  • 您可以查看您的ejb

    我制作了远程接口。但是我不明白如何进行JNDI。当您进行远程JNDI调用时,您需要完成以下几点:1)向客户端类路径添加必要的依赖项,即:添加远程接口类和jboss-client.jar。2) 正确实例化InitialConetxt(在您的示例中,这是通过server.getContext()方法完成的,该方法未发布)3)提供正确的查找名称(部署ejb时,此信息记录在服务器中)。试着遵循这一点