我需要从我的EJB3应用程序连接到MongoDB实例,在glassfish 3.0.1上运行.Mongo项目提供了一组驱动程序,我可以在独立的Java应用程序中使用它们.
我如何在Java EE应用程序中使用它们?或者更好的措辞:当我的应用程序在EJB容器中运行时,如何使第三方库可用于我的应用程序?
目前,在部署尝试从库导入的bean时,我收到了java.lang.NoClassDefFoundError:
[#|2010-03-24T11:42:15.164+0100|SEVERE|glassfishv3.0|global|_ThreadID=28;_ThreadName=Thread-1;|Class [ com/mongodb/DBObject ] not found. Error while loading [ class mvs.core.LocationCacheService ]|#]
[#|2010-03-24T11:42:15.164+0100|WARNING|glassfishv3.0|javax.enterprise.system.tools.deployment.org.glassfish.deployment.common|_ThreadID=28;_ThreadName=Thread-1;|Error in annotation processing: java.lang.NoClassDefFoundError: com/mongodb/DBObject|#]
[#|2010-03-24T11:42:15.259+0100|SEVERE|glassfishv3.0|javax.enterprise.system.core.com.sun.enterprise.v3.server|_ThreadID=28;_ThreadName=Thread-1;|Exception while loading the app
org.glassfish.deployment.common.DeploymentException: java.lang.NoClassDefFoundError: com/mongodb/DBObject
at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:171)
at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:125)
at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:224)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:338)
Run Code Online (Sandbox Code Playgroud)
我尝试将其添加到NetBeans项目(属性 - >库 - >编译 - >添加Jar,启用'包'),我也尝试手动将jar文件复制到$ GF_HOME/glassfish/domains/domain1/lib(其中mysql-connector已驻留).
我是否需要使用容器"注册"库?通过注释引用它?扩展容器的类路径以包含库?
glassfish访问日志位于哪里?我希望它们在域/ domainX/logs中.是否需要更改设置以激活访问日志记录?
谢谢
我有一个由两个EJB实现的业务接口.
UserManagementService
@Remote
public interface UserManagementService {
// ...
}
Run Code Online (Sandbox Code Playgroud)
UserManagementServiceJpaImpl
@Stateless(name="userManagementServiceJpaImpl")
public class UserManagementServiceJpaImpl implements UserManagementService {
@EJB(beanName="userManagementDaoJpaImpl")
private UserManagementDao userManagementDao;
// ...
}
Run Code Online (Sandbox Code Playgroud)
UserManagementServiceMockImpl
@Stateless(name="userManagementServiceMockImpl")
public class UserManagementServiceMockImpl implements UserManagementService {
@EJB(beanName="userManagementDaoMockImpl")
private UserManagementDao userManagementDao;
// ...
}
Run Code Online (Sandbox Code Playgroud)
当我将应用程序部署到Glassfish 3.1时,我收到以下错误:
java.lang.RuntimeException: Error while binding JNDI name com.transbinary.imdb.service.UserManagementService for EJB : userManagementServiceMockImpl
at com.sun.ejb.containers.BaseContainer.initializeHome(BaseContainer.java:1550)
at com.sun.ejb.containers.StatelessSessionContainer.initializeHome(StatelessSessionContainer.java:202)
at com.sun.ejb.containers.ContainerFactoryImpl.createContainer(ContainerFactoryImpl.java:167)
at org.glassfish.ejb.startup.EjbApplication.loadContainers(EjbApplication.java:234)
at org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:290)
at org.glassfish.ejb.startup.EjbDeployer.load(EjbDeployer.java:101)
at org.glassfish.internal.data.ModuleInfo.load(ModuleInfo.java:186)
at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:249)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:460)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240)
at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:370)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:360)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:370)
at …
Run Code Online (Sandbox Code Playgroud) 我尝试使用Glassfish 3.1和Postgres为Web应用程序创建登录页面.我有本地数据库(localhost:5432).这是我的连接池:
Pool Name:pacjentauth
Resource Type:javax.sql.DataSource
Datasource Classname:org.postgresql.ds.PGSimpleDataSource
Driver Classname: [nothing here]
Run Code Online (Sandbox Code Playgroud)
portNumber,ServerName,用户和密码都可以.这是我得到的错误:
[#|2013-01-03T20:13:44.110+0100|WARNING|glassfish3.1.2|javax.enterprise.system.container.web.com.sun.web.security|_ThreadID=113;_ThreadName=Thread-2;|WEB9102: Web Login Failed: com.sun.enterprise.security.auth.login.common.LoginException: Login failed: Security Exception|#]
[#|2013-01-03T20:21:54.567+0100|WARNING|glassfish3.1.2|org.apache.catalina.connector.Request|_ThreadID=50;_ThreadName=Thread-2;|PWC4011: Unable to set request character encoding to UTF-8 from context , because request parameters have already been read, or ServletRequest.getReader() has already been called|#]
[#|2013-01-03T20:21:54.924+0100|WARNING|glassfish3.1.2|org.apache.catalina.connector.Request|_ThreadID=38;_ThreadName=Thread-2;|PWC4011: Unable to set request character encoding to UTF-8 from context , because request parameters have already been read, or ServletRequest.getReader() has already been called|#]
[#|2013-01-03T20:21:54.976+0100|WARNING|glassfish3.1.2|org.apache.catalina.connector.Request|_ThreadID=34;_ThreadName=Thread-2;|PWC4011: Unable to set request character encoding to …
Run Code Online (Sandbox Code Playgroud) 我在这里写一个问题,因为我自己几个月都找不到解决方案.我的情况:我有一个用java编写的客户端服务器应用程序,它使用Java2ee 6和EJB3.0.服务器端部署在glassfish 3.0上.我需要为应用程序开发/实现登录模块.必须使用ldap服务器进行身份验证,并在应用程序内部处理授权.因此,我想聘请JAAS技术来进行身份验证和授权.我这样做是为了例如像在这里.然后我按照本教程和官方文档进行登录.我的问题是ldap登录不起作用.
我的代码:
LoginContext lc = null;
try {
CallbackHandler handler = new CallbackHandler() {
public void handle(Callback[] callbacks) throws UnsupportedCallbackException {
for( int i = 0; i < callbacks.length; i++ ) {
if( callbacks[i] instanceof NameCallback ) {
// prompt the user for a username
NameCallback nc = (NameCallback)callbacks[i];
nc.setName("admin");
System.out.println("Login done.");
} else if( callbacks[i] instanceof PasswordCallback ) {
// prompt the user for sensitive information
PasswordCallback pc = (PasswordCallback)callbacks[i];
pc.setPassword("mypassword".toCharArray()); …
Run Code Online (Sandbox Code Playgroud) 我正在使用Glassfish 3.1,B06开发Java EE 6应用程序.为了保护我的应用程序,我正在使用JDBCRealm和编程安全性.这可以很好地检查用户名和密码.但是当谈到声明安全角色时,我遇到了一个问题:
要在Java EE 6中使用安全角色,我必须在EJB部署描述符和Glassfish特定的部署描述符中声明这些角色以链接这些角色(如Java EE 6教程中所述)仅我可以使用方法isCallerInRole(String roleRef)在EJB内部检查权限.
这对我的应用程序来说是不可取的,因为我希望能够动态地和以编程方式添加安全角色,而不必编写XML文件(例如,可以在数据库中定义角色名称).
我刚刚通过GF3源代码进行了调试,并在com.sun.ejb.containers.EjbContextImpl中看到了isCallerInRole的实现.容器从EJB描述符中获取角色:
public boolean isCallerInRole(String roleRef) {
(...)
EjbDescriptor ejbd = container.getEjbDescriptor();
RoleReference rr = ejbd.getRoleReferenceByName(roleRef);
(...)
}
Run Code Online (Sandbox Code Playgroud)
我环顾四周,发现如果我能以某种方式在我的应用程序中获取EJB描述符,我可以添加这样的角色:
EjbDescriptor ejbd = //??? Can i use that descriptor inside my app, or is that "forbidden"?
RoleReference rr = new RoleReference("admin", "Admins are allowed to do everything");
ejbd.addRoleReference(rr);
Run Code Online (Sandbox Code Playgroud)
有人做过这样的事情,还是对此有所了解?是否可以在我的应用程序中使用Ejb部署描述符?还是有更好的方法?
PS或我应该使用MBeans添加角色?在这里找到一个相关的帖子.
基本上,我想做的是为@PersistenceContext分配' unitName '属性,其值是我将在运行时从Session获得的.
详情;
我的应用程序将是一个SaaS应用程序,我将为每个不同的租户提供单独的数据库.我正在使用Glassfishv3并管理基于容器的实体,所以我没有明确地从EntityManagerFactory获取任何实例.我为创建实体经理所做的一切都是;
@PersistenceContext(unitName = "DBNAME")
private EntityManager entityManager;
Run Code Online (Sandbox Code Playgroud)
我需要根据当前用户传递unitName属性.它不应该是硬编码的.
我已经更新了Eclipselink 2.3但是所有的例子都是从EMF创建一个实例,你可以传递属性Map
Map memberProps = new HashMap();
memberProps.put("memberPu1", props1);
memberProps.put("memberPu2", props2);
Map props = new HashMap();
props.put("eclipselink.jdbc.exclusive-connection.mode", "Always");
props.put("eclipselink.composite-unit.properties", memberProps);
EntityManager em = emf.createEntityManager(props);
Run Code Online (Sandbox Code Playgroud)
不太可能在我的应用程序中,容器执行该工作,所以我无法做到这一点
EntityManager em = emf.createEntityManager(props);
Run Code Online (Sandbox Code Playgroud)
即使我在我所有的持久化单元和类的persistence.xml使用JNDI定义,我不能够告诉它DB(持久性单元),它应该在当时使用的应用程序服务器
任何帮助,将不胜感激
Glassfish JDBC领域具有您可以设置的几个不同属性.
我对摘要算法和密码加密算法属性感兴趣(这就是它们在管理控制台中的显示方式).
第二个是Glassfish 3.1.2的新版本,尽我所知.
我查阅了官方的Glassfish 3.1.1文档,但它没有解决新属性,也没有真正解释第一个属性的用途.
有一个文档错误引用了一个错误号(13363269),它必须指向一个已经失效的错误系统,因为我找不到它引用的错误.这个幻像错误可能会详细说明密码加密算法属性的用途,但唉似乎已经失去了时间的迷雾.
在命令行中,该场所被命名(不大可能)digestrealm-password-enc-algorithm
.看起来这将住在酒店旁边digest-algorithm
.
我试图阅读源代码,但JDBCRealm.java
文件似乎丢失了,虽然我无疑只是在错误的地方找.我发现的先前副本并未在任何地方引用该属性.
这两个属性是什么? 我有一种朦胧的感觉,他们一起确保如果我使用领域以明文密码登录,我可以以某种方式将散列和比较操作委托给领域,前提是哈希用于存储原始密码和用于输入密码的哈希以相同的方式计算.
该手册还指出,如果我想使用摘要式身份验证,我应该指定jdbcDigestRealm
JAAS上下文.如果我不想使用摘要式身份验证,那么我应该指定jdbcRealm
JAAS上下文.在我看来,这看起来是另一个我有效指定涉及哪种哈希算法的地方.
提前感谢任何指针.
我忘记了Glassfish 3.1.2.2的主密码.有没有办法重置它?我花了很多时间"谷歌搜索",但我找不到合适的答案.
我最近了解到,通过简单地添加注释,我可以轻松地使任何会话bean方法异步@Asynchronous
.
例如
@Asynchronous
public Future<String> processPayment(Order order) throws PaymentException {
...
}
Run Code Online (Sandbox Code Playgroud)
我知道Java EE 7添加了Concurrency Utilities,但在Java EE 6中,方法的线程池配置在@Asyncronous
哪里?有没有办法设置超时?它是一个固定的线程池吗?一个缓存的?什么是优先事项?它可以在容器中的某个位置配置吗?
glassfish-3 ×10
glassfish ×5
java-ee ×3
java-ee-6 ×3
ejb-3.0 ×2
java ×2
eclipselink ×1
ejb ×1
ejb-3.1 ×1
jaas ×1
jpa ×1
ldap ×1
mongodb ×1
netbeans ×1
postgresql ×1