0

以下を使用してマインドマップスタイルのアプリケーションを作成しようとしています。

Netbeans 7.2 jdk 6.35 Primefaces 3.4

アイデアは、データベースにアクセスし、そのデータベースからノードを生成することによってマインドマップを生成することです。プログラムが、アクセスしようとしているものと同じタイプのオブジェクトから適切なグラフィックを生成することを確認しました。ただし、データベース情報にアクセスしようとすると、NullPointerExceptionが発生します。汎用ページの生成に使用した手順は次のとおりです。

1)データベースを作成し、データを入力しました。2)NetBeansで「データベースからの新しいエンティティクラス」機能を使用しました。3)「エンティティクラスからのJSFページ」機能を使用しました。4)マインドマップを生成するためのJSFマネージドBeanを作成しました。

マインドマップBeanのコードは次のとおりです。

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jsf;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import jpa.entities.Enginetable;
import jpa.session.EnginetableFacade;
import org.primefaces.event.SelectEvent;
import org.primefaces.model.mindmap.DefaultMindmapNode;
import org.primefaces.model.mindmap.MindmapNode;

/**
 *
 * @author AOL
 */
@Named(value = "mmBean")
@RequestScoped
public class mmBean {


    private MindmapNode root;

    private MindmapNode selectedNode;

    private List<Enginetable> elements;
    private List<Enginetable> filteredElements;
    private List<Enginetable> userlist;

    private Enginetable selectedElement;
    private Enginetable[] selectedElements; 


    private List<Enginetable> elementlist = new ArrayList<Enginetable>();

    private Enginetable nodeentity = new Enginetable();
    private Enginetable rootentity = new Enginetable();
    private Enginetable userentity = new Enginetable();


    private jpa.session.EnginetableFacade ejbFacade;

    private static final String[] username;

    static{

        username = new String[10];  
        username[0] = "Mercedes";  
        username[1] = "BMW";  
        username[2] = "Volvo";  
        username[3] = "Audi";  
        username[4] = "Renault";  
        username[5] = "Opel";  
        username[6] = "Volkswagen";  
        username[7] = "Chrysler";  
        username[8] = "Ferrari";  
        username[9] = "Ford";  
    }

    /**
     * Creates a new instance of MmBean
     */
    public mmBean() {
        ///if(elements==null){
        elements = new ArrayList<Enginetable>(); 
        //} 
        //remoteuser=null;
        // this.populateRandomElements(elements, 10); 
        this.populateRandomElements(elements,6);  

        // filteredElements = new ArrayList<Graphelement>();
        root = new DefaultMindmapNode("Mercedes", "Google", "FFCC00", false);
        /*MindmapNode bmw = new DefaultMindmapNode("BMW", "IP Nos", "6e9ebf", true);
        MindmapNode volvo = new DefaultMindmapNode("Volvo", "Names", "6e9ebf", true);
        MindmapNode audi = new DefaultMindmapNode("Audi", "Malicious ", "6e9ebf", true);
        MindmapNode renault = new DefaultMindmapNode("Renault", "IP Nos", "6e9ebf", true);
        MindmapNode opel = new DefaultMindmapNode("Opel", "Names", "6e9ebf", true);
        MindmapNode volkwagen = new DefaultMindmapNode("Volkswagen", "Malicious ", "6e9ebf", true);
        MindmapNode chrysler = new DefaultMindmapNode("Chrysler", "IP Nos", "6e9ebf", true);
        MindmapNode ferrari = new DefaultMindmapNode("Ferrari", "Names", "6e9ebf", true);
        MindmapNode ford = new DefaultMindmapNode("Ford", "Malicious ", "6e9ebf", true);*/


        Object label = root.getLabel();
        Enginetable entity;


        for( int i = 0 ; i < this.elements.size() ; i++){

                    entity = this.elements.get(i);


                    if ( !label.equals(entity.getStartnode() ) && label.equals(entity.getEndnode() ) ) {

                            root.addNode(new DefaultMindmapNode(entity.getStartnode() , "Malicious Software: ", "00FF99", true));

                    } 

                    else if ( !label.equals(entity.getStartnode() ) && !label.equals(entity.getEndnode() ) ){

                            root.addNode(new DefaultMindmapNode(entity.getStartnode() , "Malicious Software: ", "CC0000", true));

                    }


                    else if ( label.equals(entity.getStartnode() ) ) {

                            this.rootentity.setStartnode( entity.getStartnode() );
                            this.rootentity.setEndnode( entity.getEndnode() );
                            this.rootentity.setConnections( entity.getConnections() );
                            this.rootentity.setGroupid( entity.getGroupid() );
                            this.rootentity.setMoveid( entity.getMoveid() );
                            this.rootentity.setNewconnectioncost( entity.getNewconnectioncost() );
                            this.rootentity.setNewinfovalue( entity.getNewinfovalue() );
                            this.rootentity.setUsername( entity.getUsername() );
                            this.rootentity.setUserid( entity.getUserid() );

                    } 
        }
    }

    public void setElements(List<Enginetable> elements) {
        this.elements = elements;
    }

    public List<Enginetable> getElements() {
        return elements;
    }
    public void setFilteredElements(List<Enginetable> filteredElements) {
        //this.filteredElements = filteredElements;
        this.elements=filteredElements;
    }

    public List<Enginetable> getFilteredElements() {
        return filteredElements;
    }

    public void setSelectedElements(Enginetable[] selectedElements) {
        this.selectedElements = selectedElements;
    }

    public Enginetable[] getSelectedElements() {
        return selectedElements;
    }

    public void setSelectedElement(Enginetable selectedElement) {
        this.selectedElement = selectedElement;
    }

    public Enginetable getSelectedElement() {
        return selectedElement;
    }

    public MindmapNode getRoot() {
        return root;
    }

    public MindmapNode getSelectedNode() {
        return selectedNode;
    }
    public void setSelectedNode(MindmapNode selectedNode) {
        this.selectedNode = selectedNode;
    }



    public void onNodeSelect(SelectEvent event) {
        MindmapNode node = (MindmapNode) event.getObject();


            for( int i = 0 ; i < this.elements.size() ; i++){
                    Enginetable entity;
                    Object label = node.getLabel();
                    Object rootlabel = this.root.getLabel();

                    entity = elements.get(i);

                    if ( entity.getStartnode() == rootlabel ){
                        this.rootentity = entity;
                    }
                    if ( entity.getStartnode() == label ){
                        this.nodeentity = entity;
                    }

            }
    //load children of select node and add via node.addNode(childNode);
    //populate if not already loaded
        if(node.getChildren().isEmpty()) {


            for( int i = 0 ; i < this.elements.size() ; i++){
                    Enginetable entity;

                    entity = this.elements.get(i);

                    if ( (this.nodeentity.getStartnode() == null ? entity.getStartnode() != null : !this.nodeentity.getStartnode().equals(entity.getStartnode())) && (this.nodeentity.getEndnode() == null ? entity.getStartnode() != null : !this.nodeentity.getEndnode().equals(entity.getStartnode())) &&  (this.rootentity.getEndnode() == null ? entity.getStartnode() == null : this.rootentity.getEndnode().equals(entity.getStartnode()))  )  {

                            node.addNode(new DefaultMindmapNode(entity.getStartnode() , "Malicious Software: ", "33FF00", true));

                    } 

                     else if ( (this.nodeentity.getStartnode() == null ? entity.getStartnode() != null : !this.nodeentity.getStartnode().equals(entity.getStartnode())) && (this.nodeentity.getEndnode() == null ? entity.getStartnode() == null : this.nodeentity.getEndnode().equals(entity.getStartnode())) &&  (this.rootentity.getEndnode() == null ? entity.getStartnode() == null : this.rootentity.getEndnode().equals(entity.getStartnode()))  )  {

                            node.addNode(new DefaultMindmapNode(entity.getStartnode() , "Malicious Software: ", "3300FF", true));

                    }

                    else if ( (this.nodeentity.getStartnode() == null ? entity.getStartnode() != null : !this.nodeentity.getStartnode().equals(entity.getStartnode())) && (this.nodeentity.getEndnode() == null ? entity.getStartnode() == null : this.nodeentity.getEndnode().equals(entity.getStartnode())) &&  (this.rootentity.getEndnode() == null ? entity.getStartnode() != null : !this.rootentity.getEndnode().equals(entity.getStartnode()))  )  {

                            node.addNode(new DefaultMindmapNode(entity.getStartnode() , "Malicious Software: ", "FF9900", true));

                    }

                    else if ( (this.nodeentity.getStartnode() == null ? entity.getStartnode() != null : !this.nodeentity.getStartnode().equals(entity.getStartnode())) && (this.nodeentity.getEndnode() == null ? entity.getStartnode() != null : !this.nodeentity.getEndnode().equals(entity.getStartnode())) &&  (this.rootentity.getEndnode() == null ? entity.getStartnode() != null : !this.rootentity.getEndnode().equals(entity.getStartnode()))  )  {

                            node.addNode(new DefaultMindmapNode(entity.getStartnode() , "Malicious Software: ", "CC0000", true));

                    }

                }

            }
        }


    public void onNodeDblselect(SelectEvent event) {
        this.selectedNode = (MindmapNode) event.getObject();        
    }


    private EnginetableFacade getFacade() {
        return ejbFacade;
    }



    private void populateRandomElements(List<Enginetable> list, int size) { 
        userlist = this.getListByUserID( 1 );
        for(int i = 0 ; i < size ; i++)  {

            if ("Chrysler".equals(username[i])){
                Random rand = new Random();
                Enginetable gel =new Enginetable();
                gel.setMoveid(i);
                gel.setUserid(i);
                gel.setStartnode(username[i]);
                gel.setEndnode(username[9]);
                gel.setConnections(username[9]);
         //       gel.setPurpose("dubious");
         //       gel.setRelationship("naughty");
         //       gel.setExperimentid(1);
                gel.setNewinfovalue(1);
                gel.setNewconnectioncost(1);
                list.add(gel);
            }

            else {
                Random rand = new Random();
                Enginetable gel =new Enginetable();
                gel.setMoveid(i);
                gel.setUserid(i);
                gel.setStartnode(username[i]);
                gel.setEndnode(username[9-i]);
                gel.setConnections(username[9-i]);
         //       gel.setPurpose("dubious");
         //       gel.setRelationship("naughty");
         //       gel.setExperimentid(1);
                gel.setNewinfovalue(1);
                gel.setNewconnectioncost(1);
                list.add(gel);                
            }
        }
    }

//


    public Integer getMoveId(Enginetable ent) {
        return ent.getMoveid();
    }

    public void setMoveId(Enginetable ent, Integer id) {
        ent.setMoveid(id);
    }

    public Integer getUserId(Enginetable ent) {
        return ent.getMoveid();
    }

    public void setUserId(Enginetable ent, Integer id) {
        ent.setMoveid(id);
    }

    public String getStartNode(Enginetable ent) {
        return ent.getStartnode();
    }

    public void setStartNode(Enginetable ent, String startnode) {
        ent.setStartnode(startnode);
    }

    public String getEndNode(Enginetable ent) {
        return ent.getEndnode();
    }

    public void setEndNode(Enginetable ent, String endnode) {
        ent.setEndnode(endnode);
    }

 /*   public int getExperimentid(Enginetable ent) {
        return ent.getExperimentid();
    }

    public void setExperimentid(Enginetable ent, int experimentid) {
        ent.setExperimentid(experimentid); 
    }*/

    public int getNewInfoValue(Enginetable ent) {
        return ent.getNewinfovalue();
    }

    public void setNewInfoValue(Enginetable ent, int totalinfovalue) {
        ent.setNewinfovalue(totalinfovalue);
    }

    public String getConnections(Enginetable ent) {
        return ent.getConnections();
    }

    public void setConnections(Enginetable ent, String connections) {
        ent.setConnections(connections);
    }

    public String getNewConnections(Enginetable ent) {
        return ent.getConnections();
    }

    public void setNewConnections(Enginetable ent, String newconnections) {
        ent.setConnections( newconnections );
    }

 /*   public String getUserName(Enginetable ent) {
        return ent.getUsername();
    }

    public void setUsername(Enginetable ent, String name) {
        ent.setUsername(name);
    }
 */
    public List<Enginetable> getListByUsername(String user){
       return this.ejbFacade.getEnginetableByUsername(user);
    } 

    public List<Enginetable> getListByUserID( int id ){
       if ( this.ejbFacade.getEnginetableByUserid(id) == null){
       throw new NullPointerException("admin is null!");
       }
       else if ( this.ejbFacade.getEnginetableByUserid(id) != null){
       List<Enginetable> list = new ArrayList<Enginetable>();
       list = this.ejbFacade.getEnginetableByUserid(id);
           return list;
       }
       else{
           List<Enginetable> list = new ArrayList<Enginetable>();
                Enginetable gel =new Enginetable();
                gel.setMoveid(1);
                gel.setUserid(1);
                gel.setStartnode(username[1]);
                gel.setEndnode(username[9]);
                gel.setConnections(username[9]);
         //       gel.setPurpose("dubious");
         //       gel.setRelationship("naughty");
         //       gel.setExperimentid(1);
                gel.setNewinfovalue(1);
                gel.setNewconnectioncost(1);
                list.add(gel);
           return list;
       }
    } 
}

完全を期すために、インポートするクラスのコードを含めました。

編集:スタックトレースで送信するには文字が多すぎるため、Enginetableクラスを削除しました。メソッドを取得して設定するだけでした。

EngineTableFacadeクラスのコードは次のとおりです。packagejpa.session;

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import jpa.entities.Enginetable;

/**
 *
 * @author AOL
 */
@Stateless
public class EnginetableFacade extends AbstractFacade<Enginetable> {
    @PersistenceContext(unitName = "Networks0.1PU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public EnginetableFacade() {
        super(Enginetable.class);
    }

    public List<Enginetable> getEnginetableByUsername( String username ) {
        try {
            List<Enginetable> userlist = (List<Enginetable>)
            em.createNamedQuery("Enginetable.findByUsername").
                    setParameter("Username", username).getResultList();
            return userlist; 
        } catch (NoResultException nre) {
            return null;
        }
    }

    public List<Enginetable> getEnginetableByUserid( int id ) {
        try {
            List<Enginetable> userlist = (List<Enginetable>)
            em.createNamedQuery("Enginetable.findByUserid").
                    setParameter("Userid", id).getResultList();
            return userlist; 
        } catch (NoResultException nre) {
            return null;
        }
    }

}

これにより、getListByUsernameメソッドまたはgetListByUserIDメソッドのいずれかが呼び出されたときにNullPointerExceptionがスローされますが、呼び出されていない場合は正常に機能します。StackTraceを確認したところ、例外がスローされているのはこれら2つのメソッドであるという私の考えが確認されました。

よくわかりませんが、これはmmBeanでエンティティマネージャがnullであることを意味しているのではないかと思います。これをどのように修正できるか、あるいは修正できるかどうかはわかりません。どうかアドバイスをいただければ幸いです。私はこの小さな橋を渡る必要がありますが、渡ることはできません。ありがとうございました。

スタックトレースを含めるように編集:

com.google.common.collect.ComputationException: java.lang.RuntimeException: java.lang.NullPointerException
        at com.google.common.collect.ComputingConcurrentHashMap$ComputingMapAdapter.get(ComputingConcurrentHashMap.java:397)
        at org.jboss.weld.bean.proxy.ClientProxyProvider.getClientProxy(ClientProxyProvider.java:102)
        at org.jboss.weld.el.AbstractWeldELResolver.lookup(AbstractWeldELResolver.java:115)
        at org.jboss.weld.el.AbstractWeldELResolver.getValue(AbstractWeldELResolver.java:96)
        at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:188)
        at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
        at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
        at com.sun.el.parser.AstIdentifier.getValue(AstIdentifier.java:103)
        at com.sun.el.parser.AstValue.getValue(AstValue.java:179)
        at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:224)
        at org.jboss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50)
        at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
        at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
        at org.primefaces.component.mindmap.Mindmap.getValue(Mindmap.java:98)
        at org.primefaces.component.mindmap.MindmapRenderer.encodeScript(MindmapRenderer.java:51)
        at org.primefaces.component.mindmap.MindmapRenderer.encodeEnd(MindmapRenderer.java:44)
        at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764)
        at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
        at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1757)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760)
        at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402)
        at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
        at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:288)
        at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
        at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
        at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
        at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.RuntimeException: java.lang.NullPointerException
        at org.jboss.weld.util.reflection.SecureReflectionAccess.runAsInstantiation(SecureReflectionAccess.java:186)
        at org.jboss.weld.util.reflection.SecureReflections.newInstance(SecureReflections.java:341)
        at org.jboss.weld.bean.proxy.ProxyFactory.create(ProxyFactory.java:242)
        at org.jboss.weld.bean.proxy.ClientProxyProvider.createClientProxy(ClientProxyProvider.java:87)
        at org.jboss.weld.bean.proxy.ClientProxyProvider.access$000(ClientProxyProvider.java:43)
        at org.jboss.weld.bean.proxy.ClientProxyProvider$1.apply(ClientProxyProvider.java:53)
        at org.jboss.weld.bean.proxy.ClientProxyProvider$1.apply(ClientProxyProvider.java:46)
        at com.google.common.collect.ComputingConcurrentHashMap$ComputingValueReference.compute(ComputingConcurrentHashMap.java:355)
        at com.google.common.collect.ComputingConcurrentHashMap$ComputingSegment.compute(ComputingConcurrentHashMap.java:184)
        at com.google.common.collect.ComputingConcurrentHashMap$ComputingSegment.getOrCompute(ComputingConcurrentHashMap.java:153)
        at com.google.common.collect.ComputingConcurrentHashMap.getOrCompute(ComputingConcurrentHashMap.java:69)
        at com.google.common.collect.ComputingConcurrentHashMap$ComputingMapAdapter.get(ComputingConcurrentHashMap.java:393)
        ... 52 more
Caused by: java.lang.NullPointerException
        at jsf.mmBean.getListByUserID(mmBean.java:360)
        at jsf.mmBean$Proxy$_$$_WeldClientProxy.getListByUserID(mmBean$Proxy$_$$_WeldClientProxy.java)
        at jsf.mmBean.populateRandomElements(mmBean.java:277)
        at jsf.mmBean.<init>(mmBean.java:74)
        at jsf.mmBean$Proxy$_$$_WeldClientProxy.<init>(mmBean$Proxy$_$$_WeldClientProxy.java)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at java.lang.Class.newInstance0(Class.java:355)
        at java.lang.Class.newInstance(Class.java:308)
        at org.jboss.weld.util.reflection.SecureReflections$16.work(SecureReflections.java:344)
        at org.jboss.weld.util.reflection.SecureReflectionAccess.run(SecureReflectionAccess.java:52)
        at org.jboss.weld.util.reflection.SecureReflectionAccess.runAsInstantiation(SecureReflectionAccess.java:173)
        ... 63 more
4

1 に答える 1

2

ejbをBeanに注入する必要があります

@EJB
private jpa.session.EnginetableFacade ejbFacade;

mmBeanでさらにいくつかの問題が見つかった場合、コンストラクター内のものをpostConstructメソッドに移動する必要があります(EJBの挿入後に呼び出されるため)

@PostConstruct
public void init() {
    ... (code from constructor here)
}
于 2012-11-08T16:27:40.490 に答える