我需要一种方法来保留一个值的两个键 - 正是Guavan的HashBasedTable所做的.问题是它在迭代值时不保留插入顺序.是否有任何优雅的解决方案让它工作?它不一定是Guava,但我不想让依赖的项目膨胀.
我试图使用提到的ImmutableTable - 我还没有找到任何例子.在构建这样的表时,我到处都是NPE:
ImmutableTable<String, String, AbstractUnit> units;
ImmutableTable.Builder<String, String, AbstractUnit> builder = units.builder();
builder.put(unit1.getType(), unit1.getName(), unit1);
...
units = builder.build();
Run Code Online (Sandbox Code Playgroud)
当gettinb units.values()时,我将获得NPE.另外,我能否在表格中修改AbstractUnit的值?
我正在使用Datanucleus和JDO开发用于嵌入式H2数据库的桌面应用程序。当我从Eclipse运行它时,一切正常,但是当我尝试用它制作可执行jar时,它将停止工作。我收到以下错误:
org.datanucleus.exceptions.NucleusUserException:已将持久性进程指定为使用名称为“ jdo”的ClassLoaderResolver,但DataNucleus插件机制尚未找到该持久性进程。请检查您的CLASSPATH和插件规范。
当然,这表明我没有正确配置某些内容-我缺少什么?如果我错过了一些大东西,那根本就行不通,所以我假设它是一个有缺陷的可执行jar。我已经在其他应用程序中看到了该错误,例如JPOX,该错误已得到修复,但没有给出任何解决方案。
整个错误stacktrace:
Exception in thread "main" javax.jdo.JDOFatalInternalException: Unexpected exception caught.
at javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOHelper.java:1193)
at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:808)
at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:701)
at db.PersistenceManagerFilter.init(PersistenceManagerFilter.java:44)
at Main.main(Main.java:26)
NestedThrowablesStackTrace:
java.lang.reflect.InvocationTargetException
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 javax.jdo.JDOHelper$16.run(JDOHelper.java:1965)
at java.security.AccessController.doPrivileged(Native Method)
at javax.jdo.JDOHelper.invoke(JDOHelper.java:1960)
at javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOHelper.java:1166)
at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:808)
at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:701)
at db.PersistenceManagerFilter.init(PersistenceManagerFilter.java:44)
at Main.main(Main.java:26)
Caused by: org.datanucleus.exceptions.NucleusUserException: Persistence process has been specified to use a ClassLoaderResolver of name "jdo" yet this has not been found by the DataNucleus plugin mechanism. …Run Code Online (Sandbox Code Playgroud) 我在我的网络应用程序中使用Guice没有问题,我想在桌面应用程序中使用它.我当然缺少一件事 - 某种方式告诉我的应用程序如何绑定所有内容并知道什么是什么.在Web应用程序中,我在Application类中声明了这一点,我应该如何在桌面应用程序中执行此操作?
这是我正在使用的相关代码:
public class GuiceModule extends AbstractModule
{
@Override
protected void configure()
{
// Enable per-request-thread PersistenceManager injection.
install(new PersistenceManagerFilter.GuiceModule());
// Business object bindings go here.
bind(ProjectQueries.class).to(JdoProjectQueries.class);
bind(new TypeLiteral<Repository<Project>>() { }).to(JdoProjectRepository.class);
}
Run Code Online (Sandbox Code Playgroud)
我的主要课程:
@Inject
public Repository<Project> projectRepo;
public void createNewProject() {
...
projectRepo.persist(newProject);
}
Run Code Online (Sandbox Code Playgroud)
我当然正在使用projectRepo.persist(newProject);
那么,我还需要做些什么才能让它发挥作用?
编辑:
好的,那个部分现在正常工作,谢谢:)似乎我需要做更多的事情来让持久性工作那样.
我现在在这里接受NPE:
public void persist(T entity)
{
pmProvider.get().makePersistent(entity);
}
Run Code Online (Sandbox Code Playgroud)
get()在这里返回null
它看起来像install(new PersistenceManagerFilter.GuiceModule()); 是不足够的.我需要做什么?我的Repository类以以下内容开头:
public abstract class JdoRepository<T> implements Repository<T> {
private final Class<T> clazz;
private final Provider<PersistenceManager> pmProvider;
protected JdoRepository(Class<T> clazz, …Run Code Online (Sandbox Code Playgroud)