我已经使用SLF4J JUL桥将glassfish 3配置为使用SLF4J并且它工作正常.我现在遇到的问题是,如果我使用相同的设置,SLF4J会抱怨类路径上存在重复的SLF4J绑定,并且在搜索之后,glassfish本身包含这些引用.
我如何让SLF4J工作?我尝试依赖提供的SLF4J-API,然后删除了LogBack Classic,因为glassfish已经包含一些logback代码.做这些事情不会产生任何成功的结果.
沃尔特
我想使用Arquillian在嵌入式Glassfish上测试我的EJB.
重要的是我必须保持安全性,因为我的bean逻辑执行一些编程安全检查(sessionContext.isCallerInRole(role)).
是否可以在嵌入式Glassfish上使用Arquillian模拟登录?
如何设置Embedded Glassfish以使用用户和角色属性文件?
[编辑]
我找到了一个帖子,我决定遵循的方向(http://community.jboss.org/message/580290),但我仍然遇到问题.
1我arquillian.xml没被拿起
2我收到有关@Resource SessionContext
3的警告我无法获得正在运行的服务器的实例
SRC /测试/资源/ arquillian.xml:
<arquillian xmlns="http://jboss.com/arquillian"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:glassfish="urn:arq:org.jboss.arquillian.container.glassfish.embedded_3">
<glassfish:container>
<glassfish:bindHttpPort>9090</glassfish:bindHttpPort>
<glassfish:instanceRoot>src/test/glassfish</glassfish:instanceRoot>
<glassfish:autoDelete>true</glassfish:autoDelete>
</glassfish:container>
</arquillian>
Run Code Online (Sandbox Code Playgroud)
我的测试:
@RunWith(Arquillian.class)
public class ArquillianTestCase {
@Deployment
public static JavaArchive createDeployment() {
final JavaArchive jar = ShrinkWrap.create(JavaArchive.class, "test.jar")
.addClasses(FileBrowser.class, FileBrowserBean.class).addAsResource("META-INF/ejb-jar.xml")
.addAsResource("META-INF/glassfish-ejb-jar.xml");
return jar;
}
@EJB
private FileBrowser fileBrowser;
@Test
public void setupSecurity() throws Exception {
GlassfishTestHelper.createFileUser("user1", "xxx", "role1");
}
@Test
public void testLoadConfiguration() throws Exception {
final boolean loggedIn …Run Code Online (Sandbox Code Playgroud) 我似乎无法让Maven Glassfish插件在我的生活中工作:
<project>
...
<pluginRepositories>
<pluginRepository>
<id>glassfish-repository</id>
<name>Java.net Repository for Glassfish</name>
<url>http://download.java.net/maven/glassfish</url>
<layout>default</layout>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>
...
<build>
<plugins>
<plugin>
<groupId>org.glassfish</groupId>
<artifactId>maven-embedded-glassfish-plugin</artifactId>
<version>3.0</version>
<configuration>
<goalPrefix>glassfish</goalPrefix>
<app>${artifactId}.war</app>
<contextRoot>${context.root}</contextRoot>
<port>${http.port}</port>
</configuration>
</plugin>
...
</plugins>
</build>
</project>
Run Code Online (Sandbox Code Playgroud)
当我运行时mvn glassfish:run,它正在寻找一个不同的插件,但无法找到它:
[INFO] The plugin 'org.apache.maven.plugins:maven-glassfish-plugin' does not exist or no valid version could be found
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
在我的项目中,我正在使用glassfish-embedded 3.1.1和番石榴lib ...问题是glassfish附带了番石榴的旧实现(即google-collections)......
这会在运行时导致NoSuchMethodError,例如在使用稍后在guava中引入的Lists.reverse()或Sets.newIdentityHashSet()时.
我找不到任何解决方案来解决这个问题...(唯一一个是手动删除glassfish jar中的com/google类目录...)
我们有一个Java EE 7应用程序并使用Arquillian来测试东西.现在我们要检查当前登录用户的一些权限.我的问题很基本,如何在测试用例中登录用户?我读过ProgrammaticLogin在arquillian测试和嵌入式Glassfish,安全性和Arquillian问题上都没有用,但是没有明确回答.我目前的做法是这样的:
// Inject services etc.
@Test
public void testLogin(){
UserAccount user = new UserAccount();
user.setUsername("bob");
user.setPassword("bob");
userAccountService.save(user);
ProgrammaticLogin pl = new ProgrammaticLogin();
String realmName = "secureJDBCRealm";
try {
pl.login("bob", "bob".toCharArray(), realmName, true);
} catch (Exception e){
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
现在当我尝试运行它时,得到一个LoginException,声称我没有为"fileRealm"配置LoginModule.但是"fileRealm"不是我正在寻找的领域(我把它放在那里进行第一次测试,但后来我将其改为"secureJDBCRealm",这是我们为GlassFish定制的安全领域).我们arquillian-glassfish-embedded-3.1用于测试.
我正在使用Arquillian和使用TestNG的嵌入式glassfish 3.1.2.2编写集成测试.我希望能够并行运行这些测试,对于这种情况,我需要动态配置glassfish端口和数据库名称(我们已经有了这个设置,我想重用它的arquillian测试).我缺少的是一个'before container start'钩子,在那里我可以准备数据库,查找空闲端口并更新我的glassfish配置(domain.xml,也可以是glassfish-resources.xml).是否有一个"干净"的解决方案,或Arquillian开发人员没有预见到我的用例?
我目前解决它的hacky方法是覆盖arquillian的beforeSuite方法,但是这个方法被调用两次 - 在测试启动时然后在容器中(因此我可怜的静态标志).其次,这个解决方案不适用于基于JUnit的测试,因为在套件之前无法拦截arquillian:
public class FullContainerIT extends Arquillian {
private static boolean dbInitialized;
//@RunAsClient <-supported by @Test only
@Override
@BeforeSuite(groups = "arquillian", inheritGroups = true)
public void arquillianBeforeSuite() throws Exception {
if (dbInitialized == false) {
initializeDb();
dbInitialized = true;
}
super.arquillianBeforeSuite();
}
}
Run Code Online (Sandbox Code Playgroud)
我有一些想法:
+ @BeforeSuite @RunAsClient似乎是我需要的,但@RunAsClient仅支持@Test;
+我org.jboss.arquillian.container.spi.event.container.BeforeStart在Arquillian JavaDocs中看过事件 ,但我不知道如何听Arquillian事件;
+我已经看到有可能@Deployment创建一个ShrinkWrap描述符,但这些不支持Glassfish资源.
我最近遇到了glassfish standalone(v3.1)vs glassfish embedded(v3.1)vs java SE以及java.endorsed.dirs的使用方式的问题.我遇到的具体问题在这里,但我认为这不是我最后一次遇到类似问题.
我在这里和这里找到的信息建议在编译时将glassfish认可的lib添加到bootstrap类路径.但是,这个错误报告表明,当使用嵌入的glassfish时很难正确设置认可的库.
因此,似乎当我部署到独立的glassfish容器时,我的应用程序将针对glassfish包含的认可库运行,但是当使用嵌入式容器时,它不会.我遇到了我原来的问题,因为maven-embedded-glassfish-plugin没有启动使用像glassfish独立的认可库这样嵌入的glassfish.我也不确定其他容器(例如:jboss)是否包含与glassfish相同的一组认可库.
所以,我(1)应该努力(很多)确保我的应用程序是针对认可的lib编译的,并且总是部署到使用已认可的libs引导的容器中,或者我应该坚持使用捆绑的内容使用Java SE 6?
如果我选择(2),在将应用程序部署到使用较新的背书库进行自举的容器时,是否需要担心不兼容问题?
我很感激任何人都能提供的见解.
我正在尝试使用NB7,JUnit和Win7Professional机器中的嵌入式Glassfish服务器JUnit测试J2EE Web应用程序.
我将其分解为仅使用单个会话Bean测试简单的Hello-World Web App.
我在我的类路径中有glasfish-embedded-static-shell.jar,并且还试图使用glassfish-embedded-all-3.1但它也没有用.
现在这是我用来测试bean的代码:
import javax.ejb.embeddable.EJBContainer;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
public class SimpleBeanTest {
private static EJBContainer container;
public SimpleBeanTest() {
}
@BeforeClass
public static void setUpClass() throws Exception {
container = javax.ejb.embeddable.EJBContainer.createEJBContainer();
}
@AfterClass
public static void tearDownClass() throws Exception {
container.close();
}
@Test
public void testCountToThree() throws Exception {
System.out.println("countToThree");
SimpleBean instance = (SimpleBean) container.getContext().lookup("java:global/classes/SimpleBean");
int expResult = 0;
int result = instance.countToThree();
assertEquals(expResult, result);
}
}
Run Code Online (Sandbox Code Playgroud)
以下是它的结果:
19.06.2011 09:31:56 …Run Code Online (Sandbox Code Playgroud) 现在有没有人使用Embeddable API获取服务器上下文(使用org.glassfish.embeddable.GlassFish,不是javax.ejb.embeddable.EJBContainer)?如果有一种方法可以从正在运行的Glassfish获得EJBContainer,但我甚至找不到可用于查找的服务列表.
我正在使用 Netbeans 8.0、Windows 8、Java EE 7、Maven Web 应用程序项目和 glassfish 4。
当我尝试使用可嵌入的 EJB 容器运行单元测试时,容器的创建失败并出现以下异常:
SEVERE: Error while expanding archive file
java.io.FileNotFoundException: C:\Users\...\AppData\Local\Temp\gfembed1338945565251414358tmp\applications\classes\license\LICENSE (The system cannot find the file specified)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:221)
at java.io.FileOutputStream.<init>(FileOutputStream.java:171)
at com.sun.enterprise.deploy.shared.FileArchive.putNextEntry(FileArchive.java:716)
at org.glassfish.internal.deployment.GenericHandler.expand(GenericHandler.java:99)
at com.sun.enterprise.v3.server.ApplicationLifecycle.getContext(ApplicationLifecycle.java:1807)
at com.sun.enterprise.v3.server.ApplicationLifecycle.access$200(ApplicationLifecycle.java:115)
at com.sun.enterprise.v3.server.ApplicationLifecycle$DeploymentContextBuidlerImpl.build(ApplicationLifecycle.java:1670)
at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:424) at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:527)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:523)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:356)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:522)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:546)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1423)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1500(CommandRunnerImpl.java:108)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1762)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1674)
at com.sun.enterprise.admin.cli.embeddable.DeployerImpl.deploy(DeployerImpl.java:133)
at com.sun.enterprise.admin.cli.embeddable.DeployerImpl.deploy(DeployerImpl.java:109)
at org.glassfish.ejb.embedded.EJBContainerImpl.deploy(EJBContainerImpl.java:138)
at org.glassfish.ejb.embedded.EJBContainerProviderImpl.createEJBContainer(EJBContainerProviderImpl.java:134)
at javax.ejb.embeddable.EJBContainer.createEJBContainer(EJBContainer.java:127)
Run Code Online (Sandbox Code Playgroud)
当我尝试使用 netbeans …