27.12.2013, 15:57. Показов 1028. Ответов 0
Добрый день.
Я новичок в EJB и сделал простейший EJB проект, запускающийся с помощью JBoss AS 7.
Сам EJB проект работает. Но возникла проблема при написании теста jUnit с помощью Embedded EJBContainer.
Код теста у меня такой:
| Java |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| 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();
}
// @AfterClass
// 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");
}
} |
|
При запуске этого теста появляется ошибка для метода ctx.lookup:
javax.naming.NameNotFoundException: ProjectBean -- service jboss.naming.context.java.global.Project Bean
at org.jboss.as.naming.ServiceBasedNamingSt ore.lookup(ServiceBasedNamingStore.java: 97)
at org.jboss.as.naming.NamingContext.lookup (NamingContext.java:178)
at org.jboss.as.naming.InitialContext.looku p(InitialContext.java:123)
at org.jboss.as.naming.NamingContext.lookup (NamingContext.java:214)
at javax.naming.InitialContext.lookup(Unkno wn Source)
at com.staff.test.logic.ProjectBeanTest.tes t(ProjectBeanTest.java:80)
at sun.reflect.NativeMethodAccessorImpl.inv oke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.inv oke(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.Reflect iveCallable.run(ReflectiveCallable.java: 12)
at org.junit.runners.model.FrameworkMethod. invokeExplosively(FrameworkMethod.java:4 4)
at org.junit.internal.runners.statements.In vokeMethod.evaluate(InvokeMethod.java:17 )
at org.junit.internal.runners.statements.Ru nBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(P arentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner .runChild(BlockJUnit4ClassRunner.java:70 )
at org.junit.runners.BlockJUnit4ClassRunner .runChild(BlockJUnit4ClassRunner.java:50 )
at org.junit.runners.ParentRunner$3.run(Par entRunner.java:238)
at org.junit.runners.ParentRunner$1.schedul e(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildr en(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$00 0(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluat e(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(Paren tRunner.java:309)
at org.eclipse.jdt.internal.junit4.runner.J Unit4TestReference.run(JUnit4TestReferen ce.java:50)
at org.eclipse.jdt.internal.junit.runner.Te stExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.Re moteTestRunner.runTests(RemoteTestRunner .java:467)
at org.eclipse.jdt.internal.junit.runner.Re moteTestRunner.runTests(RemoteTestRunner .java:683)
at org.eclipse.jdt.internal.junit.runner.Re moteTestRunner.run(RemoteTestRunner.java :390)
at org.eclipse.jdt.internal.junit.runner.Re moteTestRunner.main(RemoteTestRunner.jav a:197)
|
Код самого ProjectBean выглядит следующим образом:
| Java |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| 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;
}
} |
|
У ProjectBean есть интерфейс ProjectBeanLocal:
| Java |
1
2
3
4
5
6
7
8
9
10
| 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);
} |
|
И ProjectBean использует сущность Post (Должность).
В БД только одна эта таблица.
Код Post:
| Java |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| package com.staff.main.domain;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
@Entity
public class Post implements Serializable{
private static final long serialVersionUID = 6767319776206583629L;
@Id
@SequenceGenerator(name="ent2seq",sequenceName="seq_post")
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="ent2seq")
private long id;
@Column(nullable=false)
private String name;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
} |
|
И есть persistence.xml:
| XML |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <?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> |
|
Я побывал вписывать в метод lookup много разных вариантов, но всегда одна и та же ошибка. В чем может быть проблема.